butteff
@butteff
Раз в тысячу лет заправляю свитер в носки

Как, имея на руках бэкап /var/lib/mysql/sitename восстановить базу данных sitename?

Здравствуйте.
Скрипт сделал копию жесткого диска, но почему-то не сделал бэкапы через mysqldump.
На сервере я установил mysql с нуля. Создал пользователей с паролями из конфига сайтов.

Имею полностью копию папки /var/lib/mysql/sitename
Соответственно, копирую sitename в /var/lib/mysql
И в phpmyadmin он видит базу данных sitename, но когда пытаюсь посмотреть ее, то пишет "No tables found in database", почему? В папке имеются .frm и .ibd файлы.
Владелец и группа на папку mysql:mysql

Просто скопировать всю папку я не могу, пароли у рута теперь иные, а старые в забвении.
В общем, вопрос такой:
Как, имея на руках бэкап /var/lib/mysql/sitename восстановить базу данных sitename?
  • Вопрос задан
  • 1398 просмотров
Решения вопроса 1
sptm
@sptm
software developer / DevOps engineer
Сдается мне, можно просто попробовать скопировать всю эту папку, а потом сбросить пароль root по инструкции.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 3
@xtreme
Снимаю порчу по SSH :)
ibd копировал с источника при выключенном MySQL? В конфиге старого MySQL был включен innodb-file-per-table?
Если ты их копировал с включенным MySQL не используя xtrabackup - тогда с очень большой вероятностью ты не заведешь БД. Можно попробовать создавать пустые таблицы с такими же параметрами, как на источнике, затем выключать MySQL, подсовывать туда ibd и т.д.
Если в конфиге старого MySQL не был включен innodb-file-per-table - тогда все твои данные остались вообще в корне БД в ibdata1.
Ответ написан
romy4
@romy4
Exception handler
А frm не пустые?
Ответ написан
Комментировать
Была в точности такая же проблема, перепробовал много-много всего, в итоге мне очень помогла вот эта статья, но с некоторыми вариациями из других статеек:
www.hexblot.com/blog/recovering-innodb-tables-ibd-...

В имеющейся папке /var/lib/mysql/sitename у нас остались frm и ibd файлы.

План примерно такой:
1. Вначале воссоздаём список таблиц БД без точной структуры
(в статье создавались только таблицы-заглушки, лично я воссоздал кое-как структуры таблиц с помощью "mysqlfrm --diagnostic [tablename].frm" )
2. Восстанавливаем точную структуру таблиц
(Выключаем mysql, заменяем только .frm файлы в БД, включаем mysql с параметром innodb_force_recovery=5, извлекаем дамп с точной структурой таблиц.)
3. Переустанавливаем mysql
(запускаем теперь с параметром innodb_force_recovery=1)
4. Импортируем структуру таблиц из пункта 2
5. Восстанавливаем данные таблиц поверх структуры
(Лично я делал почти как в статье, но без дальнейшей перезагрузки mysql сервера)

А именно:
5.1) Отсоединяем ibd файл от каждой таблицы с помощью sql "alter table `[tablename]` discard tablespace;"
5.2) Копируем имеющиеся ibd файлы в БД
5.3) Присоединяем ibd файлы к каждой таблице с помощью sql "alter table `[tablename]` import tablespace;"

PhpMyAdmin в процессе сильно ругался, но БД отобразил и дал её экспортировать.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы