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


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

9.6.1 使用 myisamchk 进行崩溃恢复

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

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

如果您运行 mysqld 并禁用外部锁定(这是默认设置),则在 mysqld 使用同一张表时,无法可靠地使用 myisamchk 检查该表。如果您能确定在运行 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 之前备份该表。