Из-за сбоя кондиционера произошел сбой SAN с нашими файлами базы данных mysql.
Когда он обнаружился, возникли проблемы с запросами, выполнение которых занимало много секунд, дальнейшее расследование показало, что файлы * .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 из файлов данных? Существуют ли какие-либо утилиты, которые могут работать в обратном направлении, когда база данных работает и обслуживает запросы? Просто очень медленно ...
Вы пробовали бегать repair table $TABLENAME;
? Это, вероятно, решит любые проблемы с bp_discovery
.
Файлы .frm содержат определения таблиц, схемы. Если вы используете механизм MyISAM и знаете свою схему, одно из возможных решений последней возможности выглядит следующим образом:
/data/$TABLENAME.*
файлы$TABLENAME.MYD
и $TABLENAME.MYI
файлы и скопируйте свои резервные копии на место.На этом этапе вам следует серьезно подумать о восстановлении из резервной копии.