### 18.5.2重新启动组

[](<>)

组复制的设计是为了确保数据库服务持续可用，即使由于计划的维护或计划外问题，组中的某些服务器当前无法参与。只要其余成员是该集团的多数成员，他们就可以选举一个新的主要成员，并继续作为一个小组发挥作用。但是，如果复制组的每个成员离开该组，并且组复制将由[`停止组\u复制`](stop-group-replication.html)语句或系统关闭，组现在仅存在于理论上，作为成员上的配置。在这种情况下，要重新创建组，必须通过引导启动开始，好像是第一次启动组一样。

第一次引导组和在第二次或之后执行组之间的区别在于，在后一种情况下，关闭的组成员可能彼此具有不同的事务集，这取决于它们被停止或失败的顺序。如果成员的交易不存在于其他组成员上，则无法加入组。对于组复制，这包括已提交和应用的两个事务，它们位于[`gtid\u已执行`](replication-options-gtids.html#sysvar_gtid_executed)GTID集，以及已认证但尚未应用的交易，这些交易位于`组\u复制应用程序`频道。提交事务的确切点取决于为组设置的事务一致性级别（请参见[第18.5.3节“交易一致性保证”](group-replication-consistency-guarantees.html)). 但是，组复制组成员从不删除已认证的事务，该事务是成员提交事务意图的声明。

因此，必须从最新成员开始重新启动复制组，即执行和认证最多事务的成员。事务较少的成员可以通过分布式恢复连接并赶上它们丢失的事务。假设组的最后一个已知主成员是组中最新成员是不正确的，因为关闭时间比主成员晚的成员可能有更多的事务。因此，必须重新启动每个成员以检查事务、比较所有事务集，并标识最新成员。然后，可以使用此成员引导组。

按照以下步骤，在每个成员关闭后安全地重新启动复制组。

1.  依次为每个组成员，按以下顺序：

    1.  将客户端连接到组成员。如果组复制尚未停止，请发出[`停止组复制`](stop-group-replication.html)语句，并等待组复制停止。

    2.  编辑MySQL服务器配置文件（通常命名为`我的cnf`在Linux和Unix系统上，或`我的伊尼`在Windows系统上），并设置系统变量[`组\u复制\u启动\u打开\u启动=关闭`](group-replication-options.html#sysvar_group_replication_start_on_boot)。此设置防止在启动MySQL服务器时启动组复制，这是默认设置。

        如果无法在系统上更改该设置，则只需允许服务器尝试启动组复制，这将失败，因为组已完全关闭，尚未启动。如果你采取这种方法，不要设置[`组\u复制\u引导\u组=打开`](group-replication-options.html#sysvar_group_replication_bootstrap_group)在这个阶段的任何服务器上。

    3.  启动MySQL服务器实例，并验证组复制尚未启动（或启动失败）。请勿在此阶段启动组复制。

    4.  从小组成员处收集以下信息：

        -   文件的内容[`gtid_已执行`](replication-options-gtids.html#sysvar_gtid_executed)GTID设置。你可以通过发布以下声明来实现这一点：

            ```
            mysql> SELECT @@GLOBAL.GTID_EXECUTED
            ```

        -   服务器上经过认证的事务集`组复制应用程序`频道你可以通过发布以下声明来实现这一点：

            ```
            mysql> SELECT received_transaction_set FROM \
                    performance_schema.replication_connection_status WHERE \
                    channel_name="group_replication_applier";
            ```

2.  从所有组成员收集事务集后，对其进行比较，以确定哪个成员拥有最大的事务集，包括两个已执行的事务([`gtid_已执行`](replication-options-gtids.html#sysvar_gtid_executed))以及经认证的交易（在`组复制应用程序`频道）。可以通过查看GTID手动执行此操作，也可以使用存储函数比较GTID集，如中所述[第17.1.3.8节，“操作GTID的存储函数示例”](replication-gtids-functions.html).

3.  通过将客户端连接到组成员并发出以下语句，使用事务集最大的成员来引导组：

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

    重要的是不要存储设置[`组\u复制\u引导\u组=打开`](group-replication-options.html#sysvar_group_replication_bootstrap_group)在配置文件中，否则当服务器再次重启时，将设置另一个同名组。

4.  要验证该组中是否存在此创始人成员，请对启动该组的成员发出以下声明：

    ```
    mysql> SELECT * FROM performance_schema.replication_group_members;
    ```

5.  通过发布一个[`启动组复制`](start-group-replication.html)关于每一项的声明：

    ```
    mysql> START GROUP_REPLICATION;
    ```

6.  要验证每个成员是否已加入该集团，请对任何成员发布以下声明：

    ```
    mysql> SELECT * FROM performance_schema.replication_group_members;
    ```

7.  当成员重新加入组时，如果您编辑了他们的配置文件以设置[`组\u复制\u启动\u打开\u启动=关闭`](group-replication-options.html#sysvar_group_replication_start_on_boot)，您可以再次编辑它们以设置`在…上`（或删除系统变量，因为`在…上`是默认设置）。
