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 приведены ниже в заданном порядке:
OFFOFF_PERMISSIVEON_PERMISSIVEON
Важно отметить, что состояние 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 источника и реплики
Источник | Источник | Источник | Источник | |
|---|---|---|---|---|
Реплика | Y | Y | N | N |
Реплика | Y | Y | Y | Y* |
Реплика | Y | Y | Y | Y* |
Реплика | N | N | Y | Y* |
В таблице выше записи означают:
Текущее выбранное значение gtid_mode также влияет на переменную gtid_next. Следующая таблица показывает поведение сервера для различных значений gtid_mode и gtid_next.
Таблица 16.2. Допустимые комбинации gtid_mode и gtid_next
|
АВТОМАТИЧЕСКИ лог бинарных данных включен |
АВТОМАТИЧЕСКИ лог бинарных данных выключен | АНОНИМНЫЙ | UUID:ЧИСЛО | |
|---|---|---|---|---|
| АНОНИМНЫЙ | АНОНИМНЫЙ | АНОНИМНЫЙ | Ошибка |
| АНОНИМНЫЙ | АНОНИМНЫЙ | АНОНИМНЫЙ | UUID:ЧИСЛО |
| Новый GTID | АНОНИМНЫЙ | АНОНИМНЫЙ | UUID:ЧИСЛО |
| Новый 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.