mysql 崩溃并丢失表描述“显示表状态”全部为空

mysql 崩溃并丢失表描述“显示表状态”全部为空

由于空调故障,包含我们的 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并将备份复制到位。
  • 验证表状态。

此时,您应该认真考虑从备份中恢复。

相关内容