十九、Mysql的半同步复制

一、什么是半同步复制

半同步复制(Semisynchronous replication) 介于异步复制和全同步复制之间,主库在执行完客户端提交的事务后不是立刻返回给客户端,而是等待至少一个从库接收到并写到relay log中才返回给客户端。相对于异步复制,半同步复制提高了数据的安全性,同时它也造成了一定程度的延迟,这个延迟最少是一个TCP/IP往返的时间。所以,半同步复制最好在低延时的网络中使用。

简单来说,半同步复制解决主从数据一致性问题。

二、半同步复制工作原理的变化

 

1. 主库执行新的事务,commit时,更新 show master  status\G ,触发一个信号给
2. binlog dump 接收到主库的 show master status\G信息,通知从库日志更新了
3. 从库IO线程请求新的二进制日志事件
4. 主库会通过dump线程传送新的日志事件,给从库IO线程
5. 从库IO线程接收到binlog日志,当日志写入到磁盘上的relaylog文件时,给主库ACK_receiver线程
6. ACK_receiver线程触发一个事件,告诉主库commit可以成功了
7. 如果ACK达到了我们预设值的超时时间,半同步复制会切换为原始的异步复制.

三、配置半同步复制

1、加载插件
主:
[(none)]>INSTALL PLUGIN rpl_semi_sync_master SONAME 'semisync_master.so';
从:
[(none)]>INSTALL PLUGIN rpl_semi_sync_slave SONAME 'semisync_slave.so';
2、查看是否加载成功:
[(none)]>show plugins;
3、启动:
主:
[(none)]>SET GLOBAL rpl_semi_sync_master_enabled = 1;
从:
[(none)]>SET GLOBAL rpl_semi_sync_slave_enabled = 1;
4、重启从库上的IO线程
[(none)]>STOP SLAVE IO_THREAD;
[(none)]>START SLAVE IO_THREAD;
5、查看是否在运行
主:
[(none)]>show status like 'Rpl_semi_sync_master_status';
从:
[(none)]>show status like 'Rpl_semi_sync_slave_status';

 

[(none)]> INSTALL PLUGIN rpl_semi_sync_master SONAME 'semisync_master.so';
ERROR 1126 (HY000): Can't open shared library
'/usr/local/mysql/lib/plugin/semisync_master.so'
(errno: 22 libimf.so: cannot open shared object file:
No such file or directory)

#如果尝试安装插件导致在Linux上显示类似于此处所示的错误,则必须安装 libimf:
#可以libimf从 https://dev.mysql.com/downloads/os-linux.html获得。

更改配置文件

主库配置

 
[mysqld]
rpl_semi_sync_master_enabled=1
rpl_semi_sync_master_timeout=1000 # 1 second

从库配置

[mysqld]
rpl_semi_sync_slave_enabled=1

 

posted @ 2020-12-03 22:30  yaowx  阅读(375)  评论(0编辑  收藏  举报