相关的文档10bet官方网站 本手册下载 本手册摘录

7.6.1使用myisamchk进行崩溃恢复

本节介绍如何检查和处理MySQL数据库中的数据损坏。如果您的表经常损坏,您应该设法找出原因。看到Section B.3.3.3,“如果MySQL一直崩溃怎么办”

有关如何解释MyISAM表可以损坏,看第15.2.4节“Myisam表问题”

如果你运行mysqld禁用外部锁定(默认值),您无法可靠地使用myisamchk检查桌子的时候mysqld使用相同的表。如果你能确定没有人能通过这些表mysqld当你运行myisamchk,你只需要执行mysqladmin刷新表在开始检查表之前。如果您无法保证此,您必须停止mysqld当你检查桌子的时候。如果你运行myisamchk要检查以下表mysqld在更新的同时,您可能会得到一个表损坏的警告,即使它没有损坏。

如果服务器运行时启用了外部锁定,则可以使用myisamchk随时检查桌子。在这种情况下,如果服务器试图更新一个表myisamchk正在使用,服务器等待myisamchk在它继续之前完成。

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

在执行崩溃恢复时,理解这两种情况非常重要MyISAM表格tbl_name数据库中的文件对应于下表所示的数据库目录中的三个文件。

文件 目的
tbl_name.frm 定义文件(格式)
tbl_name.MYD 数据文件
tbl_name.MYI 索引文件

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

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