Восстановление данных 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
Всея ПЫХА
helldude
adw0rd
Мавр
ГО
Irinax