MySQL深入学习总结

举报
当她睡着时 发表于 2021/06/15 21:20:23 2021/06/15
【摘要】 MySQLMySQL是瑞典的MySQL AB公司开发的典型的开源关系型数据库管理系统,其中维护的都是二维表,类似于Excel表格;关系型数据库除了MySQL,还有Oracle数据库(甲骨文公司,闭源)、SQL Server(微软,闭源);后来MySQLab被Sun公司收购,Sun公司又被甲骨文公司收购,所以现在MySQL是Oracle旗下产品。因害怕Oracle今后不再开放MySQL源代码,...

MySQL

MySQL是瑞典的MySQL AB公司开发的典型的开源关系型数据库管理系统,其中维护的都是二维表,类似于Excel表格;关系型数据库除了MySQL,还有Oracle数据库(甲骨文公司,闭源)、SQL Server(微软,闭源);后来MySQLab被Sun公司收购,Sun公司又被甲骨文公司收购,所以现在MySQL是Oracle旗下产品。因害怕Oracle今后不再开放MySQL源代码,其创始人重写了一套关系型数据库命名为MariaDB,其功能与MySQL基本没有差别。

关系型数据库:MySQL、MariaDB、SQL Server、Oracle等

非关系型数据库(NOSQL):Redis、MongoDB、Hbase等

安装MySQL数据库(5.5版本):yum -y install mariadb mariadb-server

启动MySQL:systemctl start mariadb.server

开机自启动:systemctl enable mariadb.server

设置用户名密码:mysqladmin -uroot password 123456

登录数据库:mysql -uroot -p123456

  • SQL语句(92标准版SQL语句,适用于大部分关系型数据库)

DDL 数据定义语言 create drop

DML 数据操纵语言 update delete insert

DQL 数据查询语言 select

DCL 数据控制语言 grant

(一)查看数据库内容

1.查看数据库:show database;

 

  1. 进入数据库:use 库名;例:use mysql;
  2. 进入后,查看库中的表:show tables;

 

 

(二)数据库及表的操作

  1. 创建数据库:create database 库名;例:create database abc;

 

  1. 删除数据库:drop database 库名;例:drop database abc;
  2. 创建表:create table 表名(字段1 数据类型1,字段2 数据类型2......);创建一个名为info的表,内含字段id和name,类型为整数和可变长字符串,()内是规定有多少位。

例:create table info(id int(3),name varchar(10));

 

  1. 查看表结构:desc 表名;例:desc info;

  show create table 表名;

 

 

  • 数据表内容的增删改查

增加(insert)

  1. 插入一行数据:insert into 表名 values(值1,值2)

 

  1. 查看刚刚插入表中的数据:select * from 表名;例:select * from info;

 

  1. 一次性插入多行数据(中间的,可以分开多行数据):例:insert into info values(3,xiaozhao),(4,xiaoqiang);

 

删除(delete)

  1. 删除表中所有内容:delete from 表名;例:delete from info;
  2. 删除某一条数据:delete from 表名 where 字段=值;例:如果删除上表4号数据,则 delete from info where id=4;

 

修改(update)

  1. 修改表中name字段所有内容:update info set name=“xiaoming”
  2. 修改符合条件的值,update 表名 set 需要修改的字段=“新名称” where 字段=值;例:修改表中的xiaozhao为xiaogang,则:update info set name=xiaogangwhere id=3;

 

查看(select)

  1. 查看表中内容:select * from 表名;例:select * from info;

 

 

  • 表结构(字段)相关操作

查看表结构

  1. desc 表名;或者show creat table 表名;

修改表结构

  1. 增加一个字段:alter table 表名 add 字段名 字段类型;例,为info表增加一个年龄字段:alter table info add age int(3);

