Я слишком поздно обнаружил, что сценарий резервного копирования для наших баз данных MySQL не работает должным образом. А именно, когда диск на сервере уже начал выходить из строя, и я вошел через SSH и получил полный экран испорченного бинарного мусора. Восстановление из скудных резервных копий, которые не были просто пустыми файлами .sql.gz, потеряло бы данные примерно за месяц. Мне бы очень понравилось, если бы я смог избежать этого сценария.
Я смог проверить диск и извлечь содержимое /var/lib/mysql
каталог со 100 МБ ibdata1
, ib_logfile*
файлы и .frm
и .opt
файлы для каждой базы данных в подкаталогах. У меня нет /etc/mysql/my.cnf
, кажется, что все внизу потеряно. Нет файлов .ibd, предположительно потому, что innodb_file_per_table был отключен.
Я установил MySQL 5.5 (та же версия, что и неудачная) на моем компьютере разработки и попытался восстановить файлы, следуя рекомендациям. Вот, и Вот. Я положил ibdata1
и файлы .frm и .opt в /var/lib/mysql
установите права доступа и владельца для файлов такими же, как и по умолчанию (некоторые mysql:mysql
, некоторые mysql:root
) после того, как я воссоздал таблицы из схемы с помощью клиента mysql.
Затем я запустил mysqld с командой:
/usr/sbin/mysqld –innodb_log_file_size=4128768 –innodb_force_recovery=6
Он немедленно завершается без вывода. А dmesg | tail
показывает целую кучу:
[ 781.937089] init: mysql main process (1819) terminated with status 1
[ 781.937127] init: mysql respawning too fast, stopped
Обе /var/log/mysql.log
и /var/log/mysql.err
пусты.
Я пробовал несколько вариантов этой темы восстановления. Я попытался скопировать весь восстановленный каталог данных mysql в /var/lib
, Я пробовал перезаписать только ibdata1
и подкаталог базы данных с папками .frm и .opt. Я пробовал с лог-файлами и без них, увеличивая значение восстановления с 1 до 6.
Если я восстановлю исходный каталог mysql, mysqld запустится нормально. Apparmor не работает на машине (у некоторых были проблемы с этим).
Я читал в блоге Percona о производительности MySQL, что можно восстановить данные только из файла ibdata1. У меня есть только две таблицы на базу данных, и у меня есть схема, но, читая README, предоставленный с их инструментом восстановления, похоже, мне, по крайней мере, нужно иметь возможность запустить mysql, чтобы получить информацию о табличном пространстве.