mysql半同步配置

半同步复制,即semi-sync复制,指的就是主库写入binlog日志之后,就会将强制此时立即将数据同步到从库,从库将日志写入自己本地的relay log之后,接着会返回一个ack给主库,主库接收到至少一个从库的ack之后才会认为写操作完成了。
半同步复制提高了数据的一致性和安全性(并不绝对保证一致性,当延时超过设置的超时时间,半同步会自动转为异步执行),但同时它也造成了一定程度的延迟,这个延迟最少是一个TCP/IP往返的时间。

在配置半同步前,必须先完成数据库好主从配置,具体配置方法参见这里
mysql半同步配置方式
1、在主库安装semisync_master插件:

mysql> INSTALL PLUGIN rpl_semi_sync_master SONAME 'semisync_master.so'; -- linux
mysql> INSTALL PLUGIN rpl_semi_sync_master SONAME 'semisync_master.dll'; -- windows

2、在备库安装semisync_slave插件

mysql> INSTALL PLUGIN rpl_semi_sync_slave SONAME 'semisync_slave.so'; -- linux
mysql> INSTALL PLUGIN rpl_semi_sync_slave SONAME 'semisync_slave.dll'; -- windows

3、windows下修改my.ini文件,linux下修改my.cconf文件
主库新增参数:

rpl_semi_sync_master_enabled=1		#开启半同步复制	

#控制master等待semi-slave ack报文的时间,单位是毫秒,默认是10000,如果master等待超时,则切换为普通的异步复制
rpl_semi_sync_master_timeout=1000	

#rpl_semi_sync_master_wait_no_slave为OFF时,只要master发现Rpl_semi_sync_master_clients小于rpl_semi_sync_master_wait_for_slave_count
#rpl_semi_sync_master_wait_no_slave为ON时,空闲时间(无事务提交)里,即使master发现Rpl_semi_sync_master_clients小于rpl_semi_sync_master_wait_for_slave_count,也不会做任何调整。只要保证在事务超时之前,master收到大于等于rpl_semi_sync_master_wait_for_slave_count值的ACK应答数量,master就一直保持在半同步模式
rpl_semi_sync_master_wait_no_slave=off   

#master提交后所需的应答数量
rpl_semi_sync_master_wait_for_slave_count = 1     

从库新增参数:

rpl_semi_sync_slave_enabled=1  -- 开启从库半同步设置

参数设置完成后,需要重启数据库服务器

备注:从库在所有设置都完成并重复数据库服务器后,需要登录从库,重新启动slave,即:stop slave; start slave;

参数也可以在mysql服务器启动后动态设置
主库配置参数动态设置:

mysql>SET GLOBAL rpl_semi_sync_master_timeout=1000;   -- 单位:ms

mysql>SET GLOBAL rpl_semi_sync_master_wait_no_slave=‘on’;  

这两个变量可以动态设置,但如果不写在my.cnf中,数据库重启参数就恢复默认值了

4、验证半同步配置是否成功
检测主库是否开启半异步同步方式:

mysql>show variables like '%rpl_semi_sync_master_enabled%';  -- 为on表示已经开启

检测从库是否开启半同步方式:

mysql>show variables like '%rpl_semi_sync_slave_enabled%';    -- 为on表示已经开启	

查询全局配置参数命令:

mysql>show variables like '%rpl_semi%';

查询运行时,半同步是否配置成功且正常运行命令: show status like ‘%rpl_semi%’
当为主库:Rpl_semi_sync_master_status 的值必须为on,才表示主库半异步设置成功
当为从库:Rpl_semi_sync_slave_status 的值必须为on,才表示从库半异步设置成功
如果Rpl_semi_sync_master_status 和Rpl_semi_sync_slave_status都为on,则证明mysql半同步配置成功

半同步参数所对应的含义如下所示:

mysql> show status like '%rpl_semi%';

Rpl_semi_sync_master_clients 1 | #有多少个Semi-sync的备库
Rpl_semi_sync_master_net_avg_wait_time 65139| #事务提交后,等待备库响应的平均时间
Rpl_semi_sync_master_net_wait_time 195419 | #等待网络响应的总次数
Rpl_semi_sync_master_net_waits 3 | #总的网络等待时间
Rpl_semi_sync_master_no_times 1 | #一共有几次从Semi-sync跌回普通状态
Rpl_semi_sync_master_no_tx 1 | #备库未及时响应的事务数
Rpl_semi_sync_master_status ON | #主库上Semi-sync是否正常开启
Rpl_semi_sync_master_timefunc_failures 0 | #时间函数未正常工作的次数
Rpl_semi_sync_master_tx_avg_wait_time 995 | #开启Semi-sync,事务返回需要等待的平均时间
Rpl_semi_sync_master_tx_wait_time 1991 | #事务等待备库响应的总时间
Rpl_semi_sync_master_tx_waits 2 | #事务等待备库响应的总次数
Rpl_semi_sync_master_wait_pos_backtraverse 0 | #改变当前等待最小二进制日志的次数
Rpl_semi_sync_master_wait_sessions 0 | #当前有几个线程在等备库响应
Rpl_semi_sync_master_yes_tx 2 | #Semi-sync模式下,成功的事务数

猜你喜欢

转载自blog.csdn.net/teamo_m/article/details/105786904
今日推荐