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

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

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

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

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

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

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

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

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

1
2
3
4
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. в лог-файле должно появиться примерно следующее:

1
2
3
4
5
6
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. открываем еще одну коммандную строку и делаем дампы наших баз данных

1
2
F:\Web\MySQL\MySQL Server 5.0\bin>mysqldump -uroot -pPASSWORD DATABASE > db.s
ql

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

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

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


06.02.2010

Тэги: , , , , ,

Комментарии3 Есть что сказать?