9.5.1 Восстановление данных по состоянию на определённый момент времени с помощью двоичного лога
В этом разделе объясняется общий принцип использования двоичного лога для выполнения восстановления данных по состоянию на определённый момент времени. Следующий раздел, Раздел 9.5.2, «Восстановление данных по состоянию на определённый момент времени с помощью позиций событий», подробно объясняет процесс с примером.
Во многих примерах в этом и следующем разделе используется клиент mysql для обработки вывода двоичного лога, созданного инструментом mysqlbinlog. Если ваш двоичный лог содержит \0 (null) символы, этот вывод не может быть обработан клиентом mysql, если вы не вызовете его с параметром --binary-mode.
Источником информации для восстановления данных по состоянию на определённый момент времени является набор файлов двоичного лога, созданных после операции полного резервного копирования. Поэтому, чтобы сервер можно было восстановить до определённого момента времени, ведение двоичного лога на нём должно быть включено, что является стандартной настройкой для MySQL 8.4 (см. Раздел 7.4.4, «Двоичный лог»).
Для восстановления данных из двоичного лога необходимо знать имя и местоположение текущих файлов двоичного лога. По умолчанию сервер создаёт файлы двоичного лога в каталоге данных, но путь можно указать с помощью параметра --log-bin, чтобы разместить файлы в другом месте. Для просмотра списка всех файлов двоичного лога используйте это утверждение:
mysql> SHOW BINARY LOGS;
Для определения имени текущего файла двоичного лога выполните следующее утверждение:
mysql> SHOW BINARY LOG STATUS;
Утилита mysqlbinlog преобразует события в файлах двоичного лога из двоичного формата в текстовый, чтобы их можно было просмотреть или применить. Утилита mysqlbinlog имеет параметры для выбора разделов двоичного лога на основе времени событий или позиции событий в логе. См. Раздел 6.6.9, «mysqlbinlog — Утилита для обработки файлов двоичного лога».
Применение событий из двоичного лога приводит к повторному выполнению представляемых ими изменений данных. Это позволяет восстановить изменения данных за заданный промежуток времени. Для применения событий из двоичного лога обработайте вывод mysqlbinlog с помощью клиента mysql:
$> mysqlbinlog binlog_files | mysql -u root -p
Если файлы двоичного лога зашифрованы, mysqlbinlog не может читать их непосредственно, как в предыдущем примере, но может читать их с сервера, используя параметр --read-from-remote-server (-R). Например:
$> mysqlbinlog --read-from-remote-server --host=host_name --port=3306 --user=root --password --ssl-mode=required binlog_files | mysql -u root -p
Здесь использовался параметр --ssl-mode=required для обеспечения защиты данных из файлов двоичного лога во время передачи, поскольку они отправляются в mysqlbinlog в незашифрованном формате.
VERIFY_CA и VERIFY_IDENTITY являются лучшими вариантами, чем REQUIRED для режима SSL, поскольку они помогают предотвратить атаки «человек посередине». Для реализации одной из этих настроек необходимо сначала убедиться, что сертификат CA сервера надёжно доступен всем клиентам, которые его используют в вашей среде, в противном случае возникнут проблемы с доступностью. См. Параметры командной строки для шифрованных подключений.
Просмотр содержимого лога может быть полезен, когда нужно определить время или позиции событий для выбора частичного содержимого лога перед выполнением событий. Чтобы просмотреть события из лога, отправьте вывод mysqlbinlog в программу просмотра страниц:
$> mysqlbinlog binlog_files | more
В качестве альтернативы сохраните вывод в файл и просмотрите файл в текстовом редакторе:
$> mysqlbinlog binlog_files > tmpfile
$> ... edit tmpfile ...
После редактирования файла примените содержимое следующим образом:
$> mysql -u root -p < tmpfile
Если у вас несколько файлов двоичного лога для применения на сервере MySQL, используйте одно подключение для применения содержимого всех файлов двоичного лога, которые вы хотите обработать. Вот один из способов:
$> mysqlbinlog binlog.000001 binlog.000002 | mysql -u root -p
Другой подход — записать весь лог в один файл, а затем обработать этот файл:
$> mysqlbinlog binlog.000001 > /tmp/statements.sql
$> mysqlbinlog binlog.000002 >> /tmp/statements.sql
$> mysql -u root -p -e "source /tmp/statements.sql"
© 2025 Oracle
Licensed under the GPLv2 License.