Spec-Zone .ru
спецификации, руководства, описания, API

4.6.8. mysqlbinlog — Утилита для Обработки Двоичных Файлов журнала

4.6.8.1. mysqlbinlog Шестнадцатеричный Формат Дампа
4.6.8.2. Дисплей События Строки mysqlbinlog
4.6.8.3. Используя mysqlbinlog, чтобы поддержать Двоичные Файлы журнала
4.6.8.4. Определение mysqlbinlog ID Сервера

Двоичный журнал сервера состоит из файлов, содержащих "события", которые описывают модификации к содержанию базы данных. Сервер пишет эти файлы в двоичном формате. Чтобы вывести на экран их содержание в текстовом формате, используйте mysqlbinlog утилиту. Можно также использовать mysqlbinlog, чтобы вывести на экран содержание релейных файлов журнала, записанных ведомым сервером в установке репликации, потому что у релейных журналов есть тот же самый формат как двоичные журналы. Двоичный журнал и релейный журнал обсуждаются далее в Разделе 5.2.4, "Двоичный Журнал", и Раздел 16.2.2, "Реле репликации и Журналы Состояния".

Вызовите mysqlbinlog как это:

shell> mysqlbinlog [options]
        log_file ...

Например, чтобы вывести на экран содержание двоичного названного файла журнала binlog.000003, используйте эту команду:

shell> mysqlbinlog
        binlog.0000003

Вывод включает события, содержавшиеся в binlog.000003. Для основанного на операторе журналирования информация о событии включает SQL-оператор, ID сервера, на котором это выполнялось, метка времени, когда оператор выполнялся, сколько времени потребовалось и т.д. Для основанного на строке журналирования событие указывает на изменение строки, а не SQL-оператор. См. Раздел 16.1.2, "Форматы Репликации", для информации о журналировании режимов.

Событиям предшествуют комментарии заголовка, которые обеспечивают дополнительную информацию. Например:

# at 141#100309  9:28:36 server id 123  end_log_pos 245  Query thread_id=3350  exec_time=11  error_code=0

В первой строке, числе после at указывает на стартовую позицию события в двоичном файле журнала.

Вторая строка запускается с даты и время, указывая когда оператор, запущенный на сервере где порожденное событие. Для репликации эта метка времени распространяется к ведомым серверам. server id server_id значение сервера, где событие произошло. end_log_pos указывает, где следующее событие запускается (то есть, это - позиция конца текущего события + 1). thread_id указывает который поток, выполняемый событие. exec_time потраченное выполнение времени события, на главном сервере. На ведомом устройстве это - различие времени выполнения конца на ведомом устройстве минус начинающееся время выполнения на ведущем устройстве. Различие служит индикатором того, сколько репликации отстает от ведущего устройства. error_code указывает на следствие выполнения события. Нуль означает, что никакая ошибка не произошла.

Вывод от mysqlbinlog может быть повторно выполнен (например, при использовании этого как входной к mysql), чтобы восстановить операторы в журнале. Это полезно для операций восстановления после катастрофического отказа сервера. Для других примеров использования см. обсуждение позже в этом разделе и в Разделе 7.5, "Момент времени (Инкрементное) Восстановление Используя Двоичный Журнал".

Обычно, Вы используете mysqlbinlog, чтобы считать двоичные файлы журнала непосредственно и применить их к локальному серверу MySQL. Также возможно считать двоичные журналы из удаленного сервера при использовании --read-from-remote-server опция. Чтобы считать удаленные двоичные журналы, опции параметра соединения могут быть даны, чтобы указать, как соединиться с сервером. Эти опции --host, --password, --port, --protocol, --socket, и --user; они игнорируются кроме тех случаев, когда Вы также используете --read-from-remote-server опция.

mysqlbinlog поддерживает следующие опции, которые могут быть определены на командной строке или в [mysqlbinlog] и [client] группы файла опции. mysqlbinlog также поддерживает опции для того, чтобы обработать файлы опции, описанные в Разделе 4.2.3.4, "Параметры командной строки, которые Влияют на Обработку Файла опции".

Таблица 4.14. mysqlbinlog Опции

