MySQL 拒绝启动,我只能使用 以只读模式启动innodb_force_recovery = 6
。我在这个主题上找到的每个答案都建议进行备份,删除 ibdata 和 ib_logfiles,然后重新创建它们:
- https://serverfault.com/questions/592793/mysql-crashed-and-wont-start-up
- InnoDB 损坏时 innodb_force_recovery
- https://stackoverflow.com/questions/41997197/mysql-data-recovery-with-innodb
就我而言,由于 innodb-file-per-table 已启用,我想知道是否还需要删除文件,此外/var/lib/mysql/MY_DATABASE/table.ibd?
,由于重做日志记录已禁用,因此没有日志文件可删除。
我得到的具体错误是这样的:
[InnoDB] InnoDB 重做日志被禁用时,服务器被终止。数据文件可能已损坏。您可以尝试使用 innodb_force_recovery=6 重新启动数据库
此时,我已经能够以只读模式启动,并且备份了我需要的所有表。我具体应该删除什么?或者有没有更好的方法来完全重建这些表?
我正在考虑完全卸载 mysql 并清除整个目录,但如果有更简单的方法,请在这里寻求反馈。
使用转储并重新创建方法恢复损坏的 InnoDB 表的唯一安全方式是重新创建所有InnoDB 表。
即使您使用
innodb_file_per_table
,该ibdata1
文件也可能包含任何 InnoDB 表的一部分,因为它可以包含更改缓冲区的部分。因此,如果您删除ibdata1
,则可能会(并且很可能会)损坏其他 InnoDB 表。我不确定禁用重做日志是否会导致表损坏,但根据您显示的错误,我推断确实如此。不要禁用重做日志然后关闭 MySQL 服务器。
手册上说:
假设您遵循此建议,则您正在为新数据库实例加载初始数据,因此您必须已经拥有完整备份。在这种情况下,最干净的做法是删除 datadir 中的所有内容并重新初始化,然后重新加载整个备份。
然后,在更新任何数据之前,您应该立即重新启用重做日志。