首页 > 数据库技术 > 详细

十九、Mysql的半同步复制

时间:2020-12-04 09:02:26      阅读:36      评论:0      收藏:0      [点我收藏+]

一、什么是半同步复制

半同步复制(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): Cant 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

 

十九、Mysql的半同步复制

原文:https://www.cnblogs.com/yaokaka/p/14083360.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!