Формат Файл опции Описание Представленный
- base64-output=value base64-вывод Напечатайте двоичные записи журнала, используя кодировку Base 64
- bind-address=ip_address свяжите адресный Используйте указанный сетевой интерфейс, чтобы соединиться с MySQL Server
--binlog-row-event-max-size=# binlog-row-event-max-size Двоичный журнал максимальный размер события
- character-sets-dir=path dir наборов символов Каталог, где наборы символов устанавливаются
- database=db_name база данных Записи списка для только этой базы данных
- отладка [=debug_options] отладка Запишите журнал отладки
- проверка отладки проверка отладки Напечатайте отладочную информацию, когда программа выходит
- информация отладки информация отладки Напечатайте отладочную информацию, память и статистику ЦП, когда программа выходит
- default-auth=plugin default-auth=plugin Плагин аутентификации, чтобы использовать
- "отключите мусорное ведро журнала" "отключите мусорное ведро журнала" Отключите двоичное журналирование
- exclude-gtids=gtid_set исключить-gtids Не показывайте ни одну из групп в обеспеченном наборе GTID
- "вызовите если открытый" "вызовите если открытый" Считайте двоичные файлы журнала даже если открытый или не закрытый должным образом
- считанный из силы считанный из силы Если mysqlbinlog читает двоичное событие журнала, которое он не распознает, он печатает предупреждение
- справка Сообщение справки дисплея и выход
- hexdump hexdump Выведите на экран шестнадцатеричный дамп журнала в комментариях
- host=host_name узел Соединитесь с сервером MySQL на данном узле
- идемпотент идемпотент Заставьте сервер использовать идемпотентный режим, обрабатывая двоичные обновления журнала от этого сеанса только 5.7.0
- include-gtids=gtid_set включать-gtids Покажите только группы в обеспеченном наборе GTID
- local-load=path локальная загрузка Подготовьте локальные временные файлы к ДАННЫМ ЗАГРУЗКИ INFILE в указанном каталоге
- login-path=name Считайте опции пути входа в систему из.mylogin.cnf
--offset=# смещение Пропустите первые записи N в журнале
- пароль [=password] пароль Пароль, чтобы использовать, соединяясь с сервером
- plugin-dir=path plugin-dir=path Каталог, где плагины располагаются
- port=port_num порт Номер порта TCP/IP, чтобы использовать для соединения
- protocol=type протокол Протокол соединения, чтобы использовать
- сырые данные сырые данные Запишите события в необработанном (двоичном) формате к выходным файлам
- read-from-remote-master=type "читайте от удаленного ведущего устройства" Считайте двоичный журнал от ведущего устройства MySQL вместо того, чтобы читать локальный файл журнала
- чтение от удаленного сервера чтение от удаленного сервера Считайте двоичный журнал из сервера MySQL, а не локального файла журнала
- result-file=name файл результата Прямой вывод к данному файлу
- дб перезаписи ='oldname-> newname' дб перезаписи Создайте правила подстановки для баз данных, воспроизводя от журналов, записанных в основанном на строке формате. Может использоваться многократно. 5.7.1
- server-id=id идентификатор сервера Извлеките только те события, создаваемые сервером, имеющим данный ID сервера
- set-charset=charset_name набор символов набора Добавьте, что НАБОР НАЗЫВАЕТ charset_name оператор к выводу
- краткая форма краткая форма Выведите на экран только операторы, содержавшиеся в журнале
- пропустите-gtids [=true|false] пропустить-gtids Не показывайте GTIDs; не рекомендуемый в производстве
- socket=path сокет Для соединений с localhost
- start-datetime=datetime запустить-datetime Считайте двоичный журнал из первого события с меткой времени, равной или позже чем datetime параметр
--start-position=# запустите позиционный Считайте двоичный журнал из первого события с позицией, равной или больше чем параметр
- stop-datetime=datetime остановиться-datetime Прекратите читать двоичный журнал в первом событии с меткой времени, равной или больше чем datetime параметр
- остановиться никогда остановиться никогда Останьтесь соединенными с сервером после чтения последнего двоичного файла журнала
--stop-never-slave-server-id=# "не остановите никогда ведомый идентификатор сервера" Ведомый ID сервера, чтобы сообщить, соединяясь с сервером
--stop-position=# позиционный остановкой Прекратите читать двоичный журнал в первом событии с позицией, равной или больше чем параметр
- "чтобы продлиться журнал" "чтобы продлиться журнал" Не останавливайтесь в конце требуемого двоичного журнала от сервера MySQL, а скорее продолжайте печатать к концу последнего двоичного журнала
- user=user_name, пользователь Имя пользователя MySQL, чтобы использовать, соединяясь с сервером
- многословный Восстановите события строки как SQL-операторы
- verify-binlog-checksum Проверьте контрольные суммы в двоичном журнале
- версия Выведите на экран информацию о версии и выход

