Spec-Zone.ru › MySQL 8.4

20.5.2 Перезапуск группы

Группа репликации разработана для обеспечения непрерывной доступности службы базы данных, даже если некоторые серверы, образующие группу, временно не могут в ней участвовать из-за планового технического обслуживания или непредвиденных проблем. Пока оставшиеся члены составляют большинство группы, они могут избрать нового первичного сервера и продолжать функционировать как группа. Однако, если все члены группы репликации покинут группу, и группа репликации будет остановлена на каждом члене с помощью оператора STOP GROUP_REPLICATION или при системной остановке, группа существует только теоретически как конфигурация на членах. В этой ситуации для создания группы необходимо запустить ее, выполнив первоначальную настройку, как если бы она запускалась впервые.

Разница между первоначальной настройкой группы и ее настройкой во второй или последующие разы заключается в том, что в последнем случае члены группы, которые были остановлены, могут иметь разные наборы транзакций друг от друга в зависимости от порядка их остановки или сбоев. Член не может присоединиться к группе, если у него есть транзакции, которых нет у других членов группы. Для группы репликации это включает как транзакции, которые были подтверждены и применены, которые находятся в наборе GTID gtid_executed, так и транзакции, которые были проверены, но еще не применены, которые находятся в канале group_replication_applier. Точный момент подтверждения транзакции зависит от уровня согласованности транзакций, установленного для группы (см. Раздел 20.5.3, «Гарантии согласованности транзакций»). Однако член группы репликации никогда не удаляет транзакцию, которая была подтверждена, что является заявлением о намерении члена подтвердить транзакцию.

Поэтому группу репликации необходимо перезапустить, начиная с самого актуального члена, то есть члена, у которого выполнено и подтверждено больше всего транзакций. Члены с меньшим количеством транзакций могут затем присоединиться и наверстать упущенные транзакции посредством распределенного восстановления. Нельзя считать, что последний известный первичный член группы является самым актуальным членом группы, потому что член, который был остановлен позже, чем первичный, может иметь больше транзакций. Поэтому вы должны перезапустить каждый член, чтобы проверить транзакции, сравнить все наборы транзакций и определить самого актуального члена. Этот член может быть использован для первоначальной настройки группы.

Следуйте этой процедуре, чтобы безопасно перезапустить группу репликации после того, как все члены остановлены.

  1. Для каждого члена группы по очереди, в любом порядке:

    1. Подключите клиента к члену группы. Если группа репликации еще не остановлена, выполните оператор STOP GROUP_REPLICATION и подождите, пока группа репликации не остановится.

    2. Откройте файл конфигурации MySQL Server (обычно он называется my.cnf в системах Linux и Unix или my.ini в системах Windows) и установите системную переменную group_replication_start_on_boot=OFF. Эта настройка предотвращает запуск группы репликации при запуске MySQL Server, что является значением по умолчанию.

      Если вы не можете изменить эту настройку в системе, вы можете просто позволить серверу попытаться запустить группу репликации, что приведет к ошибке, так как группа полностью остановлена и еще не настроена. Если вы используете этот подход, не устанавливайте group_replication_bootstrap_group=ON ни на одном сервере на этом этапе.

    3. Запустите экземпляр MySQL Server и проверьте, что группа репликации не запущена (или не удалось запустить). Не запускайте группу репликации на этом этапе.

    4. Соберите следующую информацию от члена группы:

      • Содержимое набора GTID gtid_executed. Вы можете получить это, выполнив следующую команду:

        mysql> SELECT @@GLOBAL.GTID_EXECUTED
        
      • Набор подтвержденных транзакций в канале group_replication_applier. Вы можете получить это, выполнив следующую команду:

        mysql> SELECT received_transaction_set FROM \
                performance_schema.replication_connection_status WHERE \
                channel_name="group_replication_applier";
        
  2. После сбора наборов транзакций от всех членов группы сравните их, чтобы найти члена, у которого самый большой набор транзакций в целом, включая как выполненные транзакции (gtid_executed), так и подтвержденные транзакции (в канале group_replication_applier). Это можно сделать вручную, посмотрев на GTID, или можно сравнить наборы GTID с помощью хранимых функций, как описано в Разделе 19.1.3.8, «Примеры хранимых функций для работы с GTID».

  3. Используйте члена с наибольшим набором транзакций для первоначальной настройки группы, подключившись к члену группы и выполнив следующие команды:

    mysql> SET GLOBAL group_replication_bootstrap_group=ON;
    mysql> START GROUP_REPLICATION;
    mysql> SET GLOBAL group_replication_bootstrap_group=OFF;
    

    Важно не хранить настройку group_replication_bootstrap_group=ON в файле конфигурации, иначе при повторном запуске сервера будет создана вторая группа с тем же именем.

  4. Для проверки того, что группа теперь существует с этим членом-основателем, выполните эту команду на члене, который ее запустил:

    mysql> SELECT * FROM performance_schema.replication_group_members;
    
  5. Добавьте каждого из других членов обратно в группу в любом порядке, выполнив оператор START GROUP_REPLICATION для каждого из них:

    mysql> START GROUP_REPLICATION;
    
  6. Чтобы проверить, что каждый член присоединился к группе, выполните эту команду на любом члене:

    mysql> SELECT * FROM performance_schema.replication_group_members;
    
  7. После того, как члены присоединились к группе, если вы редактировали их файлы конфигурации, чтобы установить group_replication_start_on_boot=OFF, вы можете снова отредактировать их, чтобы установить ON (или удалить системную переменную, так как ON является значением по умолчанию).

© 2025 Oracle
Licensed under the GPLv2 License.
https://docs.oracle.com/cd/E17952_01/mysql-8.4-en/group-replication-restarting-group.html

Spec-Zone.ru

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