注:如果想指定位置,则可在int(3)后写first、after id、before

 

  1. 删除一个字段:alter table 表名 drop 字段名;例,删除info表中age1字段:alter table info drop age;

 

  1. 修改字段数据类型:alter table info modify 字段 更改的字段类型;例,修改age的类型为int(5):alter table info modify age int(5);

 

  1. 修改字段顺序,例,将name字段移到第一行:alter table info modify name varchar(10)first;

 

  1. 修改已有字段的名称,例,修改age为性别(sex):alter table info change age sex varchar(5);

 

  1. 修改表名,例,将info修改为info1:alter table info rename info1;

 

 

  1. 创建两张表,第一张包含id、name、subject字段,第二张表包含id、source字段

 

  1. 为表t1插入数据:

insert into t1 values(1,"xiaoming","English"),(2,"xiaohong","English"),(3,"xiaogang","English");

 

  1. 为表t2插入数据:

 

  1. 为表2source字段插入数据:

 

(五)创建新一个新库

  1. 创建一个新库,指定字符编码为utf8:create database abc charset=utf8;
  2. 进入abc库,创建名为学生的新表,内含名字、编码字段:create table student(name varchar(10),code int(3) zerofill);
  3. 创建名为info的新表,内含code、subject、score:create table info(code int(3) zerofill,subject varchar(10),score int(3));

 

  1. student表中插入数据:insert into student values("张三",001),("李四",002),("王五",003),("甲六",004);

 

  1. info表中插入数据:insert into info values(001,"数学",80),(002,"数学",75),(001,"语文",90),(002,"语文",80),(001,"英语",90),(002,"英语",85),(003,"英语",80),(004,"英语",70);

 

order by排序(内含limit分页)

  1. 排序:以成绩为标准对info表内数据升序排列:select * from info order by score;

 

  1. 降序排列:select * from info order by score desc;

 

  1. 查看info表中前两条数据:select * from info limit 2;

 

  1. 只显示某一行:select * from info limit 偏移量,行数;例:偏移量从0开始,即第一行为0。

 

  1. 根据表info中的数据按降序排列,并显示出第一行数据:

select * from order by score desc limit 1;

 

  1. 注意:limit是用于分页查看,偏移量是指从第几行开始,第一行表示为0。

group by分组

  1. 根据表info对科目进行排序:select * from info group by subject;

 

聚合函数

  1. 聚合函数sum()求和,max()最大值,min()最小值,count()统计,avg()平均数。
  2. 格式:select 函数(值)from 表名;
  3. 根据score排序并列出最小值:select min(score) from info;

 

去重

  1. distinct去重:格式,select distinct 字段 from 表名;

select distinct subject from info;

 

聚合

  1. 问题1:查询出所有学生信息,SQL语句怎么编写:select a.code,a.name,b.subject,b.score from student a,info b where a.code=b.code;

 

  1. 问题2:新学生小明,学号为005,需要将信息写入学生信息表,SQL语句怎么编写:insert into student values(小明5);

 

  1. 问题3:李四语文成绩被登记错误,成绩实际为85分,更新到考试信息表中,SQL语句怎么编写:update student a ,info b set score=85 where a.name="李四" and b.subject="语文"and a.code=b.code;

 

  1. 问题4:查询出各科成绩的平均成绩avg(),显示字段为:学科、平均分,请问SQL语句如何编写:select subject,avg(score) from info group by subject;

 

  1. 问题5:查询出所有学生的各科成绩,显示字段为:姓名、学号、学科、成绩,并以学号与学科排序,没有成绩的学生也需要列出,SQL怎么编写:select a.name,a.code,b.subject,b.score from student a,info b where a.code=b.code order by name,subject;

 

  1. 问题6:查询出单科成绩最高的,显示字段为:姓名、学号、学科、成绩,SQL语句如何编写:select a.name,a.code,b.subject,max(b.score) from student a,info b group by subject;

 

  1. 问题7:列出每位学生的各科成绩,要求输出格式:姓名、学号、语文成绩、数学成绩、英语成绩,SQL怎么写:select student.name,student.code,sum(if(info.subject="语文",info.score,0)) 语文成绩,sum(if(info.subject="数学",info.score,0)) 数学成绩,sum(if(info.subject="英语",info.score,0)) 英语成绩 from student,info where student student.code=info.code group by student.name;
  2. abc库中创建一个新表:create table worker(salay int(10),id int(3));

 

  1. student表和worker表进行全连接:select * from student union all select * from  worker;

