

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

# 使用外部來源執行個體設定 GTID 式複寫
<a name="MariaDB.Procedural.Replication.GTID"></a>

您可以根據全域交易識別符 (GTID) 從 10.0.24 版或更新版本的外部 MariaDB 執行個體設定複寫到 RDS for MariaDB 資料庫執行個體。在 Amazon RDS 上設定外部來源執行個體和複本時，按照這些準則操作：
+ 監控 RDS for MariaDB 資料庫執行個體 (您的複本) 的容錯移轉事件。若發生容錯移轉，資料庫執行個體 (您的複本) 可能會以不同的網路地址，在新主機上重新建立。如需如何監控容錯移轉事件的資訊，請參閱[使用 Amazon RDS 事件通知](USER_Events.md)。
+ 確定已將二進位日誌 (binlogs) 套用至複本前，都要將二進位日誌保留在來源執行個體上。如此一來，發生故障時，您就可以還原來源執行個體。
+ 對 Amazon RDS 上的 MariaDB 資料庫執行個體啟用自動備份。如果您需要重新同步來源執行個體與複本，開啟自動備份功能可確保您能夠將複本還原至特定時間點。如需備份和時間點還原的相關資訊，請參閱[備份、還原和匯出資料](CHAP_CommonTasks.BackupRestore.md)。

**注意**  
在 MariaDB 資料庫執行個體上啟動複寫所需的許可受到限制，並且不授予 Amazon RDS 主要使用者。因此，您必須使用 Amazon RDS [mysql.rds\$1set\$1external\$1master\$1gtid](mysql_rds_set_external_master_gtid.md) 和 [mysql.rds\$1start\$1replication](mysql-stored-proc-replicating.md#mysql_rds_start_replication) 命令，以設定即時資料庫與您的 RDS for MariaDB 資料庫之間的複寫。

若要在外部來源執行個體與 Amazon RDS 上的 MariaDB 資料庫執行個體之間開始複寫，請使用下列程序。<a name="MariaDB.Procedural.Importing.External.Repl.Procedure"></a>

**啟動複寫**

1. 將來源 MariaDB 執行個體設成唯讀：

   ```
   mysql> FLUSH TABLES WITH READ LOCK;
   mysql> SET GLOBAL read_only = ON;
   ```

1. 取得外部 MariaDB 執行個體的目前 GTID。在作法上可使用 `mysql` 或您選擇的查詢編輯器來執行 `SELECT @@gtid_current_pos;`。

   GTID 的格式為 `<domain-id>-<server-id>-<sequence-id>`。一般 GTID 類似於 **0-1234510749-1728**。如需 GTID 及其組成部分的詳細資訊，請參閱 MariaDB 文件中的[全域交易 ID](http://mariadb.com/kb/en/mariadb/global-transaction-id/)。

1. 使用 `mysqldump` 從外部 MariaDB 執行個體將資料庫複製到 MariaDB 資料庫執行個體。如果是非常大型的資料庫，您可能需要使用 [減少將資料匯入 Amazon RDS for MariaDB 資料庫執行個體時的停機時間](mariadb-importing-data-reduced-downtime.md) 中的程序。

   針對 Linux、macOS 或 Unix：

   ```
   mysqldump \
       --databases database_name \
       --single-transaction \
       --compress \
       --order-by-primary \
       -u local_user \
       -plocal_password | mysql \
           --host=hostname \
           --port=3306 \
           -u RDS_user_name \
           -pRDS_password
   ```

   在 Windows 中：

   ```
   mysqldump ^
       --databases database_name ^
       --single-transaction ^
       --compress ^
       --order-by-primary \
       -u local_user \
       -plocal_password | mysql ^
           --host=hostname ^
           --port=3306 ^
           -u RDS_user_name ^
           -pRDS_password
   ```
**注意**  
請注意 `-p` 選項與輸入的密碼之間不能有空格。  
指定此處所顯示提示以外的密碼，作為安全最佳實務。

   在 `--host` 命令中，使用 `--user (-u)`、`--port`、`-p` 和 `mysql` 選項來指定主機名稱、使用者名稱、連接埠和密碼，以連接至 MariaDB 資料庫執行個體。主機名稱是來自 MariaDB 資料庫執行個體端點的 DNS 名稱，例如 `myinstance.123456789012.us-east-1.rds.amazonaws.com`。端點值可在 Amazon RDS 管理主控台的執行個體詳細資訊中找到。

1. 將來源 MariaDB 執行個體重新設為可寫入。

   ```
   mysql> SET GLOBAL read_only = OFF;
   mysql> UNLOCK TABLES;
   ```

1. 在 Amazon RDS 管理主控台，將代管外部 MariaDB 資料庫之伺服器的 IP 地址，新增至 MariaDB 資料庫執行個體的 VPC 安全群組。如需有關修改 VPC 安全群組的詳細資訊，請參閱《Amazon Virtual Private Cloud 使用者指南》**中的 [VPC 安全群組](https://docs.aws.amazon.com/vpc/latest/userguide/VPC_SecurityGroups.html)。

   IP 地址會在滿足下列條件時變更：
   + 您使用公有 IP 地址供外部來源執行個體和資料庫執行個體通訊。
   + 外部來源執行個體停止後又重新啟動。

   如果符合這些條件，請先驗證 IP 地址再新增它。

   您可能還需要設定本機網路，以允許從 MariaDB 資料庫執行個體的 IP 地址建立的連線，使之能夠與外部 MariaDB 執行個體進行通訊。若要尋找 MariaDB 資料庫執行個體的 IP 地址，請使用 `host` 命令。

   ```
   host db_instance_endpoint
   ```

   主機名稱是來自 MariaDB 資料庫執行個體端點的 DNS 名稱。

1. 使用您選擇的用戶端，連接至外部 MariaDB 執行個體，並建立用於複寫的 MariaDB 使用者。此帳戶只供複寫作業使用，務必限制其存取您的網域，以提升安全性。下列是 範例。

   ```
   CREATE USER 'repl_user'@'mydomain.com' IDENTIFIED BY 'password';
   ```
**注意**  
指定此處所顯示提示以外的密碼，作為安全最佳實務。

1. 若為外部 MariaDB 執行個體，請將 `REPLICATION CLIENT` 和 `REPLICATION SLAVE` 權限授予複寫使用者。舉例來說，若要將所有資料庫的 `REPLICATION CLIENT` 和 `REPLICATION SLAVE` 權限授予您網域中的「`repl_user`」使用者，請發出下列命令。

   ```
   GRANT REPLICATION CLIENT, REPLICATION SLAVE ON *.* TO 'repl_user'@'mydomain.com';
   ```

1. 將 MariaDB 資料庫執行個體變成複本。以主要使用者身分連接至 MariaDB 資料庫執行個體，然後使用 [mysql.rds\$1set\$1external\$1master\$1gtid](mysql_rds_set_external_master_gtid.md) 命令，將外部 MariaDB 資料庫識別為複寫來源執行個體。使用您在步驟 2 決定的 GTID。下列是 範例。

   ```
   CALL mysql.rds_set_external_master_gtid ('mymasterserver.mydomain.com', 3306, 'repl_user', 'password', 'GTID', 1);
   ```
**注意**  
指定此處所顯示提示以外的密碼，作為安全最佳實務。

1. 在 MariaDB 資料庫執行個體上，發出 [mysql.rds\$1start\$1replication](mysql-stored-proc-replicating.md#mysql_rds_start_replication) 命令來開始複寫。

   ```
   CALL mysql.rds_start_replication; 
   ```