我办公室的一台监控服务器最近遭遇了断电。这次断电导致一些数据库表损坏。
我已经使用“use_frm”选项成功修复了 3-4 个表,但是仍然有 3 个表似乎已严重损坏,并且没有响应 mysql REPAIR 命令(无论是否使用 use_frm)
mysql> REPAIR TABLE poller_item;
+-------------------+--------+----------+---------------------------------------------- ------------+
| Table | Op | Msg_type | Msg_text |
+-------------------+--------+----------+------------------------------------------------- ---------+
| cacti.poller_item | repair | Error | Incorrect information in file: './cacti/poller_item.frm' |
| cacti.poller_item | repair | error | Corrupt |
+-------------------+--------+----------+------------------------------------------------- ---------+
在这种情况下还有其他方法可以修复表格吗?
MySQL 版本
mysql Ver 14.14 Distrib 5.1.49, for debian-linux-gnu (x86_64) using readline 6.1
答案1
Incorrect information in file: './cacti/poller_item.frm'
.frm
文件存储表格格式。试试这个:
- 停止 MySQL
- 备份
poller_item.frm
,poller_item.MYD
,poller_item.MYI
- 删除
poller_item
表 - 启动 MySQL
poller_item
使用CREATE TABLE
语句 重新创建表仙人掌数据库 (使用您正在运行的相应版本)- 停止 MySQL
- 将
poller_item.MYD
,复制poller_item.MYI
到 datadir - 再次启动 MySQL
答案2
先备份然后尝试 MYISAMCHK(1):
myisamchk --recover tbl
myisamchk --save-recover tbl
答案3
我在 mariadb (mysql) 中遇到了同样的问题,有 5 个表“正在使用”。
检查或修复后的消息
Incorrect information in file: './tablename.frm'
Corrupted
在数据库文件夹中,这些 frm 文件的大小为 0。因此,我停止了 mariadb 服务,然后用备份中的 frm 文件覆盖它们。然后我重新启动 mariadb 服务,表就修复了。注意:首先,我用只有 1-2 行数据的表测试了这个解决方案,以确保它有效。我也有 azure 备份,所以如果那不起作用,我可以回滚到上一小时。
祝你好运!