全连接: union或union all

1.两张表的数据数量相同

2.全连接内使用order by 没有效果,可以对连接后的结果进行排序;

3.union会合并相同的数据;

 

授权与撤销授权

  1. 授权:grant 权限[all,insert,delete,update,select] on 库.表 to '用户'@'地址' identified by '密码';
  2. 撤销权限:revoke 权限[all,insert,delete,update,select] on 库.表 from '用户'@'地址' ;
  3. 查看用户授权:show grants for '用户'@'地址';

数据类型

  1. 数字--> tinyint(一个字节) smallint(两个字节) mediumint(三个字节) int(四个字节) bigint(八个字节)float(浮点数,也就是小数double  bit  zerofill  
  2. auto_increment:自增
  3. 字符串  char  varchar(可变长字符串)
  4. 时间    datetime(年月日时分秒) date(年月日)  time(时分秒) year(年) now()  length() year() lpad(str,n,pad)
  5. 生成随机数(0-1范围):rand()
  6. if(值,t,f)
  7. ifnull(值1,值2)
  8. case when [值1] then [结果] ... else [默认值] end

MySQL密码

  1. 忘记mysql密码如何解决
  2. 修改MySQL的root密码:

1.关闭MySQL systemctl stop mysqld

2.执行语句,安全登录:mysqld_safe --skip-grant-table &

3.免密登录数据库后,使用update语句修改密码

update mysql.user set password=password(密码where=root;

  1. 杀死MySQL进程:kill -9 MySQL的pid(通过ps -aux查询得到)
  2. 重新启动
  3. MySQL的命令选项:mysql  -u  指定用户  -p密码 -h 指定主机地址 -P 端口号  -e  SQL语句
  4. 例:mysql -uroot -p123123 -e use mysql;select user from user;
  5. 同理,在mysql中也可以执行系统命令,例:system ls

 

  1. 设置字符编码,在mysql配置文件/etc/my.cnf中[mysqld]下添加character_set_server=utf8
  2. MySQL内输入:show variables like character%;查看字符编码。

 

索引(相当于目录,可以快速找到数据)

运维人员一般用不上,属于开发要了解的

  1. 索引的分类:

普通索引:    index

唯一性索引:unique

主键:          primary key

全文索引:   fulltext

创建索引

  1. 创建表时,创建索引:create table 表名(字段 数据类型(长度),.....,index 索引名称(字段名[length]));
  2. 例:create table test(id int(3),name varchar(10),index idx_id(id));
  3. 查看索引:show index from test\G;

 

  1. 创建表后,创建索引(两种方法)

1)create index 索引名 on 表名(字段[length]);

2)alter table 表名 add index 索引名称(字段[length]);

  1. 例:alter table info add index idx_code(code); (索引名称规范idx_索引的字段名)此处不写长度

查看索引:show index from 表名\G;

 

  1. 前缀索引:在创建索引时使用length指定使用该字段数据的前几个字符做索引,通常用于数据比较大时;

删除索引

  1. 删除索引drop index 索引名称 on 表名;
  2. 例:删除info表的索引idx_code:drop index idx_code on info;

 

主键

  1. 创建表时,添加主键:create table 表名(字段 数据类型,....,primary key(字段));
  2. 创建表后,添加主键:alter table 表名 add primary key(字段);
  3. 删除主键:alter table 表名 drop primary key;

全文索引 fulltext

  1. 主要用于字段数据类型为text(文本文件)或varchar(可边长字符串)。

索引作用

  1. 索引的作用

1)加快查询速度

2)降低磁盘IO成本

3)加快表与表之间的连接

4)减少分组排序的时间

  1. 索引的使用
  • 对于经常更新的数据字段,不要使用索引;
  • 表特别小的时候,不需要使用索引-->全表扫描(select语句)比使用索引查询快时,不创建索引
  • 字段中数据唯一性比较差的,不适合创建索引
  • 索引应该尽量建立在字段中数据比较小的,如果指定数据比较长应该创建前缀索引。
  • 创建索引的字段尽量在where中使用。
  • 100万行数据,code=001 select * from where code=001;

正常查询:全表扫描

使用索引查询:name使用索引,只扫描索引列

 

组合索引:

假设有a b 两个字段,创建索引 where a=1 and b=1

MySQL查询时,只会使用1个索引,所以先查询a=1再查询b=1,此时应该是用组合索引(a,b)

  1. 索引失效:
  • 条件中有or
  • 使用Like加% 模糊查询
  • 全表扫描比使用索引查询快
  • 索引是表达式的一部分
  • 字段类型是字符串,数据没有加“ ”

 

事务

是一种机制,其作用是保持数据一致性

  1. MySQL的事务主要用来处理操作量大,复杂度高的数据;innodb存储引擎支持事务,MyISAM不支持事务
  2. 事务的ACID特点:原子性、一致性、隔离性、持久性
  • 原子性:事务是一个整体,是不可分割的,事物中的所有操作要不都执行成功,要不都失败;rollback(回滚)可以撤销事务中已经执行的SQL语句;Innodb存储引擎中通过undo log实现回滚
  • 一致性:当事务完成时,数据必须处于一致状态,在事务开始之前数据处于一致状态;当事务再进行时,数据可能处于不一致状态;当事务执行完成后,数据必须处于一致状态;
  • 隔离性:对数据进行修改的所有并发事务都是隔离的;以防止多个食物并发执行时由于交叉执行导致数据不一致;
  • 持久性:事务处理的结果都是永久的;
  1. 手动开启事务:begin;(开始)commit;(提交)rollback;(回滚)
  2. 查看自动提交:show variables like autocommit;
  3. 开启/关闭自动提交:set antocommit=1/0;

存储引擎

  1. 查看MySQL默认支持的搜索引擎:show engines\G;

 

  1. 主要学习innodb和myisam,默认使用存储引擎innodb,通过命令查看:show variables like default_storage_engine;
  2. 创建表时指定存储引擎:create table 表名(字段1 字段类型,字段2 字段类型,...) engine="存储引擎";
  3. 修改默认存储引擎:set global default_storage_engine="存储引擎";  

 

  1. Innodb 支持事务 行级锁 64TB;

MyISAM不支持事务 表级锁 256TB;

  1. MyISAM 存储引擎表存储为三个文件:

.frm  存储表格式

.MYD  存储数据

.MYI  存储索引

  1. MyISAM 以读为主,不频繁更新的表,对数据一致性要求不高
  2. Innodb 以写为主,对数据一致性要求比较高

MySQL日志(重点)

  1. MySQL中包含6种日志:错误日志、查询日志、慢查询日志、二进制日志、中继日志、元数据日志
  • 错误日志:和MySQL启动相关的信息,mariadb默认路径/var/log/mariadb/mariadb.log
  • 二进制日志(重点):记录跟修改相关的SQL语句,例如updata insert delect create drop alter

二进制日志有三种格式:

  1. 语句
  2. 混合

log-bin=mysql-bin写入MySQL配置文件中,默认位置在/etc/my.cnf 开启二进制日志,并指定日志文件名

 

查看二进制日志文件:ls /var/lib/mysql/  标黑处

 

  • 查看二进制文件内容:mysqlbinlog mysql-bin.000001
  • MySQL内查看二进制状态:show master status;
  • MySQL查看所有二进制日志:show master logs;
  • MySQL内清除二进制日志:reset master;
  • 删除指定二进制日志:purge master logs to mysql-bin.000001;
  • 删除指定二进制日志之前:purge master logs before 日期 时间;
  • 查看二进制日志过期时间:show variables like expire_logs_days;
  • 设置二进制日志过期时间:set global expire_logs_days=3;
  • 查看是否开启二进制日志show variables like "log_bin";
  • 查看二进制日志的缓存大小show variables  like "binlog_cache_size";
  • 查看二进制日志格式show variables like "binlog_format";

