Spec-Zone.ru › MySQL 5.7

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

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

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

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

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

  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, используя хранимые функции, как описано в Разделе 16.1.3.7, «Примеры хранимых функций для манипулирования 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-5.7-en/group-replication-restarting-group.html

Spec-Zone.ru

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