Mysqlbinlog — работаем с бинарными логами MySQL

MySQL логотип

Начиная с версии 4.1.3 MySQL записывает все запросы, которые приводят к изменению данных, в бинарный журнал обновлений (binary log). Но эта опция может оказаться и отключенной по умолчанию. Включается поддержка бинарных логов строкой log-bin=mysql-bin в конфигурационном файле (my.cnf). Ведутся логи и в том случае, если MySQL запущен с ключом —log-bin[=file_name].

Журнал обновлений обычно хранится в файлах вида mysql-bin. циферки. Пример: mysql-bin.000171. Если в настройках не задан полный путь, эти файлы будут размещены в директории, в которой MySQL хранит базы данных. По умолчанию размер каждого файла — 1 ГБ.

Для работы с бинарными логами понадобится утилита mysqlbinlog. Она идёт в комплекте с MySQL сервером. Утилита обрабатывает файлы журнала и выводит пригодный к использованию SQL код прямо в консоль. Вывод можно перенаправить в файл (mysqlbinlog [параметры] [лог_файлы] > файл .sql), непосредственно в MySQL (mysqlbinlog [параметры] / mysql [параметры] ) или указать файл для вывода в параметрах утилиты. Например:

# mysqlbinlog -s -d db_name -r out.sql mysql-bin.000038

В данном случае будет обработан файл mysql-bin.000038 (из текущей директории), вывод оправится в out.sql, будут выведены только команды, относящиеся к изменению базы с именем db_name. Параметром -s мы запретили вывод дополнительной служебной информации.

Более полезный пример:

# mysqlbinlog -s -d db_name -u user_name --start-datetime="2009-01-23 21:10:00" -t mysql-bin.000001 > out.sql

Здесь мы, кроме прочего, ограничиваемся выводом запросов, которые выполнялись пользователем user_name начиная с указанной даты. Параметр -t сообщает утилите, что нужно обрабатывать и логи, которые идут после файла mysql-bin.000001. Обратите внимание, что если вы будете перенаправлять вывод сразу в MySQL, то в журнал обновлений добавятся свежие записи и произойдёт зацикливание. Для предотвращения следует добавить ещё и параметр -D, который запрещает ведение лога. Запрет будет доступен только если выполнять команду из под рута. Но перенаправление вывода прямо в мускул не рекомендуется.

Остальные параметры подсматриваем так же, как и для любой консольной программы:

# mysqlbinlog —help

Но если все хорошо, восстанавливать из дампов ничего не нужно… А бинарные логи имеют привычку занимать много места не сервере (недавно посмотрел на одном из серверов и ужаснулся — больше 50 гигабайт!). Поэтому советую время от времени создавать дамп всей базы данных MySQL с последующим удалением бинарных логов. Для этого необходимо воспользоваться следующей командой:

# mysqldump —flush-logs —delete-master-logs —all-databases -u user_name  -p > out.sql

Чтобы автоматизировать этот процесс, добавим в my.cnf (в секцию [mysqld] ) такую строку:

expire_logs_days = 7

Этой переменной мы указываем, что необходимо хранить записи только за последние 7 дней. После внесения изменений необходимо перезапустить MySQL:

# sh /usr/local/etc/rc.d/mysql-server restart

Также необходимо дать команду MySQL очистить логи:

mysql> flush logs;
Query OK, 0 rows affected (0.00 sec)

Источник http://muff.kiev.ua/content/mysqlbinlog-rabotaem-s-binarnymi-logami-mysql

Запись опубликована в рубрике *mysql. Добавьте в закладки постоянную ссылку.

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

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

Я не спамер This plugin created by Alexei91