查询日志与慢查询日志

  1. 查询日志:记录客户端所有的语句,包括查询语句(通常不开启)
  2. 开启/关闭查询日志:set global general_log=1/0
  3. 慢查询日志:记录执行时间较长,超过long_query_time设定的值并且扫描数据行数不小于min_examined_row_limit的SQL语句。
  4. show variable like long%;默认单位是秒,可以精确到微秒
  5. show variables like %row_limit;
  6. 开启/关闭 慢查询日志:set global slow_query_log=1/0
  7. 设置慢查询日志时间:set long_query_time=数值(默认单位是秒)
  8. 配置文件/etc/my.cnf中的mysqld段指slow_query_log_file=路径文件名

数据库备份

  1. 备份策略:全备份、增量备份、差异备份
  2. 热备份 :数据库在运行过程中进行备份,不需要对数据库额外操作温备份 :对表进行锁定,表中数据不可以变化,此时数据库还在运行过程中的备份  冷备份 :停止数据库之后进行备份
  3. Mysql备份方法1(导出):select * from 表名 into outfile "路径文件名";例:备份表student到根下的test:select * from student into outfile /var/lib/mysql/student.txt;

注意:保存文件的目录一定有mysql用户权限

 

  1. 导入表:load data infile 路径文件名into table 表名;
  2. 将表导出为Excel文件:test:select * from student into outfile /var/lib/mysql/student.csv;
  3. 安装lrzsz:yum -y install lrzsz
  4. sz student.csv传到桌面上

MySQL自带的备份工具 mysqldump

  1. mysqldump选项

-u 指定用户

-P指定密码

-p指定端口

-h指定主机地址

  1. linux命令行,备份数据库abc,导出sql文件,格式:mysqldump -u用户 -p密码 库名 > 文件名.sql

例:mysqldump abc > abc.sql

  1. linux命令行,备份abc库中的表,同样也是导出sql文件:mysqldump -u用户 -p密码 库名 表名 > 文件名.sql

例:mysqldump abc student > student.sql

  1. 备份表结构
  2. 恢复数据库,在数据库中:source /路径/备份文件.sql
  3. 恢复在数据库外:cat 备份文件.sql |mysql -u用户 -p密码 库名               mysql -u用户 -p密码 库名 < 备份文件.sql
  4. mysqldumper 多线程并发执行备份,为每一个表创建一个备份文件

基于二进制节点位置进行数据恢复

  1. mysqlbinlog --start-position=起始节点 --stop-position=结束节点 二进制名称|mysql -uroot -p123123

基于二进制日志时间进行数据恢复

  1. mysqlbinlog --start-datetime="起始时间" --stop-datetime="终止时间" 二进制日志名称|mysql -uroot -p123123

MySQL客户端工具

  1. mysql
  2. mysqladmin 管理工具 mysqladmin -uroot password 123123
  3. mysqldump 数据导出工具
  4. mysqlpump 并行导出数据工具(5.7版本之后才有)
  5. mysqlcheck 表维护工具
  6. mysqlimport 数据导入工具 mysqlimport -uroot -p密码 库名 备份文件名

