【mysql】mysql优化

一,表设计
  1.1. E-R(entity relation)实体关系图
    长方形 实体 表
    椭圆形 属性 字段
    菱形 关系 一对一 多对一 属于 多对多
  1.2. 三范式标准
    原子性
      个人信息
      省市县乡镇
    唯一性
      主键 id
    无冗余性
      订单表中的商品名称与价格应该关联查询商品表
    三范式并不绝对。
  1.3. 选择合适的存储引擎
    查询效率
      myisam快
      innodb慢
    事务
      myisam不支持
      innodb支持
    全文索引
      myisam支持
      innodb不支持
      兄弟连,研究生命,和特朗普通话,别插嘴。
    锁机制
      myisam表锁
        即锁定一张表,如果进行读操作,则其他进程不允许写,如果进行写操作,则其他进程不允许读,更不允许写
      innodb行锁
        即锁定一条记录,其他进程可以对其他记录进行读写操作,
    文件存储区别
      myisam有三个文件
        .frm
        .myd
        .myi
      innodb有两个文件
        .frm
        .idb
      总结
        查询频繁的使用myisam,例如新闻系统
        安全性要求高的使用innodb,例如商城系统

  注意: 选择合适的字段类型
    数字->时间->枚举->字符串
    尽量不要使用 null 类型
二,备份
  2.1. 普通备份
    mysqldump -uroot -p123456 database > /tmp/bak.sql
    mysqldump -uroot -p123456 --all-databases --events > /tmp/bak.sql
  计划任务
    linux
    windows
  2.2. 增量备份
    增量备份(incremental backup)是备份的一个类型,备份上一次备份后的所有有变化的文件。
    1. 配置
      vim /etc/my.cnf
      log-bin=bin-log
      开启二进制日志
    2. 查看
      /usr/local/mysql/data/mysql-bin.000001
      二进制日志文件位置
      mysqlbinlog mysql-bin.000001
    3. 恢复
      (1)通过时间
        mysqlbinlog --stop-datetime="2017-05-06 06:01:30" mysql-bin.000001 | mysql -uroot -p
      (2)通过位置
        mysqlbinlog --stop-position="3068" mysql-bin.000001 |mysql -uroot -p
    4. 重置
      reset master
    5. 案例
      CREATE DATABASE lizhaohui;
      USE lizhaohui;
      CREATE TABLE users(id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, name VARCHAR(50) NOT NULL);
      reset master
      在创建完库表之后,再执行二进制日志文件记录。
      INSERT INTO users(name) VALUE('aaaaa');
      INSERT INTO users(name) VALUE('bbbbb');
      INSERT INTO users(name) VALUE('ccccc');
      INSERT INTO users(name) VALUE('ddddd');
      INSERT INTO users(name) VALUE('eeeee');
      INSERT INTO users(name) VALUE('fffff');
