执行 SHOW ENGINE INNODB STATUS\G 时,死锁信息过长导致后续内容丢失。根因是 MySQL 交互式客户端硬编码 64KB 输出上限(Bug #19825)。
修改 my.cnf [mysqld] 节:
innodb_status_file = 1
重启 MySQL 后,每次执行 SHOW ENGINE INNODB STATUS 会在数据目录生成 innodb_status. 文件,包含完整输出,无长度限制。
CREATE TABLE innodb_monitor (id INT) ENGINE=INNODB;
创建后,InnoDB 会周期性(约每 15 秒)将完整监控信息写入 .err 错误日志。不再需要时 DROP TABLE innodb_monitor; 即可停止。
| 维度 | innodb_status_file | innodb_monitor |
|---|---|---|
| 输出触发 | 手动执行 SHOW | 自动周期性 |
| 查看方式 | 读取数据目录文件 | 读取 error log |
| 持久化 | 单次快照 | 持续流 |
| 推荐场景 | 死锁现场排查 | 长期性能基线采集 |
生产环境建议常驻 innodb_monitor 表,配合日志采集系统(ELK/Filebeat)集中分析。