Spec-Zone.ru › MySQL 9.2

6.6.9.3 Использование mysqlbinlog для резервного копирования файлов двоичного журнала

По умолчанию, mysqlbinlog считывает файлы двоичного журнала и отображает их содержимое в текстовом формате. Это позволяет легче изучать события в файлах и повторно их выполнять (например, используя вывод в качестве входных данных для mysql). mysqlbinlog может считывать файлы журнала непосредственно из локальной файловой системы или, с помощью опции --read-from-remote-server, подключаться к серверу и запрашивать содержимое двоичного журнала у этого сервера. mysqlbinlog записывает текстовый вывод в стандартный вывод или в файл, имя которого указано в значении опции --result-file=file_name, если эта опция задана.

  • Возможности резервного копирования mysqlbinlog

  • Опции резервного копирования mysqlbinlog

  • Статические и динамические резервные копии

  • Именование выходных файлов

  • Пример: mysqldump + mysqlbinlog для резервного копирования и восстановления

  • Ограничения резервного копирования mysqlbinlog

Возможности резервного копирования 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=id: Идентификатор сервера, который mysqlbinlog сообщает при подключении к серверу. При использовании --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.
https://docs.oracle.com/cd/E17952_01/mysql-8.4-en/mysqlbinlog-backup.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API