最新消息:根据2025年8月MySQL社区论坛反馈,ER_IB_MSG_DDL_LOG_DELETE_BY_ID_TMCT错误在8.0.36版本中出现频率有所上升,主要与InnoDB引擎的DDL日志清理机制相关,Oracle官方已将其列入下一个补丁版本的修复清单。
上周三凌晨2点15分,我的手机突然响起刺耳的告警声——生产环境MySQL数据库抛出了这个奇怪的错误:
Error number: MY-013395;
Symbol: ER_IB_MSG_DDL_LOG_DELETE_BY_ID_TMCT;
SQLSTATE: HY000
当时第一反应是:"这又是什么新花样?"毕竟MySQL的错误代码多如牛毛,但这个MY-013395确实第一次见。
经过快速检索(感谢同事之前整理的内部错误代码表),这个错误与InnoDB的DDL日志系统有关。
远程连接到服务器后,我先检查了基本状态:
SHOW ENGINE INNODB STATUS;
在输出的"TRANSACTIONS"部分发现了多个挂起的DDL操作,更令人担忧的是,这些操作已经持续了超过30分钟——明显不正常。
SET GLOBAL innodb_adaptive_hash_index=OFF;
关闭自适应哈希索引可以暂时减轻系统负担,这是我们的标准应急措施之一。
SELECT * FROM information_schema.innodb_trx WHERE TIME_TO_SEC(TIMEDIFF(NOW(), trx_started)) > 60 ORDER BY trx_started ASC;
果然发现几个"高龄"事务,其中一个是凌晨执行的ALTER TABLE操作。
先给这些事务一个体面的结束机会:
KILL [进程ID];
等了2分钟,部分事务确实结束了,但核心问题依然存在。
查看错误日志发现关键线索:
[Note] InnoDB: DDL log delete [id=2356, thread_id=43] timed out after 30001ms
这说明系统在清理DDL日志时遇到了阻塞,根据经验,可能有以下几种原因:
经过与团队远程协作分析,我们决定执行以下步骤:
SET GLOBAL innodb_fast_shutdown=0;
这会强制InnoDB在关闭时执行完全清理。
# 温和关闭 mysqladmin -uroot -p shutdown # 等待完全停止后 service mysql start
CHECK TABLE 疑似问题表;
果然发现一个用户表的索引有问题,这很可能是导致DDL日志清理超时的元凶。
REPAIR TABLE 问题表;
performance_schema.events_statements_history_long
中DDL语句的执行时间增加了监控innodb_ddl_log_crash_reset_debug
设为0(生产环境默认值)这次事故教会我们几个重要经验:
SHOW PROCESSLIST
和performance_schema
凌晨4点30分,系统终于恢复正常,喝掉已经凉透的咖啡,我在运维日志中写下:"MY-013395错误解决,根本原因:DDL操作与业务高峰重叠导致日志清理超时。"
数据库没有小问题,只有还没变成大问题的小问题,保持警惕,定期检查,才是运维之道。
本文由 昌琇晶 于2025-08-02发表在【云服务器提供商】,文中图片由(昌琇晶)上传,本平台仅提供信息存储服务;作者观点、意见不代表本站立场,如有侵权,请联系我们删除;若有图片侵权,请您准备原始证明材料和公证书后联系我方删除!
本文链接:https://vps.7tqx.com/wenda/518245.html
发表评论