55. MySQL 的增强半同步复制

AI 概述
1. 增强半同步复制1.1 基本环境1.2 主库配置1.3 从库配置1.4 检查配置1.5 环境校验2. 切换同步模式3.小结 传统的异步复制有个很大的缺点,主从库的复制难免会存在一定的延迟,为了解决复制延迟问题,MySQL 引入了半同步复制。本小节主要介绍 MySQL 的增强半同步复制。 1. 增强半同步复制 增强半同步复...
目录
文章目录隐藏
  1. 1. 增强半同步复制
  2. 2. 切换同步模式
  3. 3.小结

传统的异步复制有个很大的缺点,主从库的复制难免会存在一定的延迟,为了解决复制延迟问题,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 主库配置

1. 修改配置

--安装半同步组件
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; #1 second
--修改 my.cnf 配置文件
[mysqld]
rpl_semi_sync_master_enabled = 1;
rpl_semi_sync_master_timeout = 1000; #超过 1s 转换成传统复制

gtid-mode = on
enforce-gtid-consistency = 1
binlog_format = row
server-id = 330601
log-bin = /mysql/log/mysql-bin
binlog_cache_size = 1M

2. 创建复制用账号

create user 'repl'@'192.168.0.2' identified by '123456';
grant replication slave on *.* to 'repl'@'192.168.0.2';

1.3 从库配置

1. 修改配置

--安装半同步组件
install plugin rpl_semi_sync_slave soname 'semisync_slave.so';
--动态修改
set global rpl_semi_sync_slave_enabled = 1;
--修改 my.cnf 配置文件
[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

2. 导出导入

--主库导出
mysqldump -uroot -p --single-transaction --master-data=2 --databases test123 > test_200908.sql

--从库导入
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 环境校验

1. 主库

--主库,创建表 t1 并插入数据
use test123;
create table t1(id int);
insert into t1 values(1);
select * from t1;

2. 从库

--从库,检查 t1 表是否存在
use test123;
select * from t1;

3. 监控增强半同步状态

--主要监控主库相关状态值
show global status like '%semi%';
--关注以下 status
Rpl_semi_sync_master_no_tx #传统方式复制,如果 Rpl_semi_sync_master_no_tx 的值较大,需关注
Rpl_semi_sync_master_yes_tx #半同步方式复制
Rpl_semi_sync_master_net_waits #网络等待时间

2. 切换同步模式

1. 增强半同步 -> 半同步

--主库
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%';

2. 半同步 -> 增强半同步

--主库
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. 异步 -> 增强半同步

请参考 2.2-2.3。

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; #超过 1s 转换成传统复制
set global rpl_semi_sync_slave_enabled = 1;

--修改 my.cnf 配置文件
[mysqld]
rpl_semi_sync_master_enabled = 1;
rpl_semi_sync_master_timeout = 1000; #超过 1s 转换成传统复制
rpl_semi_sync_slave_enabled = 1;

以上关于55. MySQL 的增强半同步复制的文章就介绍到这了,更多相关内容请搜索码云笔记以前的文章或继续浏览下面的相关文章,希望大家以后多多支持码云笔记。

「点点赞赏,手留余香」

0

给作者打赏,鼓励TA抓紧创作!

微信微信 支付宝支付宝

还没有人赞赏,快来当第一个赞赏的人吧!

声明:本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若内容造成侵权/违法违规/事实不符,请将相关资料发送至 admin@mybj123.com 进行投诉反馈,一经查实,立即处理!
重要:如软件存在付费、会员、充值等,均属软件开发者或所属公司行为,与本站无关,网友需自行判断
码云笔记 » 55. MySQL 的增强半同步复制

发表回复