MySQL InnoDB таблицы повреждены - как исправить? - PullRequest
4 голосов
/ 28 августа 2009

При выполнении условной операции DELETE в одной из моих таблиц InnoDB, которая, очевидно, требовала создания некоторой временной таблицы в ibdata1, жесткий диск был заполнен и MySQL отказал. Не удалось запустить его снова, пока я не удалил файл ibdata1 (~ 30 ГБ).

Теперь mysql запускается снова, но все таблицы в базе данных кажутся поврежденными (когда я делаю REPAIR TABLE tablename EXTENDED, я получаю:

+-----------------------------------+--------+----------+---------+
| Table       | Op     | Msg_type | Msg_text                      |
+-----------------------------------+--------+----------+---------+
| mydb.table1 | repair | Error    | Unknown table engine 'InnoDB' |
| mydb.table1 | repair | error    | Corrupt                       |
+-----------------------------------+--------+----------+---------+

Я использовал опцию innodb_file_per_table, чтобы все мои файлы .frm и .ibd (которые должны содержать метаданные и данные соответственно) были целыми (с теми же размерами файлов, которые были до сбоя), в каталог: /var/mysql/data/mydb/. Кто-нибудь знает, как я мог заставить MySQL снова распознать эти таблицы с соответствующими данными?

Спасибо!

Ответы [ 2 ]

3 голосов
/ 28 августа 2009

, даже когда вы используете пространства имен таблиц, файл ibdata1 по-прежнему содержит данные, от которых зависят эти пространства имен, такие как индексный номер версии и журнал транзакций. вы не можете просто удалить этот файл и ожидать, что он будет работать.

если вам очень повезло, вы можете восстановить / восстановить файл ibdata1 и запустить mysql с опцией --innodb_force_recovery = 3. это позволит запускать mysql без попытки откатить / откатить транзакции.

если у вас все еще есть проблемы, вам нужно опубликовать журнал сервера MySQL при запуске.

3 голосов
/ 28 августа 2009

Без гарантий, но вы можете посмотреть на: https://launchpad.net/percona-data-recovery-tool-for-innodb

...