Spec-Zone.ru › MySQL 9.2

19.4.1.3 Архивирование источника или реплики, сделав его только для чтения

Возможно выполнить резервное копирование серверов источника или реплики в настройке репликации, получив глобальную блокировку на чтение и манипулируя системной переменной read_only, чтобы изменить состояние сервера на режим только для чтения:

  1. Сделайте сервер только для чтения, чтобы он обрабатывал только запросы на получение данных и блокировал обновления.

  2. Выполните резервное копирование.

  3. Верните сервер в нормальное состояние чтения/записи.

Примечание

Инструкции в этом разделе помещают сервер, подлежащий резервному копированию, в состояние, безопасное для методов резервного копирования, которые получают данные с сервера, таких как mysqldump (см. Раздел 6.5.4, «mysqldump — Программа резервного копирования базы данных»). Не следует пытаться использовать эти инструкции для создания двоичной копии, копируя файлы напрямую, так как сервер может иметь измененные данные в кэше памяти, которые еще не были записаны на диск.

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

  • Сервер источника S1

  • Сервер реплики R1, который имеет S1 в качестве источника

  • Клиент C1, подключенный к S1

  • Клиент C2, подключенный к R1

В любом из этих сценариев операторы для получения глобальной блокировки на чтение и манипулирования переменной read_only выполняются на сервере, подлежащем резервному копированию, и не распространяются на какие-либо реплики этого сервера.

Сценарий 1: Резервное копирование с источником только для чтения

Переведите источник S1 в состояние только для чтения, выполнив эти операторы на нём:

mysql> FLUSH TABLES WITH READ LOCK;
mysql> SET GLOBAL read_only = ON;

Пока S1 находится в состоянии только для чтения, выполняются следующие условия:

  • Запросы на обновления, отправленные клиентом C1 на сервер S1, блокируются, поскольку сервер находится в режиме только для чтения.

  • Запросы на результаты запросов, отправленные клиентом C1 на сервер S1, выполняются успешно.

  • Создание резервной копии на сервере S1 безопасно.

  • Создание резервной копии на сервере R1 небезопасно. Этот сервер всё ещё работает и может обрабатывать двоичный журнал или запросы обновлений, поступающие от клиента C2.

Во время того, как S1 находится в режиме только для чтения, выполните резервное копирование. Например, вы можете использовать mysqldump.

После завершения операции резервного копирования на S1 верните S1 в нормальное рабочее состояние, выполнив эти операторы:

mysql> SET GLOBAL read_only = OFF;
mysql> UNLOCK TABLES;

Хотя создание резервной копии на S1 безопасно (поскольку резервное копирование выполняется), это не является оптимальным с точки зрения производительности, так как клиенты S1 не могут выполнять обновления.

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

Сценарий 2: Резервное копирование с репликой только для чтения

Переведите реплику R1 в состояние только для чтения, выполнив эти операторы на ней:

mysql> FLUSH TABLES WITH READ LOCK;
mysql> SET GLOBAL read_only = ON;

Пока R1 находится в состоянии только для чтения, выполняются следующие условия:

  • Источник S1 продолжает работу, поэтому создание резервной копии на источнике небезопасно.

  • Реплика R1 останавливается, поэтому создание резервной копии на реплике R1 безопасно.

Эти свойства образуют основу популярного сценария резервного копирования: занятость одной реплики в процессе резервного копирования какое-то время не является проблемой, так как она не затрагивает всю сеть, и система работает во время резервного копирования. В частности, клиенты по-прежнему могут выполнять обновления на сервере источника, который остаётся нетронутым действиями по резервному копированию на реплике.

Во время того, как R1 находится в режиме только для чтения, выполните резервное копирование. Например, вы можете использовать mysqldump.

После завершения операции резервного копирования на R1 верните R1 в нормальное рабочее состояние, выполнив эти операторы:

mysql> SET GLOBAL read_only = OFF;
mysql> UNLOCK TABLES;

После того, как реплика возвращена в нормальную работу, она снова синхронизируется с источником, догоняя любые незавершенные обновления из двоичного журнала источника.

© 2025 Oracle
Licensed under the GPLv2 License.
https://docs.oracle.com/cd/E17952_01/mysql-8.4-en/replication-solutions-backups-read-only.html

Spec-Zone.ru

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