MySQL半同步复制

简介

默认情况下,MySQL复制是异步的。主库将事件写入二进制日志,但不知道从库是否处理它们。使用异步复制,如果主库崩溃,则它已提交的事务可能尚未传输到任何从库。因此,在这种情况下,从主库到从库的故障转移,可能导致丢失事务。
在半同步复制中,只有在将事件写入中继日志并刷新后,从库才会确认收到事务的事件。如果从库在经过一定时间之后未确认事务(可使用rpl_semi_sync_master_timeout变量进行配置),则会发生超时,并且主服务器将切换到异步复制。当至少有一个半同步从库赶上时,将恢复半同步复制。

原理图

在这里插入图片描述
图片是网上找的没看到出处

简单来说:主库在执行完客户端提交的事务后不是立刻返回给客户端,而是等待至少一个从库接收到并写到relay log中才返回给客户端

配置半同步复制

配置的前提是已经配置好普通的异步复制一主一从了。
这里需要用到2个插件完成,一个用于主库,一个用于从库

第一步:配置主库

mysql> INSTALL PLUGIN rpl_semi_sync_master SONAME 'semisync_master.so';   #安装插件
mysql> SET GLOBAL rpl_semi_sync_master_enabled=ON; #启用插件

查看状态

mysql> SHOW GLOBAL VARIABLES LIKE 'rpl_semi%';

在这里插入图片描述

第二步:配置从库

mysql> INSTALL PLUGIN rpl_semi_sync_slave SONAME 'semisync_slave.so'; #安装插件
mysql> SET GLOBAL rpl_semi_sync_slave_enabled=ON; #启用插件

查看状态

SHOW GLOBAL VARIABLES LIKE 'rpl_semi_sync_sl%';

在这里插入图片描述

从库重启I/O线程

mysql> STOP SLAVE IO_THREAD;
mysql> START SLAVE IO_THREAD;

第三步:测试

查看是否搭建成功可以查看系统变量

mysql> SHOW STATUS LIKE 'rpl%';
mysql> SHOW STATUS LIKE 'rpl%';
+--------------------------------------------+-------+
| Variable_name                              | Value |
+--------------------------------------------+-------+
| Rpl_semi_sync_master_clients               | 1     | #表示半同步连接的从库数量
| Rpl_semi_sync_master_net_avg_wait_time     | 0     |#主库等待从库回复的平均时间
| Rpl_semi_sync_master_net_wait_time         | 0     |#主库等等从库回复的总时间
| Rpl_semi_sync_master_net_waits             | 0     |#主库等待从库回复的总次数
| Rpl_semi_sync_master_no_times              | 0     |#主库关闭半同步复制次数
| Rpl_semi_sync_master_no_tx                 | 0     |#从库未成功确认的提交次数
| Rpl_semi_sync_master_status                | ON    |半同步复制当前是否在主库运行,ON表示运行
| Rpl_semi_sync_master_timefunc_failures     | 0     |#调用时间函数时主库失败次数
| Rpl_semi_sync_master_tx_avg_wait_time      | 0     |#主库等待每个事务的平均时间
| Rpl_semi_sync_master_tx_wait_time          | 0     |#主库等待事务的总时间
| Rpl_semi_sync_master_tx_waits              | 0     |#主库等待事务的总次数
| Rpl_semi_sync_master_wait_pos_backtraverse | 0     |#主服务器等待二进制坐标低于先前事件等待的事件的总次数。如果事务开始等待回复的顺序与其二进制日志事件的写入顺序不同,则会发生。
| Rpl_semi_sync_master_wait_sessions         | 0     |当前正在等待从库回复的会话数
| Rpl_semi_sync_master_yes_tx                | 0     |从服务器已成功确认的提交数
+--------------------------------------------+-------+
14 rows in set (0.00 sec)

相关的变量更详细的信息可以看一下MySQL官方文档,或者MariaDB官方文档
https://mariadb.com/kb/en/library/semisynchronous-replication/#setup
https://dev.mysql.com/doc/refman/5.7/en/replication-semisync-monitoring.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值