6.6.9.3 Использование mysqlbinlog для резервного копирования файлов двоичного журнала
По умолчанию, mysqlbinlog считывает файлы двоичного журнала и отображает их содержимое в текстовом формате. Это позволяет легче изучать события в файлах и повторно их выполнять (например, используя вывод в качестве входных данных для mysql). mysqlbinlog может считывать файлы журнала непосредственно из локальной файловой системы или, с помощью опции --read-from-remote-server, подключаться к серверу и запрашивать содержимое двоичного журнала у этого сервера. mysqlbinlog записывает текстовый вывод в стандартный вывод или в файл, имя которого указано в значении опции --result-file=, если эта опция задана. file_name
Возможности резервного копирования mysqlbinlog
mysqlbinlog может считывать файлы двоичного журнала и записывать новые файлы с тем же содержимым — то есть в двоичном формате, а не в текстовом. Эта возможность позволяет легко создать резервную копию двоичного журнала в его исходном формате. mysqlbinlog может создать статическую резервную копию, копируя набор файлов журнала и останавливаясь при достижении конца последнего файла. Он также может создавать непрерывную («динамическую») резервную копию, оставаясь подключенным к серверу после достижения конца последнего файла журнала и продолжая копировать новые события по мере их возникновения. В режиме непрерывного резервного копирования mysqlbinlog работает до тех пор, пока не закончится подключение (например, при завершении работы сервера) или mysqlbinlog не будет принудительно завершён. При завершении подключения mysqlbinlog не ждёт и не пытается повторно подключиться, в отличие от реплицирующего сервера. Чтобы продолжить динамическую резервную копию после перезапуска сервера, необходимо также перезапустить mysqlbinlog.
mysqlbinlog может создавать резервные копии как зашифрованных, так и незашифрованных файлов двоичного журнала. Однако копии зашифрованных файлов двоичного журнала, созданные с помощью mysqlbinlog, хранятся в незашифрованном формате.
Опции резервного копирования mysqlbinlog
Для резервного копирования двоичного журнала необходимо вызвать mysqlbinlog как минимум с двумя опциями:
Опция
--read-from-remote-server(или-R) сообщает mysqlbinlog о необходимости подключения к серверу и запроса двоичного журнала. (Это аналогично тому, как реплицирующий сервер подключается к серверу-источнику репликации.)Опция
--rawсообщает mysqlbinlog о необходимости записи не текстового, а двоичного (сырого) вывода.
Вместе с --read-from-remote-server обычно указываются и другие опции: --host указывает, где запущен сервер, а также могут потребоваться опции подключения, такие как --user и --password.
Несколько других опций полезны в сочетании с --raw:
--stop-never: оставаться подключенным к серверу после достижения конца последнего файла журнала и продолжать считывать новые события.--connection-server-id=: Идентификатор сервера, который mysqlbinlog сообщает при подключении к серверу. При использованииid--stop-never, по умолчанию сообщается идентификатор сервера 1. Если это приводит к конфликту с идентификатором реплицирующего сервера или другого процесса mysqlbinlog, используйте--connection-server-idдля указания альтернативного идентификатора сервера. См. Раздел 6.6.9.4, «Указание идентификатора сервера mysqlbinlog».--result-file: Префикс для имён выходных файлов, как описано ниже.
Статические и динамические резервные копии
Для резервного копирования файлов двоичного журнала сервера с помощью mysqlbinlog, необходимо указать имена файлов, которые фактически существуют на сервере. Если вы не знаете имён, подключитесь к серверу и используйте оператор SHOW
BINARY LOGS, чтобы увидеть текущие имена. Предположим, что оператор выдает следующий вывод:
mysql> SHOW BINARY LOGS;
+---------------+-----------+-----------+
| Log_name | File_size | Encrypted |
+---------------+-----------+-----------+
| binlog.000130 | 27459 | No |
| binlog.000131 | 13719 | No |
| binlog.000132 | 43268 | No |
+---------------+-----------+-----------+
С этой информацией вы можете использовать mysqlbinlog для резервного копирования двоичного журнала в текущую директорию следующим образом (ввод каждой команды на отдельной строке):
-
Для создания статической резервной копии от
binlog.000130доbinlog.000132, используйте любую из этих команд:mysqlbinlog --read-from-remote-server --host=
host_name--raw binlog.000130 binlog.000131 binlog.000132 mysqlbinlog --read-from-remote-server --host=host_name--raw --to-last-log binlog.000130Первая команда указывает все имена файлов явно. Вторая команда указывает только имя первого файла и использует
--to-last-logдля чтения до последнего. Разница между этими командами заключается в том, что если сервер откроетbinlog.000133, прежде чем mysqlbinlog достигнет концаbinlog.000132, то первая команда его не прочитает, а вторая — прочитает. -
Для создания динамической резервной копии, в которой mysqlbinlog начнёт с
binlog.000130копировать существующие файлы журнала, а затем останется подключенным для копирования новых событий по мере их генерирования сервером:mysqlbinlog --read-from-remote-server --host=
host_name--raw --stop-never binlog.000130С
--stop-neverнет необходимости указывать--to-last-logдля чтения до последнего файла журнала, так как эта опция подразумевается.
Именование выходных файлов
Без --raw, mysqlbinlog генерирует текстовый вывод, а опция --result-file, если указана, определяет имя единственного файла, в который записывается весь вывод. С --raw, mysqlbinlog записывает один двоичный выходной файл для каждого лог-файла, переданного с сервера. По умолчанию mysqlbinlog записывает файлы в текущей директории с такими же именами, как у исходных лог-файлов. Для изменения имён выходных файлов используйте опцию --result-file. В сочетании с --raw, значение опции --result-file обрабатывается как префикс, который изменяет имена выходных файлов.
Предположим, что на сервере в настоящее время есть файлы двоичных логов с именами binlog.000999 и далее. Если вы используете mysqlbinlog --raw для резервного копирования файлов, опция --result-file создаёт имена выходных файлов, как показано в следующей таблице. Вы можете записать файлы в определённую директорию, начав значение --result-file с пути к директории. Если значение --result-file состоит только из имени директории, значение должно заканчиваться символом разделителя пути. Выходные файлы перезаписываются, если они существуют.
--result-file Опция | Имена выходных файлов |
|---|---|
--result-file=x |
xbinlog.000999 и далее |
--result-file=/tmp/ |
/tmp/binlog.000999 и далее |
--result-file=/tmp/x |
/tmp/xbinlog.000999 и далее |
Пример: mysqldump + mysqlbinlog для резервного копирования и восстановления
Следующий пример описывает простой сценарий, демонстрирующий, как использовать mysqldump и mysqlbinlog вместе для резервного копирования данных и двоичного лога сервера, а также как использовать резервную копию для восстановления сервера в случае потери данных. Пример предполагает, что сервер работает на хосте host_name, а его первый файл двоичного лога называется binlog.000999. Вводите каждую команду в отдельной строке.
Используйте mysqlbinlog для создания непрерывной резервной копии двоичного лога:
mysqlbinlog --read-from-remote-server --host=host_name --raw
--stop-never binlog.000999
Используйте mysqldump для создания файла дампа как моментального снимка данных сервера. Используйте --all-databases, --events и --routines для резервного копирования всех данных, а --source-data=2 для включения текущих координат двоичного лога в файл дампа.
mysqldump --host=host_name --all-databases --events --routines --source-data=2> dump_file
Периодически выполняйте команду mysqldump для создания новых снимков по мере необходимости.
Если произошла потеря данных (например, если сервер неожиданно завершил работу), используйте последнюю дамповую копию для восстановления данных:
mysql --host=host_name -u root -p < dump_file
Затем используйте резервную копию двоичного лога для повторного выполнения событий, записанных после координат, указанных в файле дампа. Предположим, что координаты в файле выглядят так:
-- CHANGE REPLICATION SOURCE TO SOURCE_LOG_FILE='binlog.001002', SOURCE_LOG_POS=27284;
Если последний созданный резервный файл лога называется binlog.001004, повторно выполните события журнала так:
mysqlbinlog --start-position=27284 binlog.001002 binlog.001003 binlog.001004
| mysql --host=host_name -u root -p
Возможно, вам будет проще скопировать файлы резервной копии (файл дампа и файлы двоичного лога) на хост сервера, чтобы облегчить операцию восстановления, или если MySQL не позволяет удалённый root доступ.
Ограничения резервного копирования mysqlbinlog
Резервное копирование двоичного лога с помощью mysqlbinlog подлежит этим ограничениям:
mysqlbinlog не автоматически подключается к серверу MySQL, если соединение разорвано (например, при перезапуске сервера или потере сетевого подключения).
Задержка при резервном копировании аналогична задержке для сервера репликации.
© 2025 Oracle
Licensed under the GPLv2 License.