tegrato
@tegrato

Как восстановить БД MySQL из файла /var/lib/mysql/ibdata1 ??

1. Были удалены 2 MySQL базы данных. Как их можно восстановить из файла /var/lib/mysql/ibdata1?
Сервер (Debian 9) был тестовый, поэтому резервные копии не делались.
Восстановление этих баз - не "вопрос жизни и смерти", но очень интересна сама возможность восстановления, и тестовый сервер как раз удобен для подобных экспериментов.
В сети есть информация, как перенести БД с одного сервера на другой с использованием файла /var/lib/mysql/ibdata1, но все эти шпаргалки не применимы в моем случае.

2. Есть файлы ЛОГов: /var/lib/mysql/ib_logfile0 и /var/lib/mysql/ib_logfile1, но попытка их сконвертировать командой mysqlbinlog ib_logfile0 > 1.txt в читабельный вид выдает ошибку:

mysqlbinlog: unknown variable 'default-character-set=utf8mb4'
  • Вопрос задан
  • 546 просмотров
Решения вопроса 1
tegrato
@tegrato Автор вопроса
Долгое гугление и приставание к различным экспертам дали следующие результаты:

1. Без наличия хотя бы старого дампа базы данных не восстановить.

2. Просмотреть содержимое файлов /var/lib/mysql/ib_logfile0, /var/lib/mysql/ib_logfile1 и /var/lib/mysql/ibdata1 можно, в принципе, и без дополнительных преобразований, например, с помощью Notepad++ (но это жутко не удобно, Notepad++ будет дико тормозить при размере файлов 40М+).
Поэтому желательно предварительно их преобразовать в более-менее читабельный вид с помощью команды:


strings /var/lib/mysql/ib_logfile0 > /var/lib/mysql/ib_logfile0.txt


Потом скачать полученные текстовые файлы, их размер будет меньше в 3-4 раза.
Если не знать, что было в БД, то будет не просто разобраться в этом массиве строк. Но, в целом, часть информации можно будет легко распознать.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
firedragon
@firedragon
Не джун-мидл-сеньор, а трус-балбес-бывалый.
blog.vadimdenisov.ru/post/223

mysqlbinlog --no-defaults /var/lib/mysql/mysql-bin.000065 | tail -n 9
mysqlbinlog: O_TMPFILE is not supported on /tmp (disabling future attempts)
ERROR: Error in Log_event::read_log_event(): 'Event truncated', data_len: 1044004, event_type: 2
#191110 13:18:33 server id 1 end_log_pos 316384751 CRC32 0xb3498009 GTID 0-1-72255
/*!100001 SET @@session.gtid_seq_no=72255*//*!*/;
BEGIN
/*!*/;
DELIMITER ;
# End of log file
ROLLBACK /* added by mysqlbinlog */;
/*!50003 SET COMPLETION_TYPE=@OLD_COMPLETION_TYPE*/;
/*!50530 SET @@SESSION.PSEUDO_SLAVE_MODE=0*/;

Ответ написан
Ваш ответ на вопрос

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

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