19.4.1.3 Архивирование источника или реплики, сделав его только для чтения
Возможно выполнить резервное копирование серверов источника или реплики в настройке репликации, получив глобальную блокировку на чтение и манипулируя системной переменной read_only, чтобы изменить состояние сервера на режим только для чтения:
Сделайте сервер только для чтения, чтобы он обрабатывал только запросы на получение данных и блокировал обновления.
Выполните резервное копирование.
Верните сервер в нормальное состояние чтения/записи.
Инструкции в этом разделе помещают сервер, подлежащий резервному копированию, в состояние, безопасное для методов резервного копирования, которые получают данные с сервера, таких как 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.