

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 將現有的資料庫執行個體轉換為主動-主動叢集
<a name="mysql-active-active-clusters-converting"></a>

您要遷移至主動-主動叢集的資料庫執行個體之資料庫引擎版本必須為下列其中一個版本：
+ 全部的 MySQL 8.4 版本
+ MySQL 8.0.35 和更高的次要版本

如果您需要升級引擎版本，請參閱 [RDS for MySQL 資料庫引擎的升級](USER_UpgradeDBInstance.MySQL.md)。

如果您要在多個 VPC 中設定具有資料庫執行個體的主動-主動叢集，請務必在 [準備跨 VPC 主動-主動叢集](mysql-active-active-clusters-cross-vpc-prerequisites.md) 中完成先決條件。

請完成下列步驟，將現有的資料庫執行個體遷移至 RDS for MySQL 的主動-主動叢集。

**Topics**
+ [步驟 1：在一或多個自訂參數群組中設定主動-主動叢集參數](#mysql-active-active-clusters-converting-parameter-group)
+ [步驟 2：將資料庫執行個體與已設定必要群組複寫參數的資料庫參數群組建立關聯](#mysql-active-active-clusters-converting-associate-parameter-group)
+ [步驟 3：建立主動-主動叢集](#mysql-active-active-clusters-converting-associate-parameter-groups)
+ [步驟 4：為主動-主動叢集建立其他 RDS for MySQL 資料庫執行個體](#mysql-active-active-clusters-converting-add-db-instances)
+ [步驟 5：在您要轉換的資料庫執行個體上初始化群組](#mysql-active-active-clusters-converting-start-replication-first)
+ [步驟 6：在主動-主動叢集中的其他資料庫執行個體上開始複寫](#mysql-active-active-clusters-converting-start-replication-other)
+ [步驟 7：(建議) 檢查主動-主動叢集的狀態](#mysql-active-active-clusters-converting-view)

## 步驟 1：在一或多個自訂參數群組中設定主動-主動叢集參數
<a name="mysql-active-active-clusters-converting-parameter-group"></a>

主動-主動叢集中的 RDS for MySQL 資料庫執行個體必須與具有必要參數正確設定的自訂參數群組相關聯。如需參數及其各自必要設定的相關資訊，請參閱 [主動-主動叢集的必要參數設定](mysql-active-active-clusters-parameters.md)。

您可以在新的參數群組或現有的參數群組中設定這些參數。不過，為了避免意外影響不屬於主動-主動叢集的資料庫執行個體，強烈建議您建立新的自訂參數群組。主動-主動叢集中的資料庫執行個體可以與相同的資料庫參數群組或不同的資料庫參數群組建立關聯。

您可以使用 AWS 管理主控台 或 AWS CLI 建立新的自訂參數群組。如需詳細資訊，請參閱[在 Amazon RDS 中建立資料庫參數群組](USER_WorkingWithParamGroups.Creating.md)。下列範例會執行 [create-db-parameter-group](https://docs.aws.amazon.com/cli/latest/reference/rds/create-db-parameter-group.html) AWS CLI 命令，以建立名為 RDS for MySQL 8.0 `myactivepg`的自訂資料庫參數群組：

針對 Linux、macOS 或 Unix：

```
aws rds create-db-parameter-group \
  --db-parameter-group-name myactivepg \
  --db-parameter-group-family mysql8.0 \
  --description "Parameter group for active-active clusters"
```

在 Windows 中：

```
aws rds create-db-parameter-group ^
  --db-parameter-group-name myactivepg ^
  --db-parameter-group-family mysql8.0 ^
  --description "Parameter group for active-active clusters"
```

您也可以使用 AWS 管理主控台 或 AWS CLI 來設定自訂參數群組中的參數。如需詳細資訊，請參閱[修改 Amazon RDS 中的資料庫參數群組中的參數](USER_WorkingWithParamGroups.Modifying.md)。

下列範例會執行 [modify-db-parameter-group](https://docs.aws.amazon.com/cli/latest/reference/rds/modify-db-parameter-group.html) AWS CLI 命令，以設定 RDS for MySQL 8.0 的參數。若要搭配 RDS for MySQL 8.4 使用此範例，請將 `slave_preserve_commit_order` 變更為 `replica_preserve_commit_order`。

在 Linux、macOS 或 Unix 中：

```
aws rds modify-db-parameter-group \
  --db-parameter-group-name myactivepg \
  --parameters "ParameterName='rds.group_replication_enabled',ParameterValue='1',ApplyMethod=pending-reboot" \
               "ParameterName='rds.custom_dns_resolution',ParameterValue='1',ApplyMethod=pending-reboot" \
               "ParameterName='enforce_gtid_consistency',ParameterValue='ON',ApplyMethod=pending-reboot" \
               "ParameterName='gtid-mode',ParameterValue='ON',ApplyMethod=pending-reboot" \
               "ParameterName='binlog_format',ParameterValue='ROW',ApplyMethod=immediate" \
               "ParameterName='slave_preserve_commit_order',ParameterValue='ON',ApplyMethod=immediate" \
               "ParameterName='group_replication_group_name',ParameterValue='11111111-2222-3333-4444-555555555555',ApplyMethod=pending-reboot"
```

在 Windows 中：

```
aws rds modify-db-parameter-group ^
  --db-parameter-group-name myactivepg ^
  --parameters "ParameterName='rds.group_replication_enabled',ParameterValue='1',ApplyMethod=pending-reboot" ^
               "ParameterName='rds.custom_dns_resolution',ParameterValue='1',ApplyMethod=pending-reboot" ^
               "ParameterName='enforce_gtid_consistency',ParameterValue='ON',ApplyMethod=pending-reboot" ^
               "ParameterName='gtid-mode',ParameterValue='ON',ApplyMethod=pending-reboot" ^
               "ParameterName='binlog_format',ParameterValue='ROW',ApplyMethod=immediate" ^
               "ParameterName='slave_preserve_commit_order',ParameterValue='ON',ApplyMethod=immediate" ^
               "ParameterName='group_replication_group_name',ParameterValue='11111111-2222-3333-4444-555555555555',ApplyMethod=pending-reboot"
```

## 步驟 2：將資料庫執行個體與已設定必要群組複寫參數的資料庫參數群組建立關聯
<a name="mysql-active-active-clusters-converting-associate-parameter-group"></a>

將資料庫執行個體與您在上一個步驟中所建立或修改的參數群組建立關聯。如需說明，請參閱[將資料庫參數群組與 Amazon RDS 中的資料庫執行個體建立關聯](USER_WorkingWithParamGroups.Associating.md)。

為了讓新的參數設定生效，請重新啟動資料庫執行個體。如需說明，請參閱[在資料庫執行個體](USER_RebootInstance.md)。

## 步驟 3：建立主動-主動叢集
<a name="mysql-active-active-clusters-converting-associate-parameter-groups"></a>

在與資料庫執行個體相關聯的資料庫參數群組中，將 `group_replication_group_seeds` 參數設定為您要轉換之資料庫執行個體的端點。

您可以使用 AWS 管理主控台 或 AWS CLI 來設定 參數。設定此參數後，您不需要重新啟動資料庫執行個體。如需設定參數的詳細資訊，請參閱[修改 Amazon RDS 中的資料庫參數群組中的參數](USER_WorkingWithParamGroups.Modifying.md)。

下列範例會執行 [modify-db-parameter-group](https://docs.aws.amazon.com/cli/latest/reference/rds/modify-db-parameter-group.html) AWS CLI 命令來設定參數：

在 Linux、macOS 或 Unix 中：

```
aws rds modify-db-parameter-group \
  --db-parameter-group-name myactivepg \
  --parameters "ParameterName='group_replication_group_seeds',ParameterValue='myactivedb1.123456789012.us-east-1.rds.amazonaws.com:3306',ApplyMethod=immediate"
```

在 Windows 中：

```
aws rds modify-db-parameter-group ^
  --db-parameter-group-name myactivepg ^
  --parameters "ParameterName='group_replication_group_seeds',ParameterValue='myactivedb1.123456789012.us-east-1.rds.amazonaws.com:3306',ApplyMethod=immediate"
```

## 步驟 4：為主動-主動叢集建立其他 RDS for MySQL 資料庫執行個體
<a name="mysql-active-active-clusters-converting-add-db-instances"></a>

若要為主動-主動叢集建立其他資料庫執行個體，請在您要轉換的資料庫執行個體上執行時間點復原。如需說明，請參閱[使用時間點復原將資料庫執行個體新增至主動-主動叢集](mysql-active-active-clusters-adding.md#mysql-active-active-clusters-adding-pitr)。

主動-主動叢集最多可以有九個資料庫執行個體。在資料庫執行個體上執行時間點復原，直到您取得叢集所需的資料庫執行個體數量為止。當您執行時間點復原時，請務必將要新增的資料庫執行個體與已將 `rds.group_replication_enabled` 設定為 `1` 的資料庫參數群組建立關聯。否則，群組複寫不會在新增的資料庫執行個體上啟動。

## 步驟 5：在您要轉換的資料庫執行個體上初始化群組
<a name="mysql-active-active-clusters-converting-start-replication-first"></a>

初始化群組並開始複寫：

1. 連線到您要在 SQL 用戶端中轉換的資料庫執行個體。如需連線至 RDS for MySQL 資料庫執行個體的詳細資訊，請參閱 [連線至您的 MySQL 資料庫執行個體](USER_ConnectToInstance.md)。

1. 在 SQL 用戶端中，執行下列預存程序，並將 *group\$1replication\$1user\$1password* 取代為 `rdsgrprepladmin` 使用者的密碼。`rdsgrprepladmin` 使用者會保留給主動-主動叢集中的群組複寫連線。此使用者的密碼在主動-主動叢集中的所有資料庫執行個體上都必須相同。

   ```
   call mysql.rds_set_configuration('binlog retention hours', 168); -- 7 days binlog
   call mysql.rds_group_replication_create_user('group_replication_user_password');
   call mysql.rds_group_replication_set_recovery_channel('group_replication_user_password');
   call mysql.rds_group_replication_start(1);
   ```

   此範例會將 `binlog retention hours` 值設定為 `168`，這表示二進位日誌檔案會在資料庫執行個體上保留七天。您可以調整此值以符合您的需求。

   此範例會在 `mysql.rds_group_replication_start` 預存程序中指定 `1`，以使用目前的資料庫執行個體來初始化新群組。

   如需範例中所呼叫之預存程序的詳細資訊，請參閱 [管理主動-主動叢集](mysql-stored-proc-active-active-clusters.md)。

## 步驟 6：在主動-主動叢集中的其他資料庫執行個體上開始複寫
<a name="mysql-active-active-clusters-converting-start-replication-other"></a>

對於主動-主動叢集中的每個資料庫執行個體，請使用 SQL 用戶端連線到執行個體，然後執行下列預存程序。將 *group\$1replication\$1user\$1password* 取代為 `rdsgrprepladmin` 使用者的密碼。

```
call mysql.rds_set_configuration('binlog retention hours', 168); -- 7 days binlog
call mysql.rds_group_replication_create_user('group_replication_user_password');
call mysql.rds_group_replication_set_recovery_channel('group_replication_user_password');
call mysql.rds_group_replication_start(0);
```

此範例會將 `binlog retention hours` 值設定為 `168`，這表示二進位日誌檔案會在每個資料庫執行個體上保留七天。您可以調整此值以符合您的需求。

此範例會在 `mysql.rds_group_replication_start` 預存程序中指定 `0`，以將目前的資料庫執行個體加入現有的群組。

**提示**  
請確定您在主動-主動叢集中所有其他資料庫執行個體上執行這些預存程序。

## 步驟 7：(建議) 檢查主動-主動叢集的狀態
<a name="mysql-active-active-clusters-converting-view"></a>

若要確保叢集的每個成員都已正確設定，請連線至主動-主動叢集中的資料庫執行個體，並執行下列 SQL 命令，以檢查叢集的狀態：

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

您的輸出針對 `MEMBER_STATE` 的每個資料庫執行個體應會顯示 `ONLINE`，如下列範例輸出所示：

```
+---------------------------+--------------------------------------+----------------+-------------+--------------+-------------+----------------+----------------------------+
| CHANNEL_NAME              | MEMBER_ID                            | MEMBER_HOST    | MEMBER_PORT | MEMBER_STATE | MEMBER_ROLE | MEMBER_VERSION | MEMBER_COMMUNICATION_STACK |
+---------------------------+--------------------------------------+----------------+-------------+--------------+-------------+----------------+----------------------------+
| group_replication_applier | 9854d4a2-5d7f-11ee-b8ec-0ec88c43c251 | ip-10-15-3-137 |        3306 | ONLINE       | PRIMARY     | 8.0.35         | MySQL                      |
| group_replication_applier | 9e2e9c28-5d7f-11ee-8039-0e5d58f05fef | ip-10-15-3-225 |        3306 | ONLINE       | PRIMARY     | 8.0.35         | MySQL                      |
| group_replication_applier | a6ba332d-5d7f-11ee-a025-0a5c6971197d | ip-10-15-1-83  |        3306 | ONLINE       | PRIMARY     | 8.0.35         | MySQL                      |
+---------------------------+--------------------------------------+----------------+-------------+--------------+-------------+----------------+----------------------------+
3 rows in set (0.00 sec)
```

如需可能 `MEMBER_STATE` 值的相關資訊，請參閱 MySQL 文件中的[群組複寫伺服器狀態](https://dev.mysql.com/doc/refman/8.0/en/group-replication-server-states.html)。