MySQL — Восстановление данных из бинарных логов (binary log)

Если в настройках MySQL сервера включить опцию log-bin и ещё несколько сопровождающих, то СУБД начнёт вести бинарные логи, в которые будет записываться информация о всех изменениях данных в БД. Проще говоря, эти логи будут содержать все запросы которые добавляли, удаляли или обновляли данные во всех БД (или можно настроить логировать только определённые БД).

Данные логи используются в основном для репликации, когда мастер-сервер ведёт бинарный лог, а слейв-сервера обновляют свои данные читая его.

Однако, данные логи могут служить для восстановления данных за непродолжительный период времени, в зависимости от того за какой период в конфигах MySQL указано хранить бинарные логи. Это бывает очень полезно если у вас есть бекап сделанный ночью и необходимо дополнить его данными за время от окончания бекапа до момента когда случилась беда с базой.

О том как извлечь из них данные и пойдёт речь в данной статье.


Хоть формат бинлогов нечитаем, можно воспользоваться утилитой mysqlbinlog для восстановления данных или преобразования бинарных файлов логов в SQL формат.

Имея один файл бинлогов, можно использовать для восстановления следующую команду:

Если же файлов несколько, можно запустить их в отдельных соединениях к базе:

или:

Последний способ предпочтительней, так как убережёт вас от ситуации, когда в конце одного файла имеется только часть запроса, а вторая половина находится в следующем файле.

Извлечь содержимое в .sql файл:

Дополнить файл allbinlof.sql содержимым другого бинлога:

Если использовать опцию -v, то .sql файл будет иметь более удобочитаемое содержание.

Так же, можно указать период времени за который необходимо извлечь записи:

Или использовать позиции:

Дополнительную инфу можно получить из встроенной справки:

 Полезные ссылки:


Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *