20.5.1.1 Изменение первичного узла
В данном разделе описано, как изменить первичный узел в группе с одним первичным узлом, используя функцию group_replication_set_as_primary(), которую можно запустить на любом узле группы. При выполнении этой операции текущий первичный узел становится вторичным только для чтения, а указанный узел группы — первичным с возможностью чтения и записи; это заменяет обычный процесс выбора первичного узла (см. Раздел 20.1.3.1, «Режим с одним первичным узлом»).
Если на существующем первичном узле, помимо каналов групповой репликации, работает стандартный канал репликации «источник-репликация», необходимо остановить этот канал репликации, прежде чем изменить первичный узел. Текущий первичный узел можно определить по столбцу MEMBER_ROLE в таблице Performance Schema replication_group_members.
Если все узлы не работают под одной и той же версией MySQL Server, можно указать новый первичный узел, работающий под самой низкой версией MySQL Server в группе. Эта мера предосторожности применяется для обеспечения совместимости группы с новыми функциями.
Все незавершенные транзакции, ожидаемые группой, должны быть завершены, отменены или прерваны перед завершением операции. При использовании функции можно указать таймаут от 1 до 3600 секунд (60 минут) для транзакций, выполняемых в данный момент. Укажите 0 для отсутствия таймаута (или не указывайте значение таймаута), в этом случае группа ожидает неопределённое время. Если вы не устанавливаете таймаут, нет верхнего предела времени ожидания, и новые транзакции могут начинаться в течение этого времени.
При истечении таймаута для любых транзакций, которые ещё не достигли фазы подтверждения, сессия клиента отключается, чтобы транзакция не продолжилась. Транзакции, которые достигли фазы подтверждения, разрешается завершить. При установке таймаута также предотвращается начало новых транзакций на первичном узле с этого момента. Явно определённые транзакции (с помощью оператора START TRANSACTION или BEGIN) подпадают под действие таймаута, отключения и блокирования входящих транзакций, даже если они не изменяют никакие данные. Для возможности проверки первичного узла во время работы функции разрешается выполнение отдельных операторов, не изменяющих данные, как указано в Разрешенные запросы в соответствии с правилами согласованности.
Введите server_uuid узла, который должен стать новым первичным узлом группы, выполнив следующую команду:
SELECT group_replication_set_as_primary(member_uuid);
Вы можете добавить таймаут, как показано ниже:
SELECT group_replication_set_as_primary(‘00371d66-3c45-11ea-804b-080027337932’, 300)
Для проверки состояния таймаута используйте столбец PROCESSLIST_INFO в таблице Performance Schema threads, например так:
mysql> SELECT NAME, PROCESSLIST_INFO FROM performance_schema.threads
-> WHERE NAME="thread/group_rpl/THD_transaction_monitor"\G
*************************** 1. row ***************************
NAME: thread/group_rpl/THD_transaction_monitor
PROCESSLIST_INFO: Group replication transaction monitor: Stopped client connections
Статус показывает, когда был создан поток мониторинга транзакций, когда новые транзакции были остановлены, когда клиентские подключения с незавершенными транзакциями были отключены и, наконец, когда процесс завершён, и новые транзакции снова разрешены.
Во время выполнения действия вы можете проверить его ход, выполнив показанную здесь команду:
mysql> SELECT event_name, work_completed, work_estimated
-> FROM performance_schema.events_stages_current
-> WHERE event_name LIKE "%stage/group_rpl%"\G
*************************** 1. row ***************************
EVENT_NAME: stage/group_rpl/Primary Election: Waiting for members to turn on super_read_only
WORK_COMPLETED: 3
WORK_ESTIMATED: 5
© 2025 Oracle
Licensed under the GPLv2 License.