Spec-Zone.ru › MySQL 5.7

16.1.4.1 Концепции изменения режима репликации онлайн

Для безопасной настройки режима репликации онлайн-сервера важно понимать ключевые концепции репликации. Этот раздел объясняет эти концепции и является обязательным к прочтению перед попыткой изменения режима репликации онлайн-сервера.

Режимы репликации в MySQL используют разные методы для идентификации записываемых транзакций. Типы транзакций, используемые репликацией, следующие:

  • Транзакции GTID идентифицируются глобальным идентификатором транзакции (GTID) в формате UUID:NUMBER. Каждая транзакция GTID в журнале всегда предшествует Gtid_log_event. Транзакции GTID могут быть адресованы как с помощью GTID, так и с помощью имени файла и позиции.

  • Анонимные транзакции не имеют присвоенного GTID, и MySQL гарантирует, что каждая анонимная транзакция в журнале предшествует Anonymous_gtid_log_event. В предыдущих версиях анонимные транзакции не предварялись никаким конкретным событием. Анонимные транзакции могут быть адресованы только по имени файла и позиции.

При использовании GTID можно воспользоваться автоматическим позиционированием и автоматическим переключением, а также использовать WAIT_FOR_EXECUTED_GTID_SET(), session_track_gtids и отслеживать реплицированные транзакции с помощью таблиц Performance Schema. При включенных GTID нельзя использовать sql_slave_skip_counter, вместо этого используйте пустые транзакции.

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

Возможность настройки режима репликации онлайн означает, что переменные gtid_mode и enforce_gtid_consistency теперь являются динамическими и могут быть установлены из оператора верхнего уровня учетной записью, имеющей достаточные привилегии для установки глобальных системных переменных. См. Раздел 5.1.8.1, «Привилегии на системные переменные». В предыдущих версиях обе эти переменные можно было настроить только с помощью соответствующего параметра при запуске сервера, что означало, что для изменения режима репликации требовался перезапуск сервера. Во всех версиях gtid_mode можно было установить в ON или OFF, что соответствовало использованию GTID для идентификации транзакций или нет. Когда gtid_mode=ON, анонимные транзакции реплицировать нельзя, а когда gtid_mode=OFF, реплицировать можно только анонимные транзакции. Начиная с MySQL 5.7.6, переменная gtid_mode имеет два дополнительных состояния, OFF_PERMISSIVE и ON_PERMISSIVE. При gtid_mode=OFF_PERMISSIVE, новые транзакции являются анонимными, но реплицированные транзакции могут быть как GTID, так и анонимными. При gtid_mode=ON_PERMISSIVE, новые транзакции используют GTID, но реплицированные транзакции могут быть как GTID, так и анонимными. Это означает, что возможно иметь топологию репликации, в которой серверы используют как анонимные, так и GTID транзакции. Например, источник с gtid_mode=ON может реплицировать данные на реплику с gtid_mode=ON_PERMISSIVE. Допустимые значения для gtid_mode приведены ниже в заданном порядке:

  • OFF

  • OFF_PERMISSIVE

  • ON_PERMISSIVE

  • ON

Важно отметить, что состояние gtid_mode может быть изменено только на один шаг за раз в соответствии с указанным выше порядком. Например, если gtid_mode в настоящее время установлено в OFF_PERMISSIVE, можно изменить его на OFF или ON_PERMISSIVE, но не на ON. Это делается для того, чтобы процесс изменения с анонимных транзакций на транзакции GTID онлайн корректно обрабатывался сервером. При переключении между gtid_mode=ON и gtid_mode=OFF, состояние GTID (то есть значение gtid_executed) сохраняется. Это гарантирует, что набор GTID, примененный сервером, всегда сохраняется независимо от изменений между типами gtid_mode.

