Documentation Home
MySQL 8.3 Reference Manual
Related Documentation Download this Manual
PDF (US Ltr) - 40.8Mb
PDF (A4) - 40.9Mb
Man Pages (TGZ) - 294.0Kb
Man Pages (Zip) - 409.0Kb
Info (Gzip) - 4.0Mb
Info (Zip) - 4.0Mb
Excerpts from this Manual

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

9.6.1 使用 myisamchk 进行崩溃恢复

本节描述了如何检查和处理 MySQL 数据库中的数据损坏。如果您的表经常变得损坏,您应该尝试找到原因。见 第 B.3.3.3 节,“如果 MySQL 不断崩溃”

关于 MyISAM 表如何变得损坏的解释,见 第 18.2.4 节,“MyISAM 表问题”

如果您使用外部锁定禁用(这是默认设置),您不能可靠地使用 mysqld 运行时检查表,而是使用 myisamchk。如果您可以确保没有人使用 mysqld 访问表时,您只需要在开始检查表之前执行 mysqladmin flush-tables。如果您不能保证这一点,您必须在检查表时停止 mysqld。如果您在 mysqld 更新表时同时运行 myisamchk,您可能会收到警告,表明表损坏,即使它不是。

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

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

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

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

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

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