MySQL表被标记为崩溃

时间:2012-08-08 16:51:01

标签: mysql myisam

我是MySQL数据库的新手。我一再看到MySQL的一个错误,说该表被标记为崩溃,应该修复。但是,我可以使用命令myisamchk修复崩溃的表。顺便说一句,我在MySQL中使用MYISAM数据库引擎。

我只是想知道在什么情况下数据库表崩溃以及如何防止它再次发生?

我使用mysqltcl库(3.0)从Tcl(8.5)脚本连接MySQL(5.0)数据库。

1 个答案:

答案 0 :(得分:10)

MyISAM表非常容易崩溃。每个表中都有标题信息,用于跟踪MyISAM表具有的打开文件句柄数。

如果mysqld崩溃,任何打开文件句柄的MyISAM表都没有机会在每个文件句柄关闭时减少文件句柄数。因此,如果新文件句柄打开MyISAM表(.MYD文件)并且mysqld发现MyISAM表认为打开的文件句柄数与MyISAM表实际打开的文件句柄数之间不匹配,则表为宣布坠毁。

有四(4)种处理方法:

方法#1:设置自动MyISAM修复

请参阅我的帖子https://dba.stackexchange.com/a/15079/877,了解如何在MySQL重启(2012年3月15日)时进行设置

方法#2:使用InnoDB而不是MyISAM

InnoDB在存储引擎的初始化中内置了崩溃恢复功能。 MyISAM没有

方法#3:使用Aria而不是MyISAM

Aria是MariaDB的替代MyISAM。它具有各个表的崩溃恢复机制。

方法#4:不要在mysqld上杀死-9

如果mysqld故意或不自觉地崩溃,所有打开的MyISAM表的标题信息将使它们进入崩溃状态。避免手动杀死mysqld。