当前位置:首页 > 问答 > 正文

MySQL报错MY-011163,半同步复制确认槽出问题了,远程帮忙修复方案分享

MySQL报错MY-011163,这个错误信息通常伴随着类似“semi-sync replica is not in a correct state”或“Failed to enable semi-sync on the master”这样的描述,就是MySQL的主从复制中,半同步功能出了问题,半同步复制的意思是,当主库执行完一个事务后,它不会立即返回给客户端成功,而是至少要等待一个从库接收到这个事务的日志并写入到它自己的中继日志中之后,主库才会告诉客户端“搞定了”,MY-011163这个错误就是说,这个“等待确认”的环节卡壳了。

这个错误的发生,往往不是单一原因造成的,需要一步步排查,根据MySQL官方手册关于复制的章节以及Percona数据库博客中关于故障排查的文章,修复过程可以遵循从简到繁的原则。

MySQL报错MY-011163,半同步复制确认槽出问题了,远程帮忙修复方案分享

最应该检查的是网络连接,半同步复制严重依赖主库和从库之间稳定、低延迟的网络,可以用简单的ping命令测试一下主库到从库的网络是否通畅,延迟是否在正常范围内,如果网络有丢包或者延迟突然变得很高,就可能导致主库在等待确认时超时,这时候,半同步复制可能会降级为普通的异步复制,并记录下这类错误,解决网络问题本身,比如联系网络运维人员检查交换机、路由器或者专线状态,是治本的方法。

如果网络没问题,下一步就是检查从库的状态,根据多位数据库管理员在社区论坛(如Stack Overflow、MySQL官方论坛)分享的经验,很多情况下问题出在从库的复制线程上,你需要连接到从库,执行命令“SHOW SLAVE STATUS\G”来查看详细状态,要重点关注两个线程:“Slave_IO_Running”和“Slave_SQL_Running”,这两个值必须都是“Yes”才算正常,如果其中任何一个线程停止了,半同步复制自然无法正常工作,线程停止的原因可能有很多,比如在从库上误操作写了数据导致主键冲突,或者从库重启后忘记启动复制线程,如果线程停止了,查看“Last_IO_Error”或“Last_SQL_Error”字段,里面通常会给出具体的错误原因,根据错误信息解决掉问题后,使用“START SLAVE;”命令重新启动复制线程,主库的半同步错误可能就随之消失了。

MySQL报错MY-011163,半同步复制确认槽出问题了,远程帮忙修复方案分享

要检查半同步复制的相关变量设置是否正确,需要在主库和从库上分别确认,在主库上,执行“SHOW VARIABLES LIKE ‘rpl_semi_sync_master%’;”,确保“rpl_semi_sync_master_enabled”是ON状态,在从库上,执行“SHOW VARIABLES LIKE ‘rpl_semi_sync_slave%’;”,确保“rpl_semi_sync_slave_enabled”是ON,配置文件的修改可能没有生效,或者动态设置后因为重启而丢失,如果发现没开启,需要手动将其开启,在从库上开启半同步支持后,通常需要重启从库的IO线程才能生效,可以使用“STOP SLAVE IO_THREAD;” followed by “START SLAVE IO_THREAD;”来完成。

另一个常见的疑点是半同步超时时间,主库有一个重要的参数叫“rpl_semi_sync_master_timeout”,单位是毫秒,它定义了主库等待从库确认的超时时间,如果超过这个时间从库还没回应,主库就会放弃等待,降级为异步复制并记录错误,默认值可能是10秒,如果网络偶尔有波动或者从库负载较高,可能会导致确认时间变长而触发超时,你可以尝试临时将这个值设置得大一些,比如30000(30秒),观察是否还有错误发生,但这只是一个临时缓解措施,根本原因还是需要找到为什么确认会这么慢。

如果以上步骤都检查过了,问题依然存在,那可能就需要查看更底层的日志了,主库的错误日志(通常就是报MY-011163的那个日志文件)会包含更详细的信息,开启MySQL的通用查询日志或慢查询日志,观察在报错的时间点,主库和从库都在执行什么操作,也许是因为某个特别大的事务,或者从库上正在执行一个备份任务,导致复制延迟过高,从而触发了半同步超时。

根据MariaDB知识库中一些较深入的讨论,在极少数情况下,可能是半同步复制本身存在一些bug,尤其是在某些特定版本的MySQL中,你可以查询MySQL的官方bug数据库或者社区讨论,看看你使用的版本是否有已知的半同步复制相关问题,如果确认是版本bug,最彻底的解决方案就是规划升级到已知的稳定版本。

修复MY-011163错误需要一个系统的排查过程:先确保网络畅通,再检查从库复制线程是否正常运转,然后核对主从库的半同步配置参数是否正确启用,接着考虑调整超时时间等参数,最后通过分析更详细的日志或考虑软件版本来定位更深层次的问题,这个过程需要耐心,一步步排除,往往最常见的原因就是网络抖动或从库复制线程中断。

MySQL报错MY-011163,半同步复制确认槽出问题了,远程帮忙修复方案分享