MySQL 半同步复制(semi-sync-replication)
semi-sync-replication介绍
MySQL 5.5 开始引入半同步复制支持,5.5之前版本使用异步(asynchronous)复制;
半同步复制保证事务已经传递到至少一个备库(slave)上,避免在主(master)carsh丢失数据情况(最多只丢一个事务);
半同步复制并在主备网络通信故障时,主库在事务提交后等待超时(rpl_semi_sync_master_timeout
, 默认10s)后继续,同时主库复制状态切换为异步复制;
MySQL 5.7 开始引入无损复制,可以通过参数(rpl_semi_sync_master_wait_for_slave_count
)设置等待ack的slave数量,避免master宕机出现的数据不一致问题;
为了确保主从数据的一致性了,MySQL 5.7的半同步复制将等待Slave回复ACK的点提前到了二阶段提交的Sync阶段(等待slave写成功relay log响应ack),
只有确保至少一个Slave接收到事件后,才进入到Commit阶段。
通过参数rpl_semi_sync_master_wait_point
来配置等待ACK的点,默认是AFTER_SYNC
。AFTER_COMMIT
是旧模式。
AFTER_COMMIT
在主机事务提交后将日志传送到从机,AFTER_SYNC
是先传再提交。
semi-sync-replication配置
master安装插件
1
2
|
mysql> install plugin rpl_semi_sync_master soname 'semisync_master.so';
Query OK, 0 rows affected (0.20 sec)
|
查看状态
1
2
3
4
5
6
7
8
9
10
11
|
mysql> show variables like 'rpl_%';
+------------------------------------+-------+
| Variable_name | Value |
+------------------------------------+-------+
| rpl_recovery_rank | 0 |
| rpl_semi_sync_master_enabled | OFF |
| rpl_semi_sync_master_timeout | 10000 |
| rpl_semi_sync_master_trace_level | 32 |
| rpl_semi_sync_master_wait_no_slave | ON |
+------------------------------------+-------+
5 rows in set (0.00 sec)
|
开启半同步复制
1
2
|
mysql> set global rpl_semi_sync_master_enabled=on;
Query OK, 0 rows affected (0.02 sec)
|
设置半同步复制超时时间(milliseconds)
1
2
|
mysql> set global rep-semi-sync-master-timeout=10000;
Query OK, 0 rows affected (0.02 sec)
|
slave安装插件
1
2
|
mysql> install plugin rpl_semi_sync_slave soname 'semisync_slave.so';
Query OK, 0 rows affected (0.06 sec)
|
查看状态
1
2
3
4
5
6
7
8
|
mysql> show variables like 'rpl_semi%';
+---------------------------------+-------+
| Variable_name | Value |
+---------------------------------+-------+
| rpl_semi_sync_slave_enabled | OFF |
| rpl_semi_sync_slave_trace_level | 32 |
+---------------------------------+-------+
2 rows in set (0.00 sec)
|
开启半同步复制
1
2
|
mysql> set global rpl_semi_sync_slave_enabled=on;
Query OK, 0 rows affected (0.00 sec)
|
master是否在没有slave或者所有slave连接不通情况下等待slave
1
|
rpl-semi-sync-master-wait-no-slave=on/off
|
参考