三,优化
  3.1. 定位慢语句
    vim /etc/my.cnf
      [mysqld]
      slow-query-log=1 # 开启记录慢查询的操作
      slow-query-log-file=slow.log #文件默认存放在mysql的data目录下
      long-query-time=1 #不能使用小数
    重启 mysql
      mysqladmin -uroot -p shutdown
      mysqld_safe -u mysql &
    快速插入数据
      INSERT INTO users(name) SELECT name FROM users;
  3.2. 处理
    1. 增加,删除,修改
      查看服务器 cpu 和 内存使用率
      top命令
      一张表记录不要超过100万条
        SELECT COUNT(*) FROM users;
      检查表索引不宜过多
        SHOW INDEX FROM users;
      分库分表
    2. 查询
      缓存
      语句分析
        explain 指令
          EXPLAIN SELECT * FROM users;
        type(连接类型)
          好坏顺序
            system > const > eq_ref > ref > fulltext > ref_or_null > index_merge > unique_subquery > index_subquery > range > index > ALL
          system
          const
            表中满足条件的记录最多一条,使用主键或者 唯一索引查询
            EXPLAIN SELECT * FROM users WHERE id=1;
          eq_ref
            某一列等于带索引的列
            CREATE TABLE IF NOT EXISTS t1(id INT NOT NULL AUTO_INCREMENT,name VARCHAR(50) NOT NULL, PRIMARY KEY(id))             ENGINE=InnoDB DEFAULT CHARSET=utf8;
            CREATE TABLE IF NOT EXISTS t2(id INT NOT NULL AUTO_INCREMENT,name VARCHAR(50) NOT NULL, PRIMARY KEY(id))             ENGINE=InnoDB DEFAULT CHARSET=utf8;
            EXPALIN SELECT * FROM t1, t2 WHERE t1.id = t2.id;
            注意:当数据量足够大时,才会出现此连接类型。
          ref
            使用普通索引进行查询
            SELECT * FROM users WHERE name = 'admin';
          ref_or_null
            通过普通索引检索,并且会检索null值
            EXPLAIN SELECT * FROM users WHERE name = 'amdin' or name = null;
          range
            范围
            EXPLAIN SELECT * FROM users WHERE id<3;
          index
            跟all一样,不过只会扫描索引.
            EXPLAIN SELECT id FROM users;
          all
            全表扫描
            EXPLAIN SELECT * FROM users;
      索引优化
        创建
        主键
          CREATE TABLE test(id INT PRIMATY KEY AUTO_INCREMENT,name VARCHAR(50));
          ALTER TABLE test ADD PRIMARY KEY(id);
        普通索引
          CREATE TABLE test(id INT PRIMARY KEY AUTO_INCREMENT,name VARCHAR(50), INDEX name(name));
          ALTER TABLE test ADD INDEX name(name);
        唯一索引
          CREATE TABLE test(id INT PRIMARY KEY AUTO_INCREMENT,name VARCHAR(50), UNIQUE name(name));
          ALTER TABLE test ADD UNIQUE name(name);
        删除
        主键
          ALTER TABLE test MODIFY id INT(10);
          ALTER TABLE test DROP PRIMARY KEY;
        非主键
          ALTER TABLE test DROP INDEX name;
        查看
          SHOW INDEX FROM test;
          注意:索引,利弊,索引是一把双刃剑。
    多机配置
      主从
        好处
          单向备份
          读写分离,提高效率
          原理


实验
在主服务器上操作
1. 启动binlog日志
vi /etc/my.cnf
2. 在文件中添加
log-bin=mysql-bin
server-id=101
3. 重启mysql
service mysqld restart
4. 查看二进制日志是否开启
show global variables like '%log%';
5. 在 主服务器上 授权
grant replication slave on *.* to 'zhang'@'192.168.103.102' identified by '123456';
6. 查看主机信息
show master status;
在从服务器上操作
1. 启动binlog日志
vi /etc/my.cnf
2. 在文件中添加
log-bin=mysql-bin
server-id=102
3. 重启mysql
service mysqld restart
4. 查看二进制日志是否开启
show global variables like '%log%';
5. 在 从服务器上 连接
change master to master_host='192.168.103.101',master_user='zhang',master_password='123456',master_log_file='mysql-bin.000001',master_log_pos=263;
6. 启动 sql 线程
show slave status\G;
start slave;
主主
好处
双向备份
高可用
负载均衡
原理
两台机器互为主从
实验
在主服务器上操作
1. 启动binlog日志
vi /etc/my.cnf
2. 在文件中添加
log-bin=mysql-bin
server-id=101
replicate-do-db=test
binlog-ignore-db=mysql
binlog-ignore-db=information_schema
auto-increment-increment=2
auto-increment-offset=1
3. 重启 mysql
service mysqld restart
4. 以 101 为主,以 102 为从
grant replication slave on *.* to 'zhang'@'192.168.103.102' identified by '123456';
show master status;
change master to master_host='192.168.103.101',master_user='zhang',master_password='123456',master_log_file='mysql-bin.000001',master_log_pos=106;
5. 查看 SQL线程
show slave status\G;
start slave;
在从服务器上操作
1. 启动binlog日志
vi /etc/my.cnf
2. 在文件中添加
log-bin=mysql-bin
server-id=102
replicate-do-db=test
binlog-ignore-db=mysql
binlog-ignore-db=information_schema
auto-increment-increment=2
auto-increment-offset=2
3. 重启 mysql
service mysqld restart
4. 以 102 为主,以 101 为从
grant replication slave on *.* to 'zhang'@'192.168.103.101' identified by '123456';
show master status;
change master to master_host='192.168.103.102',master_user='zhang',master_password='123456',master_log_file='mysql-bin.000001',master_log_pos=106;
5. 查看 SQL线程
show slave status\G;
start slave;
中文分词。
sphinx。=> coreseek。
scws。

