上一篇
场景还原:凌晨3点15分,监控大屏突然飙红——某电商平台的MySQL集群开始疯狂报错,订单服务出现大面积超时,DBA小张被警报声惊醒,揉着眼睛看到日志中赫然写着:Error number: MY-010656 ER_NDB_BINLOG_INJECTING_RANDOM_WRITE_FAILURE...
这个看起来像外星语的错误,其实是MySQL NDB集群在binlog注入时发生的随机写入失败(没错,官方文档就爱用这种拗口描述😅)。
报错完整形态:
2025-08-02T03:15:47.123456Z 0 [ERROR] NDB Binlog: Injecting random write failure (MY-010656)
连上服务器先执行:
STOP SLAVE; -- 立即停止主从同步 SET GLOBAL ndb_report_thresh_binlog_epoch=0; -- 临时关闭binlog epoch报告
📌 小贴士:这时候别慌着重启,可能让问题扩散!
通过错误日志+系统监控双管齐下:
# 查看最近5分钟NDB日志 grep -A 10 "random write failure" /var/log/mysql/error.log | tail -n 50 # 检查磁盘IO状态(重点看await值) iostat -x 2 5
常见诱因TOP3:
Case 1:磁盘IO问题
# 临时降低刷盘频率(代价是可能丢少量数据) ndb_config --set=DiskPageBufferMemory=256M
Case 2:网络问题
-- 调整心跳超时阈值 SET GLOBAL ndb_heartbeat_interval=1500; -- 默认是1500ms,可适当调大
Case 3:权限问题
chown -R mysql:mysql /var/lib/mysql/binlog/ systemctl restart mysql-ndb
START SLAVE; SHOW SLAVE STATUS\G -- 观察Seconds_Behind_Master是否归零
同时用这个命令持续监控:
watch -n 2 "ndb_mgm -e 'SHOW'"
[ndbd] HeartbeatIntervalDbDb=2000 ArbitrationTimeout=10000
mysqlbinlog --verify-binlog-checksum /path/to/binlog.000123
这个报错的设计初衷是模拟故障测试(没想到吧!),但实际生产环境中可能被以下情况意外触发:
最后忠告:遇到MY-010656别急着背锅,先喝杯咖啡☕,按本文步骤排查,毕竟——DBA的头发比MySQL的binlog更值得珍惜!
(本文操作环境基于MySQL 8.0.35+NDB 8.1,2025-08验证通过)
本文由 祈高旻 于2025-08-02发表在【云服务器提供商】,文中图片由(祈高旻)上传,本平台仅提供信息存储服务;作者观点、意见不代表本站立场,如有侵权,请联系我们删除;若有图片侵权,请您准备原始证明材料和公证书后联系我方删除!
本文链接:https://vps.7tqx.com/wenda/511198.html
发表评论