6

我对 MySQL 数据库相当陌生。我反复看到来自 MySQL 的错误,说该表被标记为崩溃并且应该修复。但是,我可以使用命令 myisamchk 来修复崩溃的表。顺便说一句,我在 MySQL 中使用了 MISAM 数据库引擎。

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

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

4

1 回答 1

11

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。

于 2012-08-08T17:08:02.077 回答