Можно также установить следующую переменную при использовании --var_name=value синтаксис:

Можно передать вывод по каналу mysqlbinlog в mysql клиент, чтобы выполнить события, содержавшиеся в двоичном журнале. Этот метод используется, чтобы восстановиться с катастрофического отказа, когда у Вас есть старое резервное копирование (см. Раздел 7.5, "Момент времени (Инкрементное) Восстановление Используя Двоичный Журнал"). Например:

shell> mysqlbinlog binlog.000001 | mysql -u root
        -p

Или:

shell> mysqlbinlog binlog.[0-9]* | mysql -u root
        -p

Если операторы, произведенные mysqlbinlog, могут содержать BLOB значения, они могут вызвать проблемы, когда mysql обрабатывает их. В этом случае вызовите mysql с --binary-mode опция.

Можно также перенаправить вывод mysqlbinlog к текстовому файлу вместо этого, если Вы должны изменить журнал оператора сначала (например, чтобы удалить операторы, которые Вы не хотите выполнять по некоторым причинам). После редактирования файла выполните операторы, которые это содержит при использовании этого как входной к mysql программе:

shell> mysqlbinlog binlog.000001 > tmpfileshell> ... edit tmpfile ...shell> mysql -u
        root -p < tmpfile

Когда mysqlbinlog вызывается с --start-position опция, это выводит на экран только те события со смещением в двоичном журнале, больше чем, или равный данной позиции (данная позиция должна соответствовать запуск одного события). У этого также есть опции, чтобы остановиться и запуститься, когда это видит событие с данной датой и время. Это позволяет Вам выполнить восстановление момента времени, используя --stop-datetime опция (чтобы быть в состоянии сказать, например, "продвигают вперёд мои базы данных к тому, как они были сегодня в 10:30").

Если у Вас есть больше чем один двоичный журнал, чтобы выполниться на сервере MySQL, надежный метод должен обработать их всех использование единственного соединения с сервером. Вот пример, который демонстрирует то, что может быть опасным:

shell> mysqlbinlog binlog.000001 | mysql -u root -p #
        DANGER!!shell> mysqlbinlog binlog.000002 | mysql -u root -p #
        DANGER!!

Обработка двоичного файла регистрирует этот способ использовать многократные соединения с проблемами причин сервера, если первый файл журнала содержит a CREATE TEMPORARY TABLE оператор и второй журнал содержат оператор, который использует временную таблицу. Когда первый процесс mysql завершается, сервер отбрасывает временную таблицу. Когда второй процесс mysql пытается использовать таблицу, отчеты сервера "неизвестная таблица."

Чтобы избежать проблем как это, используйте единственный процесс mysql, чтобы выполнить содержание всех двоичных журналов, которые Вы хотите обработать. Вот один способ сделать так:

shell> mysqlbinlog binlog.000001 binlog.000002 |
        mysql -u root -p

Другой подход должен записать все журналы в единственный файл и затем обработать файл:

shell> mysqlbinlog binlog.000001 >
        /tmp/statements.sqlshell> mysqlbinlog binlog.000002 >>
        /tmp/statements.sqlshell> mysql -u root -p -e "source
        /tmp/statements.sql"

mysqlbinlog может произвести вывод, который воспроизводит a LOAD DATA INFILE работа без исходного файла данных. mysqlbinlog копирует данные во временный файл и пишет a LOAD DATA LOCAL INFILE оператор, который обращается к файлу. Расположение значения по умолчанию каталога, где эти файлы пишутся, специфично для системы. Чтобы определить каталог явно, используйте --local-load опция.

Поскольку mysqlbinlog преобразовывает LOAD DATA INFILE операторы к LOAD DATA LOCAL INFILE операторы (то есть, добавляет это LOCAL), и клиент и сервер, который Вы используете, чтобы обработать операторы, должны быть сконфигурированы с LOCAL возможность включается. См. Раздел 6.1.6, "Вопросы безопасности с LOAD DATA LOCAL".

Предупреждение

Временные файлы, создаваемые для LOAD DATA LOCAL операторы автоматически не удаляются, потому что они необходимы, пока Вы фактически не выполняете те операторы. Следует удалить временные файлы самостоятельно после того, как Вы больше не нуждаетесь в журнале оператора. Файлы могут быть найдены во временном каталоге файла и иметь имена как original_file_name-#-#.