В рамках изменений, внесенных в MySQL 5.7.6, поля, связанные с GTID, были изменены таким образом, чтобы они отображали правильную информацию независимо от текущего выбранного gtid_mode. Это означает, что поля, отображающие наборы GTID, такие как gtid_executed, gtid_purged, RECEIVED_TRANSACTION_SET в таблице Performance Schema replication_connection_status, а также результаты, связанные с GTID, оператора SHOW SLAVE STATUS, теперь возвращают пустую строку, когда GTID отсутствуют. Поля, отображающие один GTID, такие как CURRENT_TRANSACTION в таблице Performance Schema replication_applier_status_by_worker, теперь отображают ANONYMOUS, когда не используются транзакции GTID.

Репликация с источника, использующего gtid_mode=ON, обеспечивает возможность использования автоматического позиционирования, настраиваемого с помощью оператора CHANGE MASTER TO MASTER_AUTO_POSITION = 1;. Используемая топология репликации влияет на возможность включения автоматического позиционирования, поскольку эта функция использует GTID и не совместима с анонимными транзакциями. Если при включенном автоматическом позиционировании встречается анонимная транзакция, генерируется ошибка. Сильно рекомендуется убедиться, что в топологии не осталось анонимных транзакций, прежде чем включать автоматическое позиционирование, см. Раздел 16.1.4.2, «Включение транзакций GTID онлайн». Допустимые комбинации gtid_mode и автоматического позиционирования на источнике и реплике показаны в следующей таблице, где gtid_mode источника показан по горизонтали, а gtid_mode реплики по вертикали:

Таблица 16.1 Допустимые комбинации gtid_mode источника и реплики

Таблица 16.1 Допустимые комбинации gtid_mode источника и реплики

gtid_mode

Источник OFF

Источник OFF_PERMISSIVE

Источник ON_PERMISSIVE

Источник ON

Реплика OFF

Y

Y

N

N

Реплика OFF_PERMISSIVE

Y

Y

Y

Y*

Реплика ON_PERMISSIVE

Y

Y

Y

Y*

Реплика ON

N

N

Y

Y*


В таблице выше записи означают:

  • Y: gtid_mode источника и реплики совместимы

  • N: gtid_mode источника и реплики несовместимы

  • *: можно использовать автоматическое позиционирование

Текущее выбранное значение gtid_mode также влияет на переменную gtid_next. Следующая таблица показывает поведение сервера для различных значений gtid_mode и gtid_next.

Таблица 16.2. Допустимые комбинации gtid_mode и gtid_next

Таблица 16.2. Допустимые комбинации gtid_mode и gtid_next

gtid_next

АВТОМАТИЧЕСКИ

лог бинарных данных включен

АВТОМАТИЧЕСКИ

лог бинарных данных выключен

АНОНИМНЫЙ

UUID:ЧИСЛО

>OFF

АНОНИМНЫЙ

АНОНИМНЫЙ

АНОНИМНЫЙ

Ошибка

>OFF_PERMISSIVE

АНОНИМНЫЙ

АНОНИМНЫЙ

АНОНИМНЫЙ

UUID:ЧИСЛО

>ON_PERMISSIVE

Новый GTID

АНОНИМНЫЙ

АНОНИМНЫЙ

UUID:ЧИСЛО

>ON

Новый GTID

АНОНИМНЫЙ

Ошибка

UUID:ЧИСЛО


В таблице выше значения:

  • ANONYMOUS: сгенерировать анонимную транзакцию.

  • Error: сгенерировать ошибку и не выполнить SET GTID_NEXT.

  • UUID:NUMBER: сгенерировать GTID со значением UUID:ЧИСЛО.

  • New GTID: сгенерировать GTID с автоматически сгенерированным числом.

Если лог бинарных данных выключен и gtid_next установлено в значение AUTOMATIC, то GTID не генерируется. Это соответствует поведению предыдущих версий.

© 2025 Oracle
Licensed under the GPLv2 License.
https://docs.oracle.com/cd/E17952_01/mysql-5.7-en/replication-mode-change-online-concepts.html

Spec-Zone.ru

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