当有数据时添加slave2
#从master节点备份数据
mysqldump -uroot -ptiminglee 1 > timinglee.sql
生产环境中备份时需要锁表,保证备份前后的数据一致
mysql> FLUSH TABLES WITH READ LOCK;
备份后再解锁
mysql> UNLOCK TABLES;
mysqldump命令备份的数据文件,在还原时先DROP TABLE,需要合并数据时需要删除此语句
#利用master节点中备份出来的lee.sql在slave2中拉平数据
mysql -uroot -p1 -e "create database lee;"
mysql -uroot -p 1 <timinglee.sql
mysql -uroot -plee -e "select * from lee.userlist;"
#配置slave2的slave功能
#在master中查询日志pos
mysql -uroot -p1
CHANGE MASTER TO MASTER_HOST='172.25.254.10', MASTER_USER='repl',
MASTER_PASSWORD='lee', MASTER_LOG_FILE='mysql-bin.000001', MASTER_LOG_POS=1251;
start slave;
查看配置成功了没
SHOW SLAVE STATUS\G;
最后在master中添加数据看下slave2中数据能不能拉平
MySQL的延迟复制
延迟复制时用来控制sql线程的,和i/o线程无关
这个延迟复制不是i/o线程过段时间来复制,i/o是正常工作的
是日志已经保存在slave端了,那个sql要等多久进行回放
当master端误操作,可以在slave端进行数据备份
#在slave端配置
STOP SLAVE SQL_THREAD;CHANGE MASTER TO MASTER_DELAY=60;START SLAVE SQL_THREAD;
查看延迟复制配置成功了没
SHOW SLAVE STATUS\G;
测试:在master中写入数据过了延迟时间才能被查询到。
MySQL的慢查询日志
慢查询,顾名思义,执行很慢的查询
当执行SQL超过long_query_time参数设定的时间阈值(默认10s)时,就被认为是慢查询,这个
SQL语句就是需要优化的
慢查询被记录在慢查询日志里
慢查询日志默认是不开启的
如果需要优化SQL语句,就可以开启这个功能,它可以让你很容易地知道哪些语句是需要优化的。
默认不开启
开启慢查询日志
SET GLOBAL slow_query_log=ON;
SET long_query_time=4;#慢查询判定时间
MySQL的并行复制
默认情况下slave中使用的是sql单线程回放
在master中时多用户读写,如果使用sql单线程回放那么会造成组从延迟严重
开启MySQL的多线程回放可以解决上述问题
在slaves中设定
slave-parallel-type=LOGICAL_CLOCK#基于组提交,
slave-parallel-workers=16#开启线程数量
master_info_repository=TABLE#master信息在表中记录,默认记录
relay_log_recovery=ON#日志回放恢复功能开启
MySQL 组提交(Group commit)是一个性能优化特性,它允许在一个事务日志同步操作中将多个
事务的日志记录一起写入。这样做可以减少磁盘I/O的次数,从而提高数据库的整体性能。