# 7.6.1 使用 myisamchk 进行崩溃恢复

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

有关如何解释MyISAM表可能会损坏,请参阅第 16.2.4 节,“MyISAM 表问题”.

如果你跑mysqld禁用外部锁定(这是默认设置),您不能可靠地使用迈萨姆奇克检查表时mysqld正在使用同一张桌子。如果您可以确定没有人可以使用mysqld当你跑步时迈萨姆奇克, 你只需要执行mysqladmin 刷新表在您开始检查表格之前。如果你不能保证这一点,你必须停止mysqld当您检查表格时。如果你跑迈萨姆奇克检查表mysqld同时更新时,您可能会收到警告说表已损坏,即使它没有损坏。

如果服务器在启用外部锁定的情况下运行,您可以使用迈萨姆奇克随时查看表格。在这种情况下,如果服务器尝试更新一个表迈萨姆奇克正在使用,服务器等待迈萨姆奇克在它继续之前完成。

如果你使用迈萨姆奇克要修复或优化表,您必须始终确保mysqld服务器未使用该表(如果禁用了外部锁定,这也适用)。如果你不停mysqld,你至少应该做一个mysqladmin 刷新表在你跑步之前迈萨姆奇克.你的桌子可能会损坏如果服务器和迈萨姆奇克同时访问表。

在执行崩溃恢复时,重要的是要了解每个MyISAM桌子*tbl_name*在一个数据库中对应于下表所示数据库目录中的三个文件。

文件 目的
*tbl_name*.MYD 数据文件
*tbl_name*。我的我 索引文件

这三种文件类型中的每一种都以各种方式受到损坏,但问题最常发生在数据文件和索引文件中。

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