如需转载请注明出处https://my.oschina.net/feistel/blog/2995878
目的:对于异步方式当主库提交完事务时发生宕机,没有将数据发送给从库,导致数据不匹配的问题。
半同步方式流程:从库接收到binlog后写入自己的relay log中再通知主库,此时主库才提交事务并返回给客户端。
我丑 话说在前头:
192.168.1.116 主masterA Windows MySQL8.0
192.168.1.200 备库B,VMUbuntu18 MySQL8.0
shell代表Ubuntu终端
cmd代表Windows终端
----------------------------------------------------------------------------------------------------------------
1
先无压力操作:MySQL主从复制——异步方式
----------------------------------------------------------------------------------------------------------------
2
安装插件:
动态链接库的区别:
windows插件后缀名用dll;
Ubuntu的用so
A mysql>
install plugin rpl_semi_sync_master soname 'semisync_master.dll';
set global rpl_semi_sync_master_enabled=on;
#可以写入配置文件my.ini(windows)
#rpl_semi_sync_master_enabled=on
show variables like '%semi%';
show plugins;
B mysql>
install plugin rpl_semi_sync_slave soname 'semisync_slave.so';
set global rpl_semi_sync_slave_enabled=on;
#可以写入配置文件mysqld.cnf(Ubuntu)
#rpl_semi_sync_master_enabled=on
show variables like '%semi%';
show plugins;
----------------------------------------------------------------------------------------------------------------
3
重启从库B的IO线程
B mysql>
stop slave io_thread;
start slave io_thread;
A mysql>
show global status like '%semi%';
看到
+--------------------------------------------+-------+
| Variable_name | Value |
+--------------------------------------------+-------+
| Rpl_semi_sync_master_clients | 1 |1个连接
| Rpl_semi_sync_master_status | ON |开启半同步状态
| Rpl_semi_sync_master_yes_tx | 1 |表示接收到事务回复的次数
+--------------------------------------------+-------+
表示成功
----------------------------------------------------------------------------------------------------------------
4
半同步 转 异步:
B mysql>stop slave io_thread;
关闭从库后,主库超时rpl_semi_sync_master_timeout,自动转为异步方式。
A mysql>show variables like 'rpl_semi_sync_master_timeout';
+------------------------------+-------+
| Variable_name | Value |
+------------------------------+-------+
| rpl_semi_sync_master_timeout | 10000 |
+------------------------------+-------+
默认为10s。
需要保证主从一致,可以把该参数设置得很大:
A mysql>set global rpl_semi_sync_master_timeout=100000;
设置为100s。也可以写入配置文件持久修改。
异步 转 半同步:
B mysql>
start slave io_thread;
----------------------------------------------------------------------------------------------------------------
至此,共勉,如需转载请注明出处https://my.oschina.net/feistel/blog/2995878