相关文档 下载本手册
PDF (US Ltr) - 40.0Mb
PDF (A4) - 40.1Mb
手册页 (TGZ) - 258.2Kb
手册页 (Zip) - 365.3Kb
Info (Gzip) - 4.0Mb
Info (Zip) - 4.0Mb


MySQL 9.0 参考手册  /  ...  /  使用 myisamchk 进行崩溃恢复

9.6.1 使用 myisamchk 进行崩溃恢复

本节介绍如何检查和处理 MySQL 数据库中的数据损坏。如果您的表经常损坏,您应该尝试找到原因。参见 第 B.3.3.3 节,“如果 MySQL 持续崩溃该怎么办”.

有关 MyISAM 表如何损坏的说明,请参见 第 18.2.4 节,“MyISAM 表问题”.

如果您使用外部锁定禁用 (默认情况下) 运行 mysqld,则无法可靠地使用 myisamchk 检查 mysqld 正在使用的同一张表。如果您能确定在运行 myisamchk 时,没有人可以使用 mysqld 访问这些表,则您只需在开始检查表之前执行 mysqladmin flush-tables。如果您无法保证这一点,则必须在检查表时停止 mysqld。如果您运行 myisamchk 检查 mysqld 同时更新的表,您可能会收到关于表损坏的警告,即使它实际上没有损坏。

如果服务器使用外部锁定启用运行,您可以随时使用 myisamchk 检查表。在这种情况下,如果服务器尝试更新 myisamchk 正在使用的表,服务器会等待 myisamchk 完成后才继续。

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

在执行崩溃恢复时,重要的是要理解数据库中的每个 MyISAMtbl_name 都对应于数据库目录中的三个文件,如下表所示。

文件 目的
tbl_name.MYD 数据文件
tbl_name.MYI 索引文件

这三种文件类型都可能以各种方式损坏,但问题最常出现在数据文件和索引文件中。

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