1220 database data_error ai_generated true

ERROR 1220 (HY000): Error when executing command 'PURGE BINARY LOGS': Could not find target log file mentioned in the file index.

ID: database/mysql-binlog-purge-fail

Also available as: JSON · Markdown · 中文
82%Fix Rate
83%Confidence
1Evidence
2023-09-22First Seen

Version Compatibility

VersionStatusIntroducedDeprecatedNotes
MySQL 5.7.42 active
MySQL 8.0.33 active
MySQL 8.0.35 active

Root Cause

MySQL 尝试清除二进制日志时,指定的日志文件不在 binlog 索引文件中,通常是因为索引文件损坏、手动删除了日志文件或日志文件路径不匹配。

generic

中文

MySQL 尝试清除二进制日志时,指定的日志文件不在 binlog 索引文件中,通常是因为索引文件损坏、手动删除了日志文件或日志文件路径不匹配。

Official Documentation

https://dev.mysql.com/doc/refman/8.0/en/purge-binary-logs.html

Workarounds

  1. 82% success 使用 RESET MASTER 命令重置所有二进制日志(注意:会清除所有 binlog,影响复制):RESET MASTER;
    使用 RESET MASTER 命令重置所有二进制日志(注意:会清除所有 binlog,影响复制):RESET MASTER;
  2. 70% success 修复 binlog 索引文件:确保索引文件中的路径与实际日志文件匹配,然后使用 PURGE BINARY LOGS TO 'mysql-bin.000010' 清除指定文件之前的日志。
    修复 binlog 索引文件:确保索引文件中的路径与实际日志文件匹配,然后使用 PURGE BINARY LOGS TO 'mysql-bin.000010' 清除指定文件之前的日志。

中文步骤

  1. 使用 RESET MASTER 命令重置所有二进制日志(注意:会清除所有 binlog,影响复制):RESET MASTER;
  2. 修复 binlog 索引文件:确保索引文件中的路径与实际日志文件匹配,然后使用 PURGE BINARY LOGS TO 'mysql-bin.000010' 清除指定文件之前的日志。

Dead Ends

Common approaches that don't work:

  1. 70% fail

    手动编辑 binlog 索引文件,但格式错误或遗漏条目,导致 MySQL 无法正确解析。

  2. 80% fail

    直接删除 binlog 文件而不更新索引,导致 MySQL 在启动时出错。