Восстановление данных в InnoDB таблицах

Расскажу про случай, который произошел со мной, а точнее с моей базой данных. Баз данных у меня было что-то около 10 и все в формате InnoDB.

Если быть кратким, то InnoDB — это подсистема низкого уровня в системе управления базами данных MySQL с собственным механизмом транзакций и внешних ключей.

Так вот, в один из дней, не буду описывать как и почему, у меня перестали открываться все InnoDB таблицы в моих базах данных.

Как многим известно, по умолчанию, InnoDB хранит все таблицы в файлах ibdata (в моем случае только ibdata1). А следовательно, появляется некоторый шанс для восстановления данных (обычно всегда удается восстановить полностью данные).

Первым делом можно сразу же попробовать установить параметр

innodb_force_recovery=1

от 1 до 6. Поочередно запуская и просматривая логи. Если все получится, то таблицы с данными откроются.

В моем случае это не помогло и я восстанавливал все вручную.

Внимание! Сделайте резервную копию ibdata и .FRM и .IBD файлов.

При остановленном MySQL сервере файлы .FRM и .IBD легко копируются (переносятся). Если же вы хотите скопировать эти файлы не останавливая MySQL сервер, то необходимо выполнить запрос:

FLUSH TABLES table1, table2 FOR EXPORT;

, где table1, table2 — имена таблиц.

Таким образом произойдет сброс кэша на диск и экспорт выбранных таблиц.

Теперь необходимо выполнить несколько несложных шагов по подключению перенесенной таблицы на другой сервер:

  1. На новом месте в базе данных с точно таким же именем создаем точную структуру таблицы (пустую, без самих данных).
  2. Выполняем запрос:
    ALTER TABLE table1 DISCARD TABLESPACE;
  3. Кладем скопированные файлы table1.frm и table1.ibd.
  4. Выполняем запрос:
    ALTER TABLE table1 IMPORT TABLESPACE;

Если все прошло удачно и без ошибок — ваши таблицы теперь открываются и работают. Данные действия мне очень помогли при восстановлении большого числа таблиц.

Спасибо за внимание, и помните, всегда нужно делать резервную копию, чтобы избежать проблем в дальнейшем.

Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.

Добавить комментарий

Сообщить об опечатке

Текст, который будет отправлен нашим редакторам: