MySQL Error number: MY-012348; Symbol: ER_IB_MSG_523; SQLSTATE: HY000 报错 故障修复 远程处理
文档解释
Error number: MY-012348; Symbol: ER_IB_MSG_523; SQLSTATE: HY000
Message: %s
错误说明:
MySQL的错误代码MY-012348和SQLSTATE HY000的Symbol ER_IB_MSG_523表示,InnoDB存储引擎无法发现表或索引的元数据,或者它已经损坏。此时,MySQL限制用户访问该表或索引。
常见案例
这个消息通常会发生在MySQL进程或服务器意外关闭、由Linux内核OOM Killer终止,或关闭dup_key_error_in_unqiue_indexes信号(如果InnoDB内存缓冲溢出,则可能会发生此类内存错误),另外,当你在同一个表上执行多个ALTER TABLE或CREATE INDEX并发命令时也可能会遇到此错误。
解决方法:
一旦遇到此错误,最好的解决方法是根据IB_LOGFILE日志文件进行检查。为此,你需要进入远程MySQL服务器,找到ib_logfile0和ib_logfile一,它们一般位于你指定的参数innodb_log_group_home_dir指定的目录中,如果没有指定,则位于/var/lib/mysql/data/iblogfiles文件夹下。
如果这两个文件存在,你可以使用innodb_recovery_stats的 –print_ddl_log 和 –scan_directories参数进行检查,不仅可以恢复成功,而且还可以备份这些添加、更改和删除的表和索引的注释,而不需要整个ib_logfile日志文件的恢复。
如果ib_logfile日志文件不可用,你可以考虑尝试使用mysql_upgrade命令检查表或索引是否损坏,如果损坏,可以尝试使用mysqldump备份/还原数据,或者尝试使用Percona Toolkit pt-table-checksum工具检查表状态,以确认损坏的原因。如果表和索引是正常的且没有损坏,那么你可以参考MySQL错误日志来检查是否由于某些服务器参数问题导致InnoDB无法发现表或索引的元数据,这些参数值有innodb_force_recovery、innodb_file_per_table等。