MySQL 的增强半同步复制
传统的异步复制有个很大的缺点,主从库的复制难免会存在一定的延迟,为了解决复制延迟问题,MySQL 引入了半同步复制。本小节主要介绍 MySQL 的增强半同步复制。
1. 增强半同步复制
增强半同步复制,号称无损半同步复制,从库丢失数据的概率非常小。下面从实战的角度一步步搭建增强半同步复制环境。
1.1 基本环境
|
Master |
Slave |
MySQL版本 |
MySQL-5.7.31-x86_64 |
MySQL-5.7.31-x86_64 |
IP |
192.168.0.1 |
192.168.0.2 |
port |
3306 |
3306 |
1.2 主库配置
install plugin rpl_semi_sync_master soname 'semisync_master.so';
set global rpl_semi_sync_master_enabled = 1;
set global rpl_semi_sync_master_timeout = 1000;
[mysqld]
rpl_semi_sync_master_enabled = 1;
rpl_semi_sync_master_timeout = 1000;
gtid-mode = on
enforce-gtid-consistency = 1
binlog_format = row
server-id = 330601
log-bin = /mysql/log/mysql-bin
binlog_cache_size = 1M
create user 'repl'@'192.168.0.2' identified by '123456'; grant replication slave on *.* to 'repl'@'192.168.0.2';
1.3 从库配置
install plugin rpl_semi_sync_slave soname 'semisync_slave.so';
set global rpl_semi_sync_slave_enabled = 1;
[mysqld]
rpl_semi_sync_slave_enabled = 1;
gtid-mode = on
enforce-gtid-consistency = 1
binlog_format = row
server-id = 330602
log-bin = /mysql/log/mysql-bin
binlog_cache_size = 1M
skip_slave_start = 1
mysqldump -uroot -p
mysql -uroot -p < test_200908.sql
change master to master_host='192.168.0.1', master_port=3306, master_user='repl', master_password='123456', master_auto_position=1;
start slave;
show slave status\G;
1.4 检查配置
show plugins;
+
| Name | Status | Type | Library | License |
+
| rpl_semi_sync_master | ACTIVE | REPLICATION | semisync_master.so | GPL |
| rpl_semi_sync_slave | ACTIVE | REPLICATION | semisync_slave.so | GPL |
+
show global variables like '%semi%';
+
| Variable_name | Value |
+
| rpl_semi_sync_master_enabled | ON |
| rpl_semi_sync_slave_enabled | ON |
| rpl_semi_sync_master_timeout | 1000 |
| rpl_semi_sync_master_wait_point | AFTER_SYNC |
+
1.5 环境校验
use test123;
create table t1(id int);
insert into t1 values(1);
select * from t1;
use test123;
select * from t1;
show global status like '%semi%';
Rpl_semi_sync_master_no_tx
Rpl_semi_sync_master_yes_tx
Rpl_semi_sync_master_net_waits
2. 切换同步模式
set global rpl_semi_sync_master_wait_point= 'AFTER_COMMIT'
show global variables like '%semi%';
set global rpl_semi_sync_master_wait_point= 'AFTER_COMMIT'
show global variables like '%semi%';
set global rpl_semi_sync_master_wait_point= 'AFTER_SYNC'
show global variables like '%semi%';
set global rpl_semi_sync_master_wait_point= 'AFTER_SYNC'
show global variables like '%semi%';
3.小结
本小节主要从实战角度,介绍了 MySQL 增强半同步复制的搭建方式,与异步复制的搭建方式相比,多了一些参数的调整。
一般来说,为了运维的简单,主库和从库的参数配置建议保持一致。
install plugin rpl_semi_sync_master soname 'semisync_master.so';
install plugin rpl_semi_sync_slave soname 'semisync_slave.so';
set global rpl_semi_sync_master_enabled = 1;
set global rpl_semi_sync_master_timeout = 1000;
set global rpl_semi_sync_slave_enabled = 1;
[mysqld]
rpl_semi_sync_master_enabled = 1;
rpl_semi_sync_master_timeout = 1000;
rpl_semi_sync_slave_enabled = 1;