MySQL5.7二进制包安装

  1. yum安装lrzsz,然后上传MySQL二进制包:yum -y install lrzsz
  2. 解包到usr下的src:tar xf mysql-5.7.22-linux-glibc2.12-x86_64.tar.gz -C /usr/src
  3. 为了更好实现版本控制,我们为解包好的文件创建个软连接:ln -s /usr/src/mysql-5.7.22-linux-glibc2.12-x86_64/ /usr/local/mysql
  4. 创建MySQL程序用户:useradd -M -s /sbin/nologin mysql
  5. 进入MySQL目录:cd /usr/local/mysql
  6. 做一个环境变量:echo "export PATH=$PATH:/usr/local/mysql/bin" >> /etc/profile
  7. 执行source命令使其立即生效:source /etc/profile
  8. 初始化MySQL配置:mysqld --user=mysql --initialize --datadir=/usr/local/mysql/data
  9. 记录密码:TaKm#R5lb8ms(每个生成的不同)

 

  1. mysql启动文件复制到/etc/init.d下:cp support-files/mysql.server /etc/init.d/mysqld
  2. 修改cnf配置文件,默认应该在support-files中有my_default.cnf文件,如果没有,自己上传
  3. 如果启动不成功,大概率可能是,本机已经安装过mysql或者mariadb,有残留文件,yum -y remove卸载一下
  4. 启动MySQL:/etc/init.d/mysqld start
  5. 使用刚刚生成的密码登录:mysql -uroot -pTaKm#R5lb8ms
  6. 登录后首先修改初始化密码:set password=password(123123;

 

  1. 安装成功

 

  1. :MySQL配置文件my.cnf
  2. 由于在7.18开始,二进制包不再包含示例文件my-default.cnf,所以我从5.7.17版本中提取了样例,但是发现里面也没有太多项配置,my-default.cnf内容如下:

# For advice on how to change settings please see# http://dev.mysql.com/doc/refman/5.7/en/server-configuration-defaults.html# *** DO NOT EDIT THIS FILE. It‘s a template which will be copied to the# *** default location during install, and will be replaced if you# *** upgrade to a newer version of MySQL.

 

[mysqld]

# Remove leading # and set to the amount of RAM for the most important data# cache in MySQL. Start at 70% of total RAM for dedicated server, else 10%.

# innodb_buffer_pool_size = 128M

# Remove leading # to turn on a very important data integrity option: logging# changes to the binary log between backups.

# log_bin

# These are commonly set, remove the # and set as required.

# basedir = .....

# datadir = .....

# port = .....

# server_id = .....

# socket = .....

 

# Remove leading # to set options mainly useful for reporting servers.

# The server defaults are faster for transactions and fast SELECTs.

# Adjust sizes as needed, experiment to find the optimal values.

# join_buffer_size = 128M# sort_buffer_size = 2M# read_rnd_buffer_size = 2M

 

sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES

主从复制(数据库热备份)

  1. 主从复制主要通过二进制日志实现,在主库上开启二进制日志(修改相关的SQL语句),主库将二进制日志发送到从库,并写入从库的中继日志中,从库根据中继日志的内容进行重做(重新执行一遍),从而达到主从数据一致。
  2. 部署两台MySQL主机:一台名为mysql-master,另一台为mysql-slave。上传mysql5.7二进制包,并将其解压移动到usr/local下,命名为mysql5.7

 

  1. 主从复制的优势:

1.如果主库出现问题,可以切换到从库上提供服务;

2.从库提供读操作,可以减轻主库I/O压力

3.可以在从库上做数据备份,避免备份期间影响主库的性能;

  1. MySQL主从复制默认是异步复制;5.5版本开始支持半同步复制;
  2. 二进制日志格式:语句 行 混合7.6之前默认是语句模式复制;5.7.7之后默认是行模式复制
  3. Mysql复制架构: 一主一从一主多从双主复制级联复制同源复制(多主一从)
  4. 首先,主库开启二进制日志(配置文件中):log-bin=mysql-bin
  5. 主库更改配置文件中的server id=10,从库等于11
  6. 主库需要对从库进行授权,在主库中执行SQL语句:grant replication slave on *.* to "repl"@"%" identified by "123123";

 

  1. 主库执行flush logs;再确定二进制日志文件:show master stautus;

 

  1. 从库指向主库,在从库中执行SQL语句:change master to master_user='repl',master_password='123123',master_host='192.168.1.100',master_log_file='mysql-bin.000004',master_log_pos=154;

 

  1. 开启从库,在从库执行SQL语句:start slave;

 

  1. 查看从库状态:show slave status\G;

 

  1. 上图IO和SQ显示yes,则主从复制就成功了。
  2. 删除二进制日志,首先在从库停掉slave:stop slave;然后reset slave;就重置主从复制配置了。

 

  1. 一台从库运行了一个月,增加一台从库,如何操作?
  2. 在主库上锁表,只可以读:flush tables with read lock;
  3. 全量备份,在从库上导入;开始配置主从;
  4. 主库解锁: unlock tables;

多源复制

  1. Innodb MyISAM
  2. sync_binlog -->将binlog写入磁盘
  3. =1时  表示开启
  4. =0时  表示关闭,mysql不控制二进制日志写入磁盘,由操作系统控制
  5. =N  延迟binlog写入磁盘

MySQL多线程复制

  1. 保证从库并发应用relay log能力,2核32核的CPU 128G内存,硬盘HDD TPS(每秒事务处理能力:3万次)
  2. slave_paralel_type 指定并发复制的类型
  3. 首先开启主从复制,然后在从库上指定多少个工作线程:set global slave_parallel_workers=4;

 

  1. 从库设置类型,此步设置前请stop slave;然后执行:set global master_info_repository=“table”;
  2. 从库执行设置:set global relay_log_info_repository=“table”;

 

  1. 查看表结构:show creat 表名;如果搜索引擎不是InnoDB或MyISAM,可以修改:alter table slave_master_info engine="InnoDB/MyISAM ";
  2. 开启从库:start slave;

半同步复制

  1. 主库安装插件
  2. install plugin rpl_semi_sync_master soname "semisync_master.so";
  3. set global rpl_semi_sync_master_enabled=1;
  4. 从库安装插件
  5. install plugin rpl_semi_sync_slave soname "semisync_slave.so";
  6. set global rpl_semi_sync_slave_enabled=1;
  7. stop slave io_thread;
  8. start slave io_thread;
  9. show variables like "%semi_sync%"; 查看半同步复制的值
  10. show status like "rpl%"; 查看半同步复制的相关信息

基于GTID复制

  1. GTID=source_id:事务id
  2. show variables like "gtid_mode";  查看gtid状态
  3. set global gtid_mode=ON_PERMISSIVE;  
  4. select * from mysql.gtid_executed;
  5. show master status;
  6. gtid_executed  保存的是上一个binlog日志中GTID
  7. reset slave; 清除从库配置后,配置信息保存在内存中,使用show slave status;还可以查看到信息;
  8. reset slave all;
  9. 清除从库配置后,使用show slave status; 查不到信息;
  10. change master to master_user="repl",master_password="123123",master_host="192.168.2.10",master_auto_position=1;
  11. 不允许主从库临时开始gtid
  12. 在配置文件/etc/my.cnf中[mysqld]加入
  13. gtid_mode=ON
  14. enforce_gtid_consistency=ON
  15. GTID复制可以在主从恢复时,自动根据GTID进行恢复;
  16. 读写分离-->缓解主库IO压力,避免从库写数据
  17. 基于代码:
  18. 基于代理中间件:
  19. mysql-proxy -->Atlas
  20. mycat

MySQL数据库压测与性能

  1. MySQL数据库性能指标:
  2. 吞吐量:TPS/QPS
  3. 补充说明:磁盘 IOPS-->每秒IO请求数

磁盘吞吐量:每次IO操作产生的流量

show status like "%Questions%";

 

  1. QPS:mysqladmin -uroot -p123123 -h 127.0.0.1 -i 1 -r  extended|grep -i questions
  2. 响应时间:

1.例如现有一个订单业务,要求5秒内响应

2.当有50并发时TPM为2000事务95%

3.100并发时,TPM为3500,55%

  1. 并发性

同时500在线WEB 100并发请求,数据库DB 50并发请求

  1. 查看最大连接数,默认值为151:show variables like "%max_connection%";

    附件下载

  • MySQL.docx 1.06MB 下载次数:0
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。