由于空调故障,包含我们的 mysql 数据库文件的 SAN 崩溃了。
当出现查询需要花费数秒才能运行的问题时,进一步调查发现 *.frm 文件已损坏;
mysql> show table status;
+-------------------------+--------+---------+------------+------+----------------+-------------+-----------------+--------------+-----------+----------------+-------------+-------------+------------+-----------+----------+----------------+----------------------------------------------------------------------------------+
| Name | Engine | Version | Row_format | Rows | Avg_row_length | Data_length | Max_data_length | Index_length | Data_free | Auto_increment | Create_time | Update_time | Check_time | Collation | Checksum | Create_options | Comment |
+-------------------------+--------+---------+------------+------+----------------+-------------+-----------------+--------------+-----------+----------------+-------------+-------------+------------+-----------+----------+----------------+----------------------------------------------------------------------------------+
| STATUS_REPORT | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | Incorrect information in file: './discovery_prod/STATUS_REPOR |
| bp_discovery | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | Table './discovery_prod/bp_discovery' is marked as crashed and last |
| bp_feedbacks | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | Incorrect information in file: './discovery_prod/bp_feedbacks.frm' |
| bp_language_code_master | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | Incorrect information in file: './discovery_prod/bp_language_code_ma
尝试比较似乎也证实了这一点;
[root@db01 discovery_prod]# mysqlcheck -hlocalhost -r discovery_prod
discovery_prod.STATUS_REPORT
error : Incorrect information in file: './discovery_prod/STATUS_REPORT.frm'
修复表SOMETABLE输出如下;
mysql> repair table STATUS_REPORT;
+-------------------------------------------------+--------+----------+----------------------------------------------------------------------------------------+
| Table | Op | Msg_type | Msg_text |
+-------------------------------------------------+--------+----------+----------------------------------------------------------------------------------------+
| discovery_prod.STATUS_REPORT | repair | error | Incorrect information in file: './discovery_prod/STATUS_REPORT.frm' |
+-------------------------------------------------+--------+----------+----------------------------------------------------------------------------------------+
1 row in set, 1 warning (0.00 sec)
是否可以从数据文件恢复 frm 文件?是否有任何实用程序可以向后工作,因为数据库已启动并正在提供查询?只是真的很慢...
答案1
您尝试过跑步吗repair table $TABLENAME;
?这很可能能解决任何问题bp_discovery
。
.frm 文件包含表定义、架构。如果您使用的是 MyISAM 引擎并且知道您的架构,那么一个可能的最后解决方案如下:
- 备份所有
/data/$TABLENAME.*
文件 - 把桌子放下。
- 重新创建表。
- 删除
$TABLENAME.MYD
文件$TABLENAME.MYI
并将备份复制到位。 - 验证表状态。
此时,您应该认真考虑从备份中恢复。