Назад | Перейти на главную страницу

mysql потерпел крах и потерял описания таблиц «показать статус таблицы» все null

Из-за сбоя кондиционера произошел сбой 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 файлы и скопируйте свои резервные копии на место.
  • Проверить статус таблицы.

На этом этапе вам следует серьезно подумать о восстановлении из резервной копии.