Поиск по тегу: recovery

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

06.02.2010, 06:12

Тэги: innodb, mysql, recovery, web

После очередного «небольшого конфуза» с моим мускулом, он перестал загружаться.
Решено было переустановить его и встала проблема, как сделать дампы баз данных?

Большинство моих таблиц имели тип InnoDB.
В наличии у меня было:

ibdata1 — 1Гб
ib_logfile0 — 5 Мб
ib_logfile1 — 5 Мб

Пришлось все это дело лить на локалку — дабы безопасно потестить и найти метод восстановления. Запаковал весь /var/db/mysql и слил себе.

Подкинули ссылку на статью, в которой точно такая же ситуация. Только я восстанавливал на ноутбуке, винде.

Итак, на локальном серверу MySQL мы подменяем папку Data, которую мы слили из /var/db/mysql.

Сервис MySQL естественно надо остановить (Панель управления / Администрирование / Службы / MySQL » Остановить).

1. заходим в папку с бинарниками мускла и запускаем mysql с параметрами восстановления InnoDB

C:\Users\epsyl>F: F:\>cd F:\Web\MySQL\MySQL Server 5.0\bin\ F:\Web\MySQL\MySQL Server 5.0\bin>mysqld --innodb_log_file_size=5242880 --innodb_force_recovery=6

2. в лог-файле должно появиться примерно следующее:

InnoDB: The user has set SRV_FORCE_NO_LOG_REDO on InnoDB: Skipping log redo 100206 6:01:39 InnoDB: Started; log sequence number 0 0 InnoDB: !!! innodb_force_recovery is set to 6 !!! 100206 6:01:39 [Note] mysqld: ready for connections. Version: '5.0.16' socket: '' port: 3306 Official MySQL binary

3. открываем еще одну коммандную строку и делаем дампы наших баз данных

F:\Web\MySQL\MySQL Server 5.0\bin>mysqldump -uroot -pPASSWORD DATABASE > db.sql

* не забываем, что логин и пароль – не от локального мускула, а от того, что мы восстанавливаем.

Вот и все, таким образом были восстановлены дампы всех баз данных.
Также хочу предостеречь от использования знака «-» в именах таблиц и баз данных, при этом инциденте — они у меня преобразовались в @002d.

p.s.
боже храни Дуда за ссылку на статью
и отдельное мега-спасибо Эдворду, практически персональному админу :)