MySQL报错MY-010663,涉及NDB日志事务ID问题,远程帮忙修复故障中
- 问答
- 2026-01-01 01:57:59
- 1
开始)
我正在远程连接客户的服务器,处理一个非常棘手的MySQL集群问题,客户那边已经急得团团转了,因为他们的一套重要业务系统完全卡住,无法处理任何数据,我登录到管理节点上,第一件事就是打开MySQL的错误日志文件,满屏的红字错误信息中,有一个错误代码反复出现,非常显眼,那就是“MY-010663”,这个错误代码对我来说是一个明确的信号,意味着我们遇到的是MySQL NDB集群特有的问题,而且通常与事务日志相关,不是什么简单的连接超时或者权限问题。
根据MySQL官方文档对错误MY-010663的描述,这个错误的核心意思是:在NDB集群的数据节点之间进行数据同步时,出现了一个关于日志事务ID的严重问题,NDB集群为了保持多个数据节点上数据的一致性,采用了复杂的日志机制,每一个对数据的修改操作都会被分配一个唯一的事务ID,并记录在日志中,各个数据节点需要严格按照这个事务ID的顺序来应用更改,确保大家看到的数据库状态是完全一样的,而MY-010663这个报错,就像是两个节点在核对“工作笔记”(也就是日志)时,发现笔记的编号对不上了,或者某个编号的笔记根本找不到,这导致其中一个数据节点无法继续同步数据,为了保护数据不出错,它可能会把自己停掉,进而导致整个集群服务降级甚至中断。
客户在电话里描述的现象是,应用程序突然报错,无法写入数据库,查询也变得非常缓慢,最后彻底无响应,这完全符合一个NDB数据节点失效后的典型症状,现在我的任务是快速定位问题根源并恢复服务。
我需要确定是哪个数据节点出了问题,通过连接到集群的管理客户端,使用SHOW命令查看集群状态,果然,输出结果显示,两个数据节点中有一个显示为“not connected”(未连接)或“starting”(启动中)但一直无法成功加入集群,这证实了确实有节点掉线了。

我需要深入调查这个掉线节点的日志,我让客户帮忙找到了对应数据节点服务器上的ndb_*_out.log文件(这是数据节点自己的控制台输出日志),打开这个日志文件,里面的信息更加具体,我看到了类似“Gap detected in transaction id”或者“Unable to find transaction id X”这样的详细错误信息,这直接指向了MY-010663错误的根本原因——日志间隙,也就是说,在线的那个数据节点拥有的日志序列中,事务ID已经走到了1000,而掉线的这个节点在尝试恢复时,发现自己最后的记录只到900,然后它需要从其他节点获取901到1000之间的日志记录,但不知为何,它无法获取到这段连续的日志,因此卡住了。
根据MySQL官方知识库和故障处理指南,导致这种日志间隙的原因可能有几种,最常见的是磁盘空间不足,导致日志文件无法正常写入或轮转,我立刻检查了所有数据节点的磁盘空间,特别是存放数据和日志的文件系统,发现空间是充足的,排除了这个可能性,另一种可能是网络闪断,在某一瞬间,节点间的网络连接不稳定,导致日志复制数据包丢失,由于是远程操作,我很难直接排查历史网络问题,但客户确认近期没有网络调整。
排除了简单原因后,问题可能变得更复杂一些,比如可能是软件bug或者某些元数据损坏,这时,常规的重启节点往往无法解决问题,因为节点重启后依然会尝试从其他节点同步数据,还是会卡在同一个地方。

根据经验,我需要采取更进一步的恢复措施,我决定尝试让集群“忘记”那段有问题的日志间隙,从一个新的起点开始同步,这听起来有点冒险,但这是处理这类问题的标准方法之一,具体操作是,在管理客户端中,先确保剩下的那个在线数据节点是健康的,然后对故障节点执行一个初始重启,这个初始重启命令会告诉集群:“这个节点需要从零开始,完全重新同步所有数据,不要试图去追赶旧的日志了。”
我谨慎地向客户解释了这一步的风险和影响:在执行初始重启期间,集群的冗余性会暂时降低(因为只有一个数据节点在支撑),并且网络带宽会被大量用于全量数据同步,可能会影响应用程序的性能,但这是让集群快速恢复完整服务的唯一途径,在得到客户的同意后,我执行了命令。
命令发出后,我紧盯着管理客户端的集群状态输出,看到那个故障节点的状态从“starting”变成了“node recovery started”,然后进度百分比开始缓慢增长,这是一个好迹象,说明集群已经接受了指令,正在将在线节点上的完整数据副本拷贝到故障节点上,这个过程持续了将近一个小时,期间应用程序可以正常访问(尽管速度稍慢),因为还有一个节点在提供服务。
当数据同步进度达到100%后,故障节点的状态终于变成了“started”,我立刻让测试人员尝试进行一些数据写入和查询操作,一切正常!再次检查MySQL的错误日志,那些烦人的MY-010663错误信息不再出现。
我叮嘱客户,虽然问题暂时解决了,但根本原因还需要后续排查,比如检查是否存在硬件隐患、是否需要升级MySQL NDB的版本以修复潜在的软件缺陷等,这次远程支援总算是有惊无险,核心在于准确解读了MY-010663这个错误代码的含义,并依据官方文档的指导,一步步找到了正确的恢复路径。 结束)
本文由酒紫萱于2026-01-01发表在笙亿网络策划,如有疑问,请联系我们。
本文链接:http://waw.haoid.cn/wenda/72179.html