转载于:https://www.cnblogs.com/peilanluo/p/6995176.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/283374.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

3d数学基础图形与游戏开发 英文版_1850款文字标题字幕条,AE图形预设包,logo生成神器...

2019最新1850款组文字LOGO动画预设&#xff0c;一键生成&#xff01;包含图形元素/字幕/logo/动画转场/背景等所有的元素都支持AE和PR所有元素的颜色、位置、大小、文字、Logo等都可以修改&#xff0c;包含GIF动图预览&#xff0c;方便查找使用&#xff0c;一键生成狂拽炫酷屌炸…

什么?WPF 不支持 SVG ?

什么&#xff1f;WPF 不支持 SVG &#xff1f;控件名&#xff1a;SharpVectors作者&#xff1a;Elinam LLC (Japan)项目地址&#xff1a; https://github.com/ElinamLLC/SharpVectors什么是SVG&#xff1f;SVG 指可伸缩矢量图形 (Scalable Vector Graphics)&#xff1b;SVG 用…

Vue实现pptx在线预览

PPTX在线预览&#xff0c;使用jquery的插件《PPTXjs》&#xff0c;纯前端实现pptx转html进行展示 1.在PPTXjs官网下载插件&#xff0c;并在index.html内引入 <link rel"stylesheet" href"/PPTXjs/css/pptxjs.css"> <link rel"stylesheet&quo…

手写数字识别

