上一篇
场景引入:
凌晨3点,你的手机突然狂震——监控报警!MySQL主从同步挂了,日志里赫然躺着:
[ERROR] [MY-011139] [Repl] Semi-sync reply binlog file is too large
(ER_SEMISYNC_REPLY_BINLOG_FILE_TOO_LARGE)
半同步复制卡住了,业务写操作开始堆积…别慌!这篇实战指南带你快速定位+修复!💪
MySQL半同步复制(Semisync Replication)要求从库实时确认收到binlog事件后,主库才能继续执行事务,当出现以下情况时,会触发这个报错:
大事务爆炸 💣
rpl_semi_sync_master_wait_for_slave_count
限制(默认1GB) 网络抽风延迟 🌐🐢
版本兼容性问题 🔄
-- 主库执行 SET GLOBAL rpl_semi_sync_master_enabled = OFF;
适用场景:业务高峰期优先保写可用性,后续再修复同步
副作用:数据一致性风险,需人工核对差异
-- 主库执行(单位:字节) SET GLOBAL rpl_semi_sync_master_wait_for_slave_count = 2147483648; -- 2GB
注意:需同时检查从库slave_parallel_workers
是否足够处理大事务
-- 从库执行(慎用!) STOP SLAVE; SET GLOBAL sql_slave_skip_counter = 1; START SLAVE;
风险提示:可能导致数据不一致,需后续人工补数据
-- 原语句(危险) INSERT INTO big_table SELECT * FROM huge_source; -- 改造为分批提交 INSERT INTO big_table SELECT * FROM huge_source LIMIT 10000 OFFSET 0; INSERT INTO big_table SELECT * FROM huge_source LIMIT 10000 OFFSET 10000; ...
# my.cnf 优化项 [mysqld] rpl_semi_sync_master_timeout = 30000 # 超时时间调为30秒 binlog_group_commit_sync_delay = 100 # 组提交微延迟提升吞吐 slave_parallel_workers = 8 # 从库并行线程数
主库监控:
SHOW STATUS LIKE 'Rpl_semi_sync%';
重点关注:
Rpl_semi_sync_master_yes_tx
(成功同步数) Rpl_semi_sync_master_no_tx
(降级为异步的次数) 从库监控:
SHOW SLAVE STATUS\G
检查Seconds_Behind_Master
和Slave_SQL_Running_State
当DBA不在现场时,可以这样收集信息:
一键收集诊断包
# 在主库执行 mysql -e "SHOW ENGINE INNODB STATUS\G" > debug.log mysql -e "SHOW MASTER STATUS\G" >> debug.log tail -n 500 /var/log/mysql/error.log >> debug.log
可视化分析工具推荐
pt-mysql-summary
生成配置报告 pt-query-digest
分析慢查询和大事务 版本 | 关键变化 |
---|---|
MySQL 5.7 | 默认超时10秒,无自动重试 |
MySQL 8.0 | 引入rpl_semi_sync_master_wait_for_slave_count 动态调整 |
MariaDB 10.3+ | 参数名变为rpl_semi_sync_source_ 前缀 |
最后叮嘱:遇到此错误时,先根据业务场景选择应急方案,事后一定要用pt-table-checksum
校验数据一致性!保持冷静,你完全能搞定它! 🎯💼
(本文基于2025年8月MySQL社区版最新文档整理)
本文由 史以蕊 于2025-08-05发表在【云服务器提供商】,文中图片由(史以蕊)上传,本平台仅提供信息存储服务;作者观点、意见不代表本站立场,如有侵权,请联系我们删除;若有图片侵权,请您准备原始证明材料和公证书后联系我方删除!
本文链接:https://up.7tqx.com/wenda/540048.html
发表评论