19.1.4.1 Концепции изменения режима репликации
Перед настройкой режима репликации онлайн-сервера важно понять ключевые концепции репликации. Этот раздел объясняет эти концепции и является обязательным для прочтения перед изменением режима репликации онлайн-сервера.
Режимы репликации в MySQL основаны на различных методах идентификации записанных транзакций. Типы транзакций, используемых для репликации, перечислены ниже:
Транзакция GTID идентифицируется глобальным идентификатором транзакции (GTID), который принимает одну из двух форм:
UUID:NUMBERилиUUID:TAG:NUMBER. Каждая транзакция GTID в двоичном журнале предваряетсяGtid_log_event. Транзакцию GTID можно адресовать либо по ее GTID, либо по имени файла, в котором она залогирована, и ее позиции в этом файле.Анонимная транзакция не имеет GTID; MySQL 8.4 гарантирует, что каждая анонимная транзакция в журнале предваряется
Anonymous_gtid_log_event. (В старых версиях MySQL анонимная транзакция не предварялась никаким конкретным событием.) Анонимную транзакцию можно адресовать только по имени файла и позиции.
При использовании GTID вы можете воспользоваться автоматическим позиционированием GTID и автоматическим переключением, а также использовать WAIT_FOR_EXECUTED_GTID_SET(), session_track_gtids и таблицы Performance Schema для мониторинга реплицированных транзакций (см. Раздел 29.12.11, «Performance Schema Replication Tables»).
Транзакция в журнале репликации с источника, работающего на предыдущей версии MySQL, может не предваряться никаким конкретным событием, но после повторного воспроизведения и записи в двоичный журнал реплики она предваряется Anonymous_gtid_log_event.
Для изменения режима репликации онлайн необходимо установить переменные gtid_mode и enforce_gtid_consistency с помощью учетной записи, имеющей достаточные привилегии для установки глобальных системных переменных; см. Раздел 7.1.9.1, «Привилегии на системные переменные». Допустимые значения для gtid_mode перечислены здесь в порядке, с их значениями:
OFF: Могут быть реплицированы только анонимные транзакции.OFF_PERMISSIVE: Новые транзакции являются анонимными; реплицированные транзакции могут быть либо GTID, либо анонимными.ON_PERMISSIVE: Новые транзакции используют GTID; реплицированные транзакции могут быть либо GTID, либо анонимными.ON: Все транзакции должны иметь GTID; анонимные транзакции не могут быть реплицированы.
Возможны ситуации, когда на одних серверах используются анонимные транзакции, а на других — GTID-транзакции в одной топологии репликации. Например, источник, где gtid_mode=ON, может реплицировать данные на реплику, где gtid_mode=ON_PERMISSIVE.
Репликация с источника, использующего gtid_mode=ON, предоставляет возможность использовать автоматическое позиционирование GTID, настроенное с помощью параметра SOURCE_AUTO_POSITION инструкции CHANGE REPLICATION SOURCE TO. Топология репликации влияет на возможность включения автоматического позиционирования, поскольку этот функционал опирается на GTID и несовместим с анонимными транзакциями. Сильно рекомендуется убедиться, что в топологии нет оставшихся анонимных транзакций перед включением автоматического позиционирования; см. Раздел 19.1.4.2, «Включение транзакций GTID онлайн».
Допустимые сочетания gtid_mode и автоматического позиционирования на источнике и реплике показаны в следующей таблице. Значение каждой записи следующее:
Таблица 19.1 Допустимые сочетания режимов gtid_mode источника и реплики
Источник | Источник | Источник | Источник | |
|---|---|---|---|---|
Реплика | Y | Y | N | N |
Реплика | Y | Y | Y | Y* |
Реплика | Y | Y | Y | Y* |
Реплика | N | N | Y | Y* |
Текущее значение gtid_mode также влияет на gtid_next. Следующая таблица демонстрирует поведение сервера для различных сочетаний значений gtid_mode и gtid_next. Значение каждой записи следующее:
ANONYMOUS: Сгенерировать анонимную транзакцию.Error: Сгенерировать ошибку и не выполнитьSET GTID_NEXT.UUID:NUMBER: Сгенерировать GTID с указанным UUID:NUMBER.UUID:TAG:NUMBER: Сгенерировать GTID с указанным UUID:TAG:NUMBER.New GTID: Сгенерировать GTID с автоматически сгенерированным номером.
Таблица 19.2 Допустимые сочетания gtid_mode и gtid_next
gtid_next = AUTOMATIC (двоичный лог включен) |
gtid_next = AUTOMATIC (двоичный лог выключен) |
gtid_next = AUTOMATIC:<TAG>
|
gtid_next = ANONYMOUS
|
gtid_next = <UUID>:<NUMBER>
|
gtid_next = <UUID>:<TAG>:<NUMBER>
| |
|---|---|---|---|---|---|---|
gtid_mode = OFF
| ANONYMOUS | ANONYMOUS | Ошибка | ANONYMOUS | Ошибка | Ошибка |
gtid_mode = OFF_PERMISSIVE
| ANONYMOUS | ANONYMOUS | Ошибка | ANONYMOUS | <UUID>:<NUMBER> | <UUID>:<TAG>:<NUMBER> |
gtid_mode = ON_PERMISSIVE
| Новый GTID | ANONYMOUS | Новый GTID | ANONYMOUS | <UUID>:<NUMBER> | <UUID>:<TAG>:<NUMBER> |
gtid_mode = ON
| Новый GTID | ANONYMOUS | Новый GTID | Ошибка | <UUID>:<NUMBER> | <UUID>:<TAG>:<NUMBER> |
Когда двоичная регистрация не используется, и gtid_next имеет значение AUTOMATIC, то GTID не генерируется.
© 2025 Oracle
Licensed under the GPLv2 License.