部署前必须满足的前提条件
修改 MySQL 配置文件my.cnf(Linux 默认路径/etc/my.cnf,Windows 为my.ini) 在[mysqld]段下添加 / 修改以下配置,永久生效,重启 MySQL 不丢失:
ini[mysqld]
# ========== 主从基础配置(已配置可跳过) ==========
server_id = 1 # 全局唯一,从库不能和这个重复
log_bin = mysql-bin
binlog_format = ROW # 生产强制ROW模式,半同步数据一致性最佳
binlog_do_db = 你的业务库名 # 要同步的库,不写默认同步所有库
binlog_ignore_db = mysql
binlog_ignore_db = information_schema
binlog_ignore_db = performance_schema
# ========== 半同步核心配置 ==========
# 加载半同步主库插件
plugin_load_add = semisync_master.so
# 开启半同步复制
rpl_semi_sync_master_enabled = 1
# 半同步超时时间:1000ms=1秒,超时自动降级为异步复制,不阻塞业务
rpl_semi_sync_master_timeout = 1000
# 至少等待1个从库ACK确认,才提交事务
rpl_semi_sync_master_wait_for_slave_count = 1
# 事务提交时机:after_sync(MySQL5.7+默认,最安全,主库宕机不丢数据)
rpl_semi_sync_master_wait_point = AFTER_SYNC
重启主库 MySQL 服务,使配置生效
jssystemctl restart mysqld
登录主库 MySQL,确认插件加载成功、半同步开启
sql-- 确认插件已激活
SHOW PLUGINS LIKE 'rpl_semi_sync_master';
-- 确认半同步参数已生效
SHOW VARIABLES LIKE 'rpl_semi_sync%';
修改 MySQL 配置文件my.cnf 在[mysqld]段下添加 / 修改以下配置,永久生效:
ini[mysqld]
# ========== 主从基础配置(已配置可跳过) ==========
server_id = 2 # 必须和主库、其他从库不一样,全局唯一
relay_log = mysql-relay-bin
read_only = 1 # 普通用户只读,超级用户除外,防止误写入
replicate_do_db = 你的业务库名 # 和主库保持一致
replicate_ignore_db = mysql
replicate_ignore_db = information_schema
replicate_ignore_db = performance_schema
# ========== 半同步核心配置 ==========
# 加载半同步从库插件
plugin_load_add = semisync_slave.so
# 开启从库半同步
rpl_semi_sync_slave_enabled = 1
重启从库 MySQL 服务,使配置生效
jssystemctl restart mysqld
登录从库 MySQL,确认插件加载成功,重启 IO 线程激活半同步
sql-- 确认插件已激活
SHOW PLUGINS LIKE 'rpl_semi_sync_slave';
-- 确认半同步参数已生效
SHOW VARIABLES LIKE 'rpl_semi_sync%';
-- 【关键步骤】重启从库IO线程,激活半同步复制
STOP SLAVE IO_THREAD;
START SLAVE IO_THREAD;
主库执行:确认半同步运行状态
sql-- 核心:Rpl_semi_sync_master_status 必须为 ON
SHOW STATUS LIKE 'Rpl_semi_sync_master_status';
-- 查看半同步ACK确认次数,有数值代表从库正常返回ACK,半同步正常工作
SHOW STATUS LIKE 'Rpl_semi_sync_master_yes_tx';
-- 查看超时降级为异步的事务数,正常应该为0或极少
SHOW STATUS LIKE 'Rpl_semi_sync_master_no_tx';
从库执行:确认从库半同步状态
sql-- 核心:Rpl_semi_sync_slave_status 必须为 ON
SHOW STATUS LIKE 'Rpl_semi_sync_slave_status';
最终业务验证
在主库写入一条测试数据,确认从库能正常同步,同时主库Rpl_semi_sync_master_yes_tx数值增加,代表半同步正常工作。
本文作者:松轩(^U^)
本文链接:
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!