深度学习:一、感知器S型神经元sigmoid fuction:1/(1exp(-z)) ![image](https://yqfile.alicdn.com/2e0144aba1df89e4ad5437e51aa21abc052025e5.png)二、神经网路这是一个三层神经网络输入层 隐藏层 输出层三、手写数字识别神经网络一共四层神经网络&#xff0c;第一层是以28*28…

5.1 入门整合案例(SpringBoot+Spring-data-elasticsearch) ---- good

本节讲解SpringBoot与Spring-data-elasticsearch整合的入门案例。 一、环境搭建 新建maven项目&#xff0c;名字随意 pom.xml <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <…

小组是什么意思_生猪期货什么时候上市?相关企业如何参与生猪期货

2020年4月生猪期货已获中国证监会批准&#xff0c;7月份大连商品交易所开展生猪期货仿真交易&#xff0c;这个期待许久的新品种上市脚步声越来越近&#xff0c;而市场各方的关注度也日益提升。同时&#xff0c;期货公司也在积极备战&#xff0c;为需要申请交割库的实体企业提供…

iNeuOS工业互联网操作系统,在航天和军工测控领域的应用

目 录1. 行业概述... 22. 解决方案... 23. 解决的痛点... 61. 行业概述现在国际形势异常严峻&#xff0c;加大了偶发武装斗争的可能性。航天和军工领域的数字化转型和建设正在积极推进&#xff0c;在与航天二院、航天三院、航天六院、航天九院、无线电厂…

[vite] Failed to load source map for */*.css|.js

打开提示的文件&#xff0c;删除 “sourceMappingURL”这一行即可

《工具癖》Mac与Windows获取文件绝对路径的快捷键

对于开发者而言, 快速获取文件的绝对路径,是一件很提升效率的事情, 一般的做法是,右键... 其实是有快捷键的! Mac获取文件绝对路径 mac的快捷键为: commandoptioncWindows获取文件绝对路径 按住shift键, 右键, 会出现复制为路径的选项

PerfView专题 (第九篇):洞察 C# 中的 LOH 内存碎片化

一&#xff1a;背景 在 内存泄漏 的系列问题中&#xff0c;有一类问题是 内存碎片化 导致的&#xff0c;而且这种更容易发生在 LOH 上&#xff0c;因为它默认不开启 对象压缩&#xff0c;一般遇到这种情况&#xff0c;优先让朋友执行下面的代码应急。GCSettings.LargeObjectHea…

HSV色彩空间

转自原文 HSV色彩空间 理解HSV色彩空间&#xff1a; HSV颜色模式是除了RGB颜色模式之外的另一种流行的颜色模式&#xff0c;RGB被广泛运用于计算机中&#xff0c;而HSV则用在电视显示方面。它更符合人们对颜色的描述(什么颜色(H)&#xff0c;深浅度如何(S)&#xff0c;亮度如…

Linux之tomcat日志管理

tomcat 的日志输出catalina.out&#xff0c;变大&#xff0c;可使用下面方式解决。 cronolog. http://blog.csdn.net/huang_xw/article/details/6194232转载于:https://www.cnblogs.com/itdev/p/6103207.html

java随机抽题系统_为什么要使用考试系统的随机组卷功能?

一个考试系统的组卷灵活性&#xff0c;不仅仅在于其题型丰富、设置参数齐全&#xff0c;也在于抽题组卷方式。除了平时我们严肃性的固定题目出卷方式&#xff0c;我们往往也考虑到需要随机组卷的功能。为什么用户会需要随机组卷的功能呢&#xff1f;随机组卷功能有什么用处&…

vue 项目中 splice 删除的不是指定的位置 而是最后一个

问题 就是v-for选择里面 删除数组指定元素 结果splice删除的永远都是最后一个 //html <view class"card ml20 mr20 mt20 c-row"><view class"flex-cover time-main" v-for"(item,index) in tabbar" :key"index"><scr…

常用的git命令

GIT 什么是git 是一个源代码管理工具在一个项目中&#xff0c;凡是由开发人员编写的都是源代码源代码有必要被管理起来吗让源代码可以被追溯&#xff0c;主要记录每次变了什么&#xff0c;谁主导这次变化人为的维护比较麻烦GIT是Linux之父当年为了维护管理Linux源代码写的一个工…

frameset在html5下用什么代替_速速围观!冬至吃货地图来啦~蚌埠的吃货们,你们今天吃什么?...

中国传统二十四节日冬农历十一月初七至冬至&#xff0c;又称日短至、冬节、亚岁等&#xff0c;兼具自然与人文两大内涵&#xff0c;既是二十四节气中一个重要的节气&#xff0c;也是中国民间的传统节日&#xff0c;被视为冬季的大节日。我们迎来了冬至节气&#xff0c;真正的隆…

WinForm(九)UI加载“大”数据

由于WinForm的UI是绘制的&#xff0c;所以在加载大量数据数据时会有一定的延时&#xff0c;本篇就讨论几个减少延时的方法。在加载有规律数据时&#xff0c;可以考虑用递归&#xff0c;简单方便快捷来加载数据&#xff0c;如下&#xff0c;把一个文件夹下的所有文件或文件夹加载…

QuillEditor 图片添加缩放功能

安装插件 npm install --save quill-blot-formatter 使用&#xff1a; 添加 :modules"modules" <template><QuillEditorref"refEditor"theme"snow":toolbar"toolbarOptions"contentType"html"enable:content…

关于电商购物车与订单

选好一个商品&#xff0c;点击加入购物车的时候&#xff0c;你要把商品的id和用户的id放入购物车表里面&#xff0c;如果还有其他重要的标志性信息也可以放进去&#xff0c;这样用户就是退出商城&#xff0c;下次进入的时候&#xff0c;系统加载也可以去检索购物车表信息&#…

Servlet 应用程序事件、监听器

Web容器管理Servlet/JSP相关的生命周期&#xff0c;若对HttpServletRequest对象、HttpSession对象、ServletContxt对象在生成、销毁或相关属性设置发生的时机点有兴趣&#xff0c;可以实现对应的监听器(Listener)。 一、ServletContext事件、监听器 与ServletContext相关的监听…