MySQL:ARCHIVE 表已损坏。请帮忙?

MySQL:ARCHIVE 表已损坏。请帮忙?

我是一名程序员,也是一名系统管理员的新手......

今天我开始收到来自我们生产站点的错误电子邮件:

Incorrect key file for table 'xxx'; try to repair it

我发现 MySQL 的 4 个核心中有 2 个核心的服务器 CPU 占用率达到 100%。关闭了网站、crons 和所有内容,大约 10 分钟后 CPU 降到了 0。

尝试备份数据库(mysqldump)导致 CPU 再次达到 100%,持续几分钟,而没有任何实际输出到日志文件。

我尝试了 REPAIR TABLE,得到了以下结果:

+----------------------------+--------+----------+----------+
| Table                      | Op     | Msg_type | Msg_text |
+----------------------------+--------+----------+----------+
| db.table                   | repair | error    | Corrupt  |
+----------------------------+--------+----------+----------+

所以那没有用...

我想过创建一个新表(InnoDB)并从中“插入 SELECT”来尝试恢复一些记录,但是从表中进行选择(SELECT * FROM table LIMIT 1)也会使 CPU 达到 100% 几分钟,并且再次给我“密钥文件不正确”的错误......

此数据库中的 4 个表中有 3 个出现了此错误,这 3 个表均使用 ARCHIVE 引擎,且包含数百万条记录。(最大记录为 46M 条)

这件事大约在一小时前突然发生。

有什么想法我下一步该做什么吗?我理想情况下希望丢失尽可能少的记录,但同时我需要尽快恢复网站。

任何帮助都将不胜感激!
谢谢!
丹尼尔

答案1

MySQL 有一个长期存在的错误,存档表在超过 2 GB 后开始损坏。您的表有多大?

答案2

我们有一个损坏的 ARCHIVE 格式表。看起来它在 OPTIMIZE 或 REPAIR 过程中崩溃了,文件大小也一样。

运行 REPAIR TABLE $tablename EXTENDED; 两次修复了这个问题,根据这个旧的错误报告: https://bugs.launchpad.net/maria/+bug/881383

在运行备份之前值得尝试一下。

相关内容