【发布时间】:2012-08-05 20:23:51
【问题描述】:
我对 MySQL 数据库相当陌生。我反复看到来自 MySQL 的错误,说该表被标记为崩溃并且应该修复。但是,我可以使用命令 myisamchk 来修复崩溃的表。顺便说一句,我在 MySQL 中使用了 MISAM 数据库引擎。
我只是想知道在什么情况下数据库表会崩溃以及如何防止它再次发生?
我正在使用 mysqltcl 库 (3.0) 从 Tcl (8.5) 脚本连接到 MySQL(5.0) 数据库。
【问题讨论】:
我对 MySQL 数据库相当陌生。我反复看到来自 MySQL 的错误,说该表被标记为崩溃并且应该修复。但是,我可以使用命令 myisamchk 来修复崩溃的表。顺便说一句,我在 MySQL 中使用了 MISAM 数据库引擎。
我只是想知道在什么情况下数据库表会崩溃以及如何防止它再次发生?
我正在使用 mysqltcl 库 (3.0) 从 Tcl (8.5) 脚本连接到 MySQL(5.0) 数据库。
【问题讨论】:
MyISAM 表很容易崩溃。每个表中都有标头信息,用于跟踪 MyISAM 表有多少打开的文件句柄。
如果 mysqld 崩溃,任何打开文件句柄的 MyISAM 表都没有机会在每个文件句柄关闭时减少文件句柄计数。因此,如果一个新的文件句柄打开一个 MyISAM 表(.MYD 文件)并且 mysqld 发现 MyISAM 表认为打开的文件句柄数与 MyISAM 表实际打开的文件句柄数之间不匹配,则该表是宣布崩溃。
有四 (4) 种方法可以处理此问题:
请参阅我的帖子 https://dba.stackexchange.com/a/15079/877,了解如何在 MySQL 重新启动时进行设置(2012 年 3 月 15 日)
InnoDB 在存储引擎的初始化中内置了崩溃恢复。 MyISAM 没有
Aria 是 MariaDB 的 MyISAM 替代品。它具有针对单个表的崩溃恢复机制。
如果 mysqld 有意或无意地崩溃,所有打开的 MyISAM 表的标题信息将使它们进入崩溃状态。避免手动杀死 mysqld。
【讨论】: