【问题标题】:MySQL table is marked as crashedMySQL表被标记为崩溃
【发布时间】:2012-08-05 20:23:51
【问题描述】:

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

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

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

【问题讨论】:

    标签: mysql myisam


    【解决方案1】:

    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。

    【讨论】:

    • 非常感谢!!!我从来没有对表格的文件句柄部分感兴趣。我只是设置了一个 MISAM 修复脚本并且效果很好!!!...还有一件事,因为 InnoDB 内置了崩溃恢复,它的性能如何? MISAM 和 InnoDB 之间有性能差异吗?
    • 太多的利弊要讨论。试试我的 DBA.SE 答案,1)dba.stackexchange.com/a/2194/877,2)dba.stackexchange.com/a/6008/877,3)dba.stackexchange.com/a/17434/877。我希望这些帮助!!!
    • 感谢链接帮助很大。现在,我将坚持使用 MYISAM,将 key_buffer_size 设置为 cap 并使用 ALTER TABLE td.tb ROW_FORMAT=Fixed... 我还会尝试定期使用代码运行 MYISAM 表的恢复脚本。万分感谢!!!你给了我很多想法……非常感谢罗兰多!!!!
    猜你喜欢
    • 2015-09-17
    • 2020-02-11
    • 2013-05-30
    • 2011-05-20
    • 2019-12-30
    • 1970-01-01
    • 2023-01-23
    相关资源
    最近更新 更多