9.5.1 Восстановление по состоянию на определённый момент времени с помощью двоичного журнала
В этом разделе объясняется общий принцип использования двоичного журнала для выполнения восстановления по состоянию на определённый момент времени. Следующий раздел, раздел 9.5.2 «Восстановление по состоянию на определённый момент времени с помощью позиций событий», подробно описывает операцию с примером.
Во многих примерах в этом и следующем разделе используется клиент mysql для обработки выходных данных двоичного журнала, созданных mysqlbinlog. Если ваш двоичный журнал содержит \0 (null) символы, эти выходные данные не могут быть обработаны mysql, если не вызвать его с опцией --binary-mode.
Источником информации для восстановления по состоянию на определённый момент времени является набор двоичных журналов, созданных после операции полного резервного копирования. Поэтому, чтобы позволить серверу восстановиться по состоянию на определённый момент времени, необходимо включить ведение двоичного журнала, что является значением по умолчанию для MySQL 9.2 (см. раздел 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.