主从复制的优化
背景:mysql当主从复制是异步进行的(主库在写入数据后不管数据是否成功同步到从库就直接把写入成功的结果返回给客户端了)。
所有从库和主库之间肯定会存在数据同步的时间差。如果减少这个同步的时间差就显得尤为重要。
当主库中执行一个操作的时候,特别是大的事物操作,只有当这个事物提交成功后,对主库的修改才会写入到主库的binlog文件中。然后,从库才可以从主库的binlog中去读取这些变动,然后把这些变动更新到从库的中继日志中。然后在从中继日志中更新到从库的数据库中。默认是只有一个线程来同步主库的数据。只有当一个特别大的事物同步完成后,才会处理下一个事物。
所以可以启用多线程的方式来复制主库中的binlog,这不至于只有第一个大事物完成后,才会开始下面的事物。增加并行度,减少数据差异的时间段。
停止现有的复制链路
登录到从数据库中执行如下停止复制链路的命令。
stop slave;
复制
配置多线程配置
这种多线程的配置是从mysql5.6才开始支持。但是5.6有些bug。目前的5.7是比较稳定的。
配置同步的方式
登录到从数据库中执行如下停止复制链路的命令
set global slave_parallel_type='logical_clock';
复制
也可以在/etc/my.conf文件中,配置这个参数。配置后,不至于重启后,配置失效。
配置同步的线程数目
登录到从数据库中执行如下停止复制链路的命令,具体启用几个可以根据自己的环境来决定。
set global slave_parallel_workers=6;
复制
也可以在/etc/my.conf文件中,配置这个参数。配置后,不至于重启后,配置失效。
启动复制链路
登录到从数据库中执行如下停止复制链路的命令。
start slave;
复制
验证结果
show processlist;
show variables like 'slave_parallel%';
复制
微信搜索“coder-home”或扫一扫下面的二维码, 关注公众号,第一时间了解更多干货分享,还有各类视频教程资源。