Documentation Home
MySQL 8.4 Reference Manual
Related Documentation Download this Manual
PDF (US Ltr) - 39.8Mb
PDF (A4) - 39.9Mb
Man Pages (TGZ) - 257.9Kb
Man Pages (Zip) - 364.9Kb
Info (Gzip) - 4.0Mb
Info (Zip) - 4.0Mb


MySQL 8.4 Reference Manual  /  ...  /  Using myisamchk for Crash Recovery

9.6.1 使用 myisamchk 进行崩溃恢复

本节描述了如何检查和处理 MySQL 数据库中的数据损坏。如果您的表格频繁地损坏,您应该尝试找到原因。请参阅第 B.3.3.3 节,“如果 MySQL 总是崩溃该怎么办”

关于MyISAM表格如何损坏的解释,请参阅第 18.2.4 节,“MyISAM 表格问题”

如果您使用mysqld命令(MySQL 服务器)时,外部锁定功能disabled(这是默认设置),那么在mysqld正在使用同一个表时,您不能可靠地使用myisamchk命令(MyISAM 表维护工具)来检查该表。如果您可以确定没有人可以使用mysqld访问表,而您在运行myisamchk时,您只需要执行mysqladmin flush-tables命令,然后开始检查表。如果您不能确保这点,您必须停止mysqld,然后再检查表。如果您使用myisamchk命令来检查mysqld正在更新的表,您可能会收到警告,指出该表是损坏的,但实际上它并不是。

如果服务器启用外部锁定,可以使用myisamchk在任何时候检查表。这种情况下,如果服务器尝试更新myisamchk正在使用的表,服务器将等待myisamchk完成后再继续。

如果您使用myisamchk修复或优化表,您必须始终确保mysqld服务器不使用该表(这也适用于外部锁定禁用)。如果您没有停止mysqld,至少在运行myisamchk之前执行mysqladmin flush-tables。如果服务器和myisamchk同时访问表,您的表可能会损坏

在进行崩溃恢复时,需要了解每个MyISAMtbl__name在数据库对应的三个文件,在以下表格中显示。

File Purpose
tbl_name.MYD 数据文件
tbl_name.MYI 索引文件

这三个文件类型都可能会出现各种形式的损坏,但问题最常见的是在数据文件和索引文件中。

myisamchk通过将.MYD数据文件逐行复制。它在修复阶段结束时,删除旧的.MYD文件,并将新文件重命名为原始文件名称。如果您使用--quick,myisamchk不会创建临时.MYD文件,而是假设.MYD文件正确,并且只生成新的索引文件,不会touch.MYD文件。这是安全的,因为myisamchk自动检测.MYD文件是否损坏,并且在它是损坏时中止修复操作。您也可以指定--quick选项两次,以便myisamchk在某些错误(如重复键错误)时不中止,而是尝试解决它们通过修改.MYD文件。文件。通常,使用两个--quick选项只有在您没有足够的可用磁盘空间来执行正常修复时才有用。在这种情况下,您至少应该在运行myisamchk之前备份表。