

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

# 將資料匯入 Amazon RDS for MariaDB 資料庫執行個體
<a name="MariaDB.Procedural.Importing"></a>

您可使用多種不同技術，將資料匯入 RDS for MariaDB 資料庫執行個體。最佳方法取決於多種因素：
+ 資料來源
+ 資料量
+ 一次性匯入或持續性
+ 停機時間

 如要連同資料一起遷移應用程式，則務必考量停機時間。

下表列出將資料匯入 RDS for MariaDB 資料庫執行個體的各種技術：

**注意**  
Amazon RDS 不支援 `mariadb-backup` 或從 Amazon S3 for MariaDB 匯入。


| 來源 | 資料量 | 一次性或持續性 | 應用程式停機時間 | 技術 | 其他資訊 | 
| --- | --- | --- | --- | --- | --- | 
|  內部部署或 Amazon EC2 現有的 MariaDB 資料庫  |  任何  |  持續性  |  極小  |  使用現有 MariaDB 資料庫為複寫來源來設定複寫。 若要設定複寫至 MariaDB 資料庫執行個體：當外部執行個體是 MariaDB 10.0.24 版或更新版本時，您可以使用 MariaDB 全域交易識別符 (GTID)；當執行個體是 10.0.24 以前的版本時，您可以使用 MariaDB 執行個體的二進位日誌座標。MariaDB GTID 的實作不同於 MySQL GTID (在 Amazon RDS 中不支援)。  |  [使用外部來源執行個體設定二進位日誌檔案位置複寫](MySQL.Procedural.Importing.External.ReplMariaDB.md) [減少將資料匯入 Amazon RDS for MariaDB 資料庫執行個體時的停機時間](mariadb-importing-data-reduced-downtime.md)  | 
|  任何現有資料庫  |  任何  |  一次性或持續性  |  極小  |  使用 AWS Database Migration Service 以最少的停機時間遷移資料庫，對於許多資料庫資料庫引擎，則繼續持續複寫。  |  《AWS Database Migration Service 使用者指南》**中的[什麼是 AWS Database Migration Service](https://docs.aws.amazon.com/dms/latest/userguide/Welcome.html) 和[使用與 MySQL 相容的資料庫作為 AWS DMS的目標](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Target.MySQL.html)  | 
|  現有的 MariaDB 資料庫執行個體  |  任何  |  一次性或持續性  |  極小  |  為持續複寫建立僅供讀取複本。升級僅供讀取複本，以便一次性建立新的資料庫執行個體。  |  [使用資料庫執行個體僅供讀取複本](USER_ReadRepl.md)  | 
|  現有的 MariaDB 資料庫  |  小型  |  一次性  |  一些  |  使用命令列公用程式，直接將資料複製到您的 MariaDB 資料庫執行個體。  |  [從外部 MariaDB 資料庫將資料匯入 Amazon RDS for MariaDB 資料庫執行個體](mariadb-importing-data-external-database.md)  | 
|  未存放在現有資料庫的資料  |  中型  |  一次性  |  一些  |  建立一般檔案，並使用 MariaDB `LOAD DATA LOCAL INFILE` 陳述式將其匯入。  |  [匯入任何 Amazon RDS for MariaDB 資料庫執行個體來源的資料](mariadb-importing-data-any-source.md)  | 

**注意**  
`mysql` 系統資料庫包含登入資料庫執行個體與存取資料所需的身分驗證和授權資訊。卸除、更改、重新命名或截斷資料庫執行個體中 `mysql` 資料庫的資料表、資料或其他內容，可能會導致發生錯誤，造成無法存取資料庫執行個體與資料的情形。如果發生這種情況，您可以使用 命令從快照 AWS CLI [https://docs.aws.amazon.com/cli/latest/reference/rds/restore-db-instance-from-db-snapshot.html](https://docs.aws.amazon.com/cli/latest/reference/rds/restore-db-instance-from-db-snapshot.html)還原資料庫執行個體。您可以利用 [https://docs.aws.amazon.com/cli/latest/reference/rds/restore-db-instance-to-point-in-time.html](https://docs.aws.amazon.com/cli/latest/reference/rds/restore-db-instance-to-point-in-time.html) 命令復原資料庫執行個體。

# MariaDB 的匯入資料考量事項
<a name="MariaDB.Procedural.Importing.Advanced"></a>

下列內容包含有關將資料載入 MariaDB 的技術資訊。此內容的目標是熟悉 MariaDB 伺服器架構的使用者。

## 二進位記錄
<a name="MariaDB.Procedural.Importing.Advanced.Log"></a>

啟用二進位記錄可降低資料載入效能，且相較於停用的記錄，最多需要額外四倍的磁碟空間。用於載入資料的交易大小會直接影響系統效能和磁碟空間需求 - 較大的交易需要更多資源。

## 交易大小
<a name="MariaDB.Procedural.Importing.Advanced.Size"></a>

交易大小會影響 MariaDB 資料載入的下列層面：
+ 資源耗用
+ 磁碟空間使用率
+ 繼續程序
+ 復原時間
+ 輸入格式 (一般檔案或 SQL)

本節會說明交易大小如何影響二進位日誌，並解釋為何要在大型資料載入期間停用此功能。您可以設定 Amazon RDS 自動備份保留期間，藉此啟用及停用二進位記錄。非零的數值會啟用二進位日誌，而零則會停用此功能。如需詳細資訊，請參閱[Backup retention period (備份保留期間)](USER_WorkingWithAutomatedBackups.BackupRetention.md)。

我們也會說明大型交易對 InnoDB 的影響，以及為何需要盡量縮減交易大小的原因。

### 小型交易
<a name="MariaDB.Procedural.Importing.Advanced.Log.Small"></a>

若為小型交易，二進位日誌會將載入資料所需的磁碟寫入次數加倍。此效果會嚴重降低其他資料庫作業階段的效能，並增加載入資料所需的時間。經歷的降級部分取決於下列因素：
+ 上傳率
+ 載入期間發生的其他資料庫活動
+ Amazon RDS 資料庫執行個體的容量

二進位日誌在完成備份及移除前，也會佔用與載入資料量約莫相等的磁碟空間。Amazon RDS 會頻繁備份並移除二進位日誌，盡可能避免這種情況。

### 大型交易
<a name="MariaDB.Procedural.Importing.Advanced.Log.Large"></a>

對於大型交易，二進位日誌記錄會將 IOPS 和磁碟用量增加三倍，原因如下：
+ 二進位日誌快取會將交易資料暫時存放在磁碟上。
+ 此快取會隨著交易大小而增加，這會耗用磁碟空間。
+ 當交易 (遞交或轉返) 完成時，系統會將快取複製到二進位日誌。

此程序會建立三份資料副本：
+ 原始資料
+ 磁碟上的快取
+ 最終二進位日誌項目

每個寫入作業都會產生額外的 IO，進一步影響效能。

因此，相較於停用的記錄，二進位記錄需要三倍的磁碟空間。例如，將 10 GiB 的資料載入為單一交易會建立三個複本：
+ 資料表資料的 10 GiB
+ 二進位日誌快取為 10 GiB
+ 二進位日誌檔案為 10 GiB

所需的暫存磁碟空間總計為 30 GiB。

重要的磁碟空間考量：
+ 快取檔案會持續存在，直到工作階段結束或新的交易建立另一個快取為止。
+ 二進位日誌會保留到備份為止，可能會長時間保留 20 GiB (快取和日誌)。

如果您使用 `LOAD DATA LOCAL INFILE` 載入資料，則資料復原會建立第四個複本，以防必須從載入之前進行的備份中復原資料庫。復原期間，MariaDB 會擷取二進位日誌的資料，放入一般檔案中。接著，MariaDB 會執行 `LOAD DATA LOCAL INFILE`。根據上述範例，此復原需要 40 GiB 的總暫存磁碟空間，或是資料表、快取、日誌和本機檔案各 10 GiB。如果沒有至少 40 GiB 的可用磁碟空間，則復原會失敗。

### 最佳化大型資料負載
<a name="MariaDB.Procedural.Importing.AnySource.Advanced.Disable"></a>

對於大型資料載入，請停用二進位記錄，以減少額外負荷和磁碟空間需求。您可以將備份保留期設定為 0，以停用二進位記錄。載入完成後，將備份保留期還原至適當的非零值。如需詳細資訊，請參閱 [修改 Amazon RDS 資料庫執行個體](Overview.DBInstance.Modifying.md) 和設定資料表中的[備份保留期間](USER_ModifyInstance.Settings.md)。

**注意**  
如果資料庫執行個體是僅供讀取複本的來源資料庫執行個體，則不可將備份保留期設為 0。

載入資料之前，建議您建立資料庫快照。如需詳細資訊，請參閱[管理手動備份](USER_ManagingManualBackups.md)。

## InnoDB
<a name="MariaDB.Procedural.Importing.Advanced.InnoDB"></a>

下列復原記錄和復原選項的相關資訊支援將 InnoDB 交易保持為小型，以最佳化資料庫效能。

### 了解 InnoDB 復原記錄
<a name="MariaDB.Procedural.Importing.Advanced.InnoDB.Undo"></a>

復原是一種記錄機制，可啟用交易轉返，並支援多版本並行控制 (MVCC)。

對於 MariaDB 10.11 和更低版本，復原日誌存放在 InnoDB 系統資料表空間 (通常是 ibdata1) 中並予以保留，直到清除執行緒將其移除為止。因此，大型資料載入交易可能會造成系統資料工作表變得無比龐大並佔用磁碟空間，且若未重新重建資料庫，將無法回收這些空間。

對於所有 MariaDB 版本，清除執行緒必須等待移除任何復原日誌，直到最舊的作用中交易遞交或復原為止。如果資料庫在載入期間同時處理其他交易，則即使這些交易皆已遞交，且沒有其他交易需要因為 MVCC 而復原，這些復原也會累積在系統資料表空間中，並且無法移除。在這種情況下，包括唯讀交易在內的所有交易都會變慢。此速度變慢是因為所有交易都會存取任何交易 (而不只是載入交易) 變更的所有資料列。實際上，交易必須掃描復原日誌，避免長時間執行的載入交易在復原日誌清除期間遭到清除。這會影響存取修改資料列的任何作業之效能。

### InnoDB 交易復原選項
<a name="MariaDB.Procedural.Importing.Advanced.InnoDB.Rollback"></a>

雖然 InnoDB 最佳化遞交作業，但大型交易復原速度緩慢。為了加快復原速度，請執行時間點復原或還原資料庫快照。如需詳細資訊，請參閱[時間點復原](USER_PIT.md)及[還原至資料庫執行個體](USER_RestoreFromSnapshot.md)。

## 資料匯入格式
<a name="MariaDB.Procedural.Importing.Advanced.InputFormat"></a>

MariaDB 支援兩種資料匯入格式：一般檔案和 SQL。檢閱每個格式的相關資訊，以判斷符合您需求的最佳選項。

### 一般檔案
<a name="MariaDB.Procedural.Importing.Advanced.InputFormat.FlatFiles"></a>

對於小型交易，使用 `LOAD DATA LOCAL INFILE` 載入一般檔案。相較於使用 SQL，此資料匯入格式可提供下列優點：
+ 較少網路流量
+ 降低資料傳輸成本
+ 減少資料庫處理開銷
+ 更快的處理速度

`LOAD DATA LOCAL INFILE` 會將整個一般檔案載入為一筆交易。將個別檔案的大小保持為小型，以獲得下列優點：
+ **繼續執行功能** – 輕鬆追蹤哪些檔案已載入完成。如果載入期間發生問題，您可以從中止的地方繼續工作。有些資料可能需要重新傳輸到 Amazon RDS，但若使用小型檔案，要重新傳輸的內容就可以減至最少。
+ **平行資料載入** – 如果您有足夠的 IOPS 和網路頻寬進行單一檔案載入，則平行載入可以節省時間。
+ **負載率控制 **– 如果您的資料負載對其他程序造成負面影響，您可以透過增加檔案之間的間隔來控制負載率。

大型交易會減少使用 `LOAD DATA LOCAL INFILE` 匯入資料的優點。當您無法將大量資料分解為較小型的檔案時，請考慮使用 SQL。

### SQL
<a name="MariaDB.Procedural.Importing.Advanced.InputFormat.SQL"></a>

SQL 具備一項一般檔案所缺乏的主要優點，亦即您可輕鬆將交易大小維持在較小的狀態。不過，SQL 載入的時間可能會較一般檔案長得多。此外，在失敗之後，很難判斷要繼續的位置，您無法重新啟動 mariadb-dump 檔案。如果在載入 mariadb-dump 檔案時發生錯誤，您必須修改或替換檔案，才能繼續載入檔案。或者，替代方案是在修正失敗原因後，還原至載入前的時間點，然後重新傳送檔案。如需詳細資訊，請參閱[時間點復原](USER_PIT.md)。

## 將 Amazon RDS 資料庫快照用於資料庫檢查點
<a name="MariaDB.Procedural.Importing.Advanced.Checkpoints"></a>

如果您載入資料的時間很長 (例如數小時或數天) 而沒有二進位記錄，請使用資料庫快照來提供資料安全的定期檢查點。每個資料庫快照都會建立資料庫執行個體的一致複本，以做為系統故障或資料損毀事件期間的復原點。由於資料庫快照速度很快，經常檢查點對負載效能的影響極小。您可以刪除先前的資料庫快照，而不會影響資料庫耐久性或復原功能。如需資料庫快照的詳細資訊，請參閱 [管理手動備份](USER_ManagingManualBackups.md)。

## 縮短資料庫載入時間
<a name="MariaDB.Procedural.Importing.Advanced.LoadTime"></a>

以下是縮短載入時間的其他秘訣：
+ 在將資料載入 MariaDB 資料庫之前，先建立所有次要索引。與其他資料庫系統不同，MariaDB 會在新增或修改次要索引時，重建整個資料表。此程序會建立新的資料表，其中包含索引變更、複製所有資料，以及捨棄原始資料表。
+ 依主索引鍵順序載入資料。對於 InnoDB 資料表，這可以縮短載入時間達 75%–80%，並將資料檔案大小減少 50%。
+ 將 `foreign_key_checks` 設定為 `0` 來停用外部金鑰限制條件。對於使用 `LOAD DATA LOCAL INFILE` 載入的一般檔案，這通常是必要作業。對於任何載入，停用外部金鑰檢查可加速資料載入。載入完成後，將 `foreign_key_checks` 設定為 `1` 並驗證資料，以重新啟用限制條件。
+ 除非接近資源限制，否則請平行載入資料。若要啟用跨多個資料表區段的並行載入，請適時使用分割的資料表。
+ 若要降低 SQL 執行負荷，請將多個 `INSERT` 陳述式合併為單一多值 `INSERT` 作業。`mariadb-dump` 會自動實作此最佳化。
+ 將 `innodb_flush_log_at_trx_commit` 設定為 `0`，以減少 InnoDB 日誌 IO 作業。載入完成後，將 `innodb_flush_log_at_trx_commit` 還原至 `1`。
**警告**  
將 `innodb_flush_log_at_trx_commit` 設定為 `0` 會導致 InnoDB 每秒排清其日誌，而不是在每次遞交時排清日誌。此設定可提高效能，但可能會在系統故障期間造成交易遺失的風險。
+ 如果您要將資料載入至沒有僅供讀取複本的資料庫執行個體，請將 `sync_binlog` 設定為 `0`。載入完成後，將 `sync_binlog parameter` 還原至 `1`。
+ 在資料庫執行個體轉換為多可用區域部署前，將資料載入至單一可用區域資料庫執行個體。如果資料庫執行個體已使用多可用區域部署，則不建議切換至單一可用區域部署來進行資料載入。這麼做只會提供邊際改善

# 從外部 MariaDB 資料庫將資料匯入 Amazon RDS for MariaDB 資料庫執行個體
<a name="mariadb-importing-data-external-database"></a>

您可將資料從現有的 MariaDB 資料庫匯入 RDS for MariaDB 資料庫執行個體。做法是以 [mysqldump](https://dev.mysql.com/doc/refman/8.0/en/mysqldump.html) 或 [mariadb-dump](https://mariadb.com/kb/en/mariadb-dump/) 命令複製資料庫，然後將資料庫直接傳輸到 RDS for MariaDB 資料庫執行個體。`mysqldump` 或 `mariadb-dump` 命令列公用程式普遍用於製作備份，以及將資料從 MariaDB 伺服器傳輸到另一個伺服器上。MariaDB 用戶端軟體皆隨附這個程式。

從 MariaDB 11.0.1 開始，您必須使用 `mariadb-dump` 而非 `mysqldump`。

典型的 `mysqldump` 命令會將資料從外部資料庫移入 Amazon RDS 資料庫執行個體，如下列範例所示。將值取代為您自己的資訊。對於 MariaDB 11.0.1 及更高版本，請將 `mysqldump` 取代為 `mariadb-dump`。

```
mysqldump -u local_user \
    --databases database_name \
    --single-transaction \
    --compress \
    --order-by-primary  \
    --routines=0 \
    --triggers=0 \
    --events=0 \
    -plocal_password | mariadb -u RDS_user \
        --port=port_number \
        --host=host_name \
        -pRDS_password
```

**重要**  
切勿在 `-p` 選項與輸入的密碼間插入空白。  
指定此範例中所顯示提示以外的憑證，作為安全最佳實務。

請確認您了解下列建議和注意事項：
+ 從傾印檔案中排除下列結構描述：
  + `sys`
  + `performance_schema`
  + `information_schema`

  `mysqldump` 和 `mariadb-dump` 公用程式已預設排除這些結構描述。
+ 如需遷移使用者與權限，建議您使用可產生資料控制語言 (DCL) 以重建使用者與權限的工具，例如 [pt-show-grants](https://www.percona.com/doc/percona-toolkit/LATEST/pt-show-grants.html) 公用程式。
+ 若要執行匯入，請確認執行此程序的使用者能夠存取資料庫執行個體。如需詳細資訊，請參閱 [使用安全群組控制存取](Overview.RDSSecurityGroups.md)。

使用的參數如下：
+ `-u local_user` – 用來指定使用者名稱。首次使用此參數時，需在 `--databases` 參數所識別的本機 MariaDB 資料庫中指定使用者帳戶名稱。
+ `--databases database_name` – 在您要匯入至 Amazon RDS 的本機 MariaDB 執行個體上，指定資料庫名稱。
+ `--single-transaction` – 確保從本機資料庫負載的所有資料均與單一時間點一致。如有其他程序在 `mysqldump` 或 `mariadb-dump` 讀取資料時變更資料，使用此參數有助於維持資料完整性。
+ `--compress` – 在本機資料庫的資料傳送到 Amazon RDS 前先完成壓縮，以減少耗用的網路頻寬。
+ `--order-by-primary` – 以資料的主索引鍵排序各資料表的資料，以減少載入時間。
+ `--routines` – 如果預存程序或函數等常式存在於您要複製的資料庫中，則應使用。將參數設定為 `0`，這會在匯入程序期間排除常式。然後，在 Amazon RDS 資料庫中手動重新建立常式。
+ `--triggers` – 如果觸發程序存在於您要複製的資料庫中，則應使用。將參數設定為 `0`，這會在匯入程序期間排除觸發程序。然後，在 Amazon RDS 資料庫中手動重新建立觸發程序。
+ `--events` – 如果事件存在於您要複製的資料庫中，則應使用。將參數設定為 `0`，這會在匯入程序期間排除事件。然後，在 Amazon RDS 資料庫中手動重新建立事件。
+ `-plocal_password` – 用來指定密碼。首次使用此參數時，請指定您以第一個 `-u` 參數識別的使用者帳戶的密碼。
+ `-u RDS_user` – 用來指定使用者名稱。第二次使用此參數時，需在 `--host` 參數所識別的 MariaDB 資料庫執行個體的預設資料庫上，指定使用者帳戶名稱。
+ `--port port_number` – 用於指定 MariaDB 資料庫執行個體的連接埠。預設值為 3306，除非您在建立資料庫執行個體時另行變更。
+ `--host host_name` – 用來指定 Amazon RDS 資料庫執行個體端點的網域名稱系統 (DNS) 名稱，例如 。`myinstance.123456789012.us-east-1.rds.amazonaws.com`您可在 Amazon RDS 主控台的資料庫執行個體詳細資訊中找到端點值。
+ `-pRDS_password` – 用來指定密碼。第二次使用此參數時，需指定第二個 `-u` 參數所識別的使用者帳戶密碼。

必須在 Amazon RDS 資料庫中手動建立預存程序、觸發程序、函數或事件。如果您正在複製的資料庫中存有上述物件，則請在執行 `mysqldump` 或 `mariadb-dump` 時排除這些物件。為此，請在 `mysqldump` 或 `mariadb-dump` 命令中包含以下參數：
+ `--routines=0`
+ `--triggers=0`
+ `--events=0`

**範例**

下列範例會將本機主機上的 `world` 範例資料庫複製到 RDS for MariaDB 資料庫執行個體。將值取代為您自己的資訊。

針對 Linux、macOS 或 Unix：

```
sudo mariadb-dump -u local_user \
    --databases world \
    --single-transaction \
    --compress \
    --order-by-primary  \
    --routines=0 \
    --triggers=0 \
    --events=0 \
    -plocal_password | mariadb -u rds_user \
        --port=3306 \
        --host=my_instance.123456789012.us-east-1.rds.amazonaws.com \
        -pRDS_password
```

在 Windows 中：

在命令提示字元中執行下列命令，方法是對 Windows 程式功能表中的**命令提示字元**按一下滑鼠右鍵，然後選擇**以系統管理員身分執行**。將值取代為您自己的資訊。

```
mariadb-dump -u local_user ^
    --databases world ^
    --single-transaction ^
    --compress ^
    --order-by-primary  ^
    --routines=0 ^
    --triggers=0 ^
    --events=0 ^
    -plocal_password | mariadb -u RDS_user ^
        --port=3306 ^
        --host=my_instance.123456789012.us-east-1.rds.amazonaws.com ^
        -pRDS_password
```

**注意**  
指定此範例中所顯示提示以外的憑證，作為安全最佳實務。

# 減少將資料匯入 Amazon RDS for MariaDB 資料庫執行個體時的停機時間
<a name="mariadb-importing-data-reduced-downtime"></a>

某些情況下，您可能需要將資料從支援即時應用程式的外部 MariaDB 資料庫，匯入 RDS for MariaDB 資料庫執行個體。使用下列程序，將對應用程式可用性的影響降至最低。如果您使用的是超大型資料庫，也可使用這個程序。使用此程序，您可以減少透過網路傳遞的資料量，以降低匯入成本 AWS。

此程序中，您需將資料庫資料的複本傳輸至 Amazon EC2 執行個體，並將資料匯入至新的 Amazon RDS 資料庫。接著，將應用程式重新導向 Amazon RDS 資料庫前，請使用複寫功能將 Amazon RDS 資料庫更新至與即時外部執行個體相同的最新狀態。如果外部執行個體版本是 MariaDB 10.0.24 或更高版本，且目標執行個體為 RDS for MariaDB 時，請根據全域交易識別符 (GTID) 來設定 MariaDB 複寫。若為其他情況，請根據二進位日誌座標設定複寫。建議 GTID 型複寫 (如果您的外部資料庫可以支援它)，因為 GTID 型複寫是更可信賴的方法。如需詳細資訊，請參閱 MariaDB 文件中的 [Global transaction ID](http://mariadb.com/kb/en/mariadb/global-transaction-id/) 一節。

下圖顯示將外部 MariaDB 資料庫匯入 Amazon RDS 上的 MariaDB 資料庫。

![\[工作流程，顯示將外部 MariaDB 資料庫匯入 Amazon RDS 上的 MariaDB 資料庫。\]](http://docs.aws.amazon.com/zh_tw/AmazonRDS/latest/UserGuide/images/MigrateMariaDBToRDS_1.png)


## 任務 1：建立現有資料庫的複本
<a name="mariadb-importing-data-reduced-downtime-copy-database"></a>

要將大量資料遷移至 RDS for MariaDB 資料庫，並將停機時間降至最低，第一步是建立來源資料的複本。

下圖顯示建立 MariaDB 資料庫的備份。

![\[顯示建立 MariaDB 資料庫備份的工作流程。\]](http://docs.aws.amazon.com/zh_tw/AmazonRDS/latest/UserGuide/images/MigrateMariaDBToRDS_2.png)


您可使用 `mysqldump` 或 `mariadb-dump` 公用程式，以 SQL 或分隔符號文字等任一格式建立資料庫備份。在 MariaDB 10.5 中，用戶端稱為 [mariadb-dump](https://mariadb.com/kb/en/mariadb-dump/)。從 MariaDB 11.0.1 開始，您必須使用 `mariadb-dump` 而非 `mysqldump`。建議您在非生產環境中分別測試各種格式，以了解哪種方法能將 `mysqldump` 或 `mariadb-dump` 的執行時間減至最少。

亦建議您衡量 `mysqldump` 或 `mariadb-dump` 的效能與使用分隔符號文字格式載入所帶來的效益。使用分隔符號文字格式的備份會為每個傾印的資料表分別建立定位鍵分隔文字檔案。您可以使用 `LOAD DATA LOCAL INFILE` 命令平行載入這些檔案，縮短匯入資料庫所需的時間。如需詳細資訊，請參閱《從任何來源程序匯入資料》中的 [步驟 5：載入資料](mariadb-importing-data-any-source.md#mariadb-importing-data-any-source-load-data)。

開始備份作業前，請確認在要複製到 Amazon RDS 的 MariaDB 資料庫上設定複寫選項。複寫選項包括開啟二進位日誌及設定獨一無二的伺服器 ID。設定這些選項後，伺服器會開始記錄資料庫交易，並調整至就緒狀態，以擔任後續程序的來源複寫執行個體。

請確認您了解下列建議和注意事項：
+ 對 `mysqldump` 或 `mariadb-dump` 使用 `--single-transaction` 選項，因為它會傾印資料庫的一致狀態。若要確保有效的傾印檔案，請勿在執行 `mysqldump` 或 `mariadb-dump` 時執行資料定義語言 (DDL) 陳述式。您可以為這些作業排定維護時段。
+ 從傾印檔案中排除下列結構描述：
  + `sys`
  + `performance_schema`
  + `information_schema`

  `mysqldump` 或 `mariadb-dump` 公用程式預設已排除這些結構描述。
+ 如需遷移使用者與權限，建議您使用可產生資料控制語言 (DCL) 以重建使用者與權限的工具，例如 [pt-show-grants](https://www.percona.com/doc/percona-toolkit/LATEST/pt-show-grants.html) 公用程式。

### 設定複寫選項
<a name="mariadb-importing-data-reduced-downtime-set-replication-options"></a>

1. 編輯 `my.cnf` 檔案。這個檔案通常位於 `/etc` 底下。

   ```
   sudo vi /etc/my.cnf
   ```

   將 `log_bin` 和 `server_id` 選項新增至 `[mysqld]` 部分。`log_bin` 選項會提供二進位記錄檔的檔案名稱識別符。`server_id` 選項會為來源與複本關係提供伺服器唯一識別碼。

   以下範例顯示 `my.cnf` 檔案的 `[mariadb]` 部分的更新結果。

   ```
   [mariadb]
   log-bin
   server-id=1 
   log-basename=master1
   binlog-format=mixed
   ```

   如需詳細資訊，請參閱 MariaDB 說明文件中的 [Setting the Replication Master Configuration](https://mariadb.com/docs/server/ha-and-performance/standard-replication/setting-up-replication) 一節。

1. 若要使用多可用區域資料庫叢集進行複寫，請啟用 `gtid_strict_mode`。如需詳細資訊，請參閱 MariaDB 文件中的 [gtid\$1strict\$1mode](https://mariadb.com/docs/server/ha-and-performance/standard-replication/gtid#gtid_strict_mode)。

   使用資料庫執行個體複寫不需要啟用 `gtid_strict_mode`。

1. 重新啟動 `mariadb` 服務。

   ```
   sudo service mariadb restart
   ```

### 建立現有資料庫的備份複本
<a name="mariadb-importing-data-reduced-downtime-create-backup"></a>

1. 您可使用 `mysqldump` 或 `mariadb-dump` 公用程式，以 SQL 或分隔符號文字等任一格式建立資料備份。

   如需提升效能並確保資料完整性，請使用 `mysqldump` 和 `mariadb-dump` 的 `--order-by-primary` 和 `--single-transaction` 選項。

   為避免備份中包含 MySQL 系統資料庫，請勿以 `mysqldump` 或 `mariadb-dump` 搭配使用 `--all-databases` 選項。如需詳細資訊，請參閱 MySQL 文件中的[使用 mysqldump 建立資料快照](https://dev.mysql.com/doc/mysql-replication-excerpt/8.0/en/replication-howto-mysqldump.html)。

   如有必要請使用 `chmod`，確保建立備份檔案的目錄可以寫入。
**重要**  
在 Windows 上，以管理員身分執行命令視窗。
   + 若要產生 SQL 輸出，請使用下列命令。對於 MariaDB 10.11 及更低版本，請將 `mariadb-dump` 取代為 `mysqldump`。

     在 Linux、macOS 或 Unix 中：

     ```
     sudo mariadb-dump \
         --databases database_name \
         --master-data=2  \
         --single-transaction \
         --order-by-primary \
         -r backup.sql \
         -u local_user \
         -ppassword
     ```
**注意**  
指定此範例中所顯示提示以外的憑證，作為安全最佳實務。

     在 Windows 中：

     ```
     mariadb-dump ^
         --databases database_name ^
         --master-data=2  ^
         --single-transaction ^
         --order-by-primary ^
         -r backup.sql ^
         -u local_user ^
         -ppassword
     ```
**注意**  
指定此範例中所顯示提示以外的憑證，作為安全最佳實務。
   + 若要產生分隔文字輸出，請使用下列命令。對於 MariaDB 11.01 及更高版本，請將 `mysqldump` 取代為 `mariadb-dump`。

     在 Linux、macOS 或 Unix 中：

     ```
     sudo mysqldump \
         --tab=target_directory \
         --fields-terminated-by ',' \
         --fields-enclosed-by '"' \
         --lines-terminated-by 0x0d0a \
         database_name \
         --master-data=2 \
         --single-transaction \
         --order-by-primary \
         -ppassword
     ```

     在 Windows 中：

     ```
     mysqldump ^
         --tab=target_directory ^
         --fields-terminated-by "," ^
         --fields-enclosed-by """ ^
         --lines-terminated-by 0x0d0a ^
         database_name ^
         --master-data=2 ^
         --single-transaction ^
         --order-by-primary ^
         -ppassword
     ```
**注意**  
指定此範例中所顯示提示以外的憑證，作為安全最佳實務。  
必須在 Amazon RDS 資料庫中手動建立預存程序、觸發程序、函數或事件。如果您正在複製的資料庫中存有上述物件，則請在執行 `mysqldump` 或 `mariadb-dump` 時排除這些物件。為此，請在 `mysqldump` 或 `mariadb-dump` 命令中包含以下參數：。  
`--routines=0`
`--triggers=0`
`--events=0`

     當您執行 `mysqldump` 命令並指定使用分隔符號文字格式時，系統會傳回 `CHANGE MASTER TO` 註解。此註解會包含主控端日誌檔案的名稱與位置。如果外部執行個體不是 MariaDB 10.0.23 或更舊版本，請注意 `MASTER_LOG_FILE` 和 `MASTER_LOG_POS` 的值。設定複寫時您需要這些值。

     MariaDB 版本會傳回下列輸出。

     ```
     -- Position to start replication or point-in-time recovery from
     --
     -- CHANGE MASTER TO MASTER_LOG_FILE='mysql-bin-changelog.000031', MASTER_LOG_POS=107;
     ```

1. 如果您正在使用的外部執行個體是 MariaDB 10.0.24 或更新版本，可使用 GTID 型複寫功能。在外部 MariaDB 執行個體上執行 `SHOW MASTER STATUS` 命令，以取得二進位日誌檔案的名稱和位置，接著在外部 MariaDB 執行個體上執行 `BINLOG_GTID_POS` 命令，將其轉換為 GTID。

   ```
   SELECT BINLOG_GTID_POS('binary_log_file_name', binary_log_file_position);
   ```

   請記下系統傳回的 GTID。您設定複寫時會需要使用。

1. 壓縮複製的資料，以減少複製資料到 Amazon RDS 資料庫所需的網路資源量。請記下備份檔案的大小。決定要建立多大的 Amazon EC2 執行個體時，您需要此資訊。完成後，請使用 GZIP 或您慣用的壓縮公用程式壓縮備份檔。
   + 若要壓縮 SQL 輸出，請使用下列命令：

     ```
     gzip backup.sql
     ```
   + 若要壓縮分隔符號文字輸出，請使用下列命令：

     ```
     tar -zcvf backup.tar.gz target_directory
     ```

## 任務 2：建立 Amazon EC2 執行個體並複製壓縮的資料庫
<a name="mariadb-importing-data-reduced-downtime-create-ec2-copy-database"></a>

比起直接在資料庫執行個體間複製未壓縮的資料，將壓縮的資料庫備份檔複製到 Amazon EC2 執行個體，需要的網路資源較少。資料放進 Amazon EC2 後，即可將資料直接複製到 MariaDB 資料庫。若要節省網路資源的成本，Amazon EC2 執行個體必須與 AWS 區域 Amazon RDS 資料庫執行個體位於相同的 中。在 AWS 區域 與 Amazon RDS 資料庫相同的 中擁有 Amazon EC2 執行個體，也會降低匯入期間的網路延遲。

下圖說明如何將資料庫備份複製到 Amazon EC2 執行個體。

![\[說明如何將資料庫備份複製到 Amazon EC2 執行個體的工作流程。\]](http://docs.aws.amazon.com/zh_tw/AmazonRDS/latest/UserGuide/images/MigrateMariaDBToRDS_3.png)


### 建立 Amazon EC2 執行個體並複製資料
<a name="mariadb-importing-data-reduced-downtime-create-ec2"></a>

1. 在您 AWS 區域 計劃建立 Amazon RDS 資料庫的 中，建立虛擬私有雲端 (VPC)、VPC 安全群組和 VPC 子網路。確認 VPC 安全群組的傳入規則會允許您應用程式連線至 AWS所需的 IP 地址。您可以指定 IP 位址範圍 (例如 `203.0.113.0/24`) 或另一個 VPC 安全群組。您可以使用 [Amazon VPC 主控台](https://console.aws.amazon.com/vpc)來建立及管理 VPC、子網路和安全群組。如需詳細資訊，請參閱《Amazon Virtual Private Cloud 使用者指南》**中的 [Amazon VPC 入門](https://docs.aws.amazon.com/vpc/latest/userguide/what-is-amazon-vpc.html#getting-started)。

1. 開啟 [Amazon EC2 主控台](https://console.aws.amazon.com/ec2)，然後選擇 AWS 區域 以同時包含您的 Amazon EC2 執行個體和 Amazon RDS 資料庫。使用您在步驟 1 中建立的 VPC、子網路和安全群組，啟動 Amazon EC2 執行個體。確認您選取的執行個體類型具有足夠的儲存空間，足以供未壓縮的資料庫備份檔使用。如需 Amazon EC2 執行個體的詳細資訊，請參閱《Amazon Elastic Compute Cloud 使用者指南》**中的 [Amazon EC2 入門](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/EC2_GetStarted.html)。

1.  若要從 Amazon EC2 執行個體連線至 Amazon RDS 資料庫，請編輯您的 VPC 安全群組。新增會指定您 EC2 執行個體私有 IP 地址的傳入規則。您可在 EC2 主控台視窗中，從 **Instance** (執行個體) 窗格的 **Details** (詳細資訊) 分頁標籤找到私有 IP 地址。若要編輯 VPC 安全群組並新增傳入規則，請選取 EC2 主控台導覽窗格中的 **Security Groups** (安全群組)，接著選擇您的安全群組，然後新增 MySQL 或 Aurora 的傳入規則，指定 EC2 執行個體的私有 IP 地址。如需了解如何將傳入規則新增至 VPC 安全群組，請參閱《Amazon Virtual Private Cloud 使用者指南》**中的[安全群組規則](https://docs.aws.amazon.com/vpc/latest/userguide/security-group-rules.html)。

1. 將壓縮的資料庫備份檔從本機系統複製到 Amazon EC2 執行個體。如有必要請使用 `chmod`，確認您擁有 Amazon EC2 執行個體的目標目錄寫入許可。您可使用 `scp` 命令或 Secure Shell (SSH) 用戶端來複製檔案。下列命令是範例 `scp` 命令：

   ```
   scp -r -i key pair.pem backup.sql.gz ec2-user@EC2 DNS:/target_directory/backup.sql.gz
   ```
**重要**  
務必使用安全網路傳輸通訊協定來複製敏感資料。

1. 使用下列命令連線至您的 Amazon EC2 執行個體，並安裝最新更新與 MariaDB 客戶端工具：

   ```
   sudo yum update -y
   sudo yum install mariadb1011-client-utils -y
   ```

   如需詳細資訊，請參閱《Amazon Elastic Compute Cloud 使用者指南》**中的[連線到您的執行個體](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/EC2_GetStarted.html#ec2-connect-to-instance-linux)和 MariaDB 文件中的[MariaDB 連接器](https://mariadb.com/docs/connectors)。

1. 連線到 Amazon EC2 執行個體後，將您的資料庫備份檔解壓縮。下列命令為範例。
   + 若要將 SQL 輸出解壓縮，請使用下列命令：

     ```
     gzip backup.sql.gz -d
     ```
   + 若要將分隔符號文字輸出解壓縮，請使用下列命令：

     ```
     tar xzvf backup.tar.gz
     ```

## 任務 3：建立 MariaDB 資料庫，並從 Amazon EC2 執行個體匯入資料
<a name="mariadb-importing-data-reduced-downtime-create-database-import-data"></a>

透過在 AWS 區域 與 Amazon EC2 執行個體相同的 中建立 RDS for MariaDB 資料庫執行個體，您可以比透過網際網路從 Amazon EC2 匯入資料庫備份檔案更快。

下圖顯示將備份從 Amazon EC2 執行個體匯入 MariaDB 資料庫。

![\[工作流程，顯示將備份從 EC2 執行個體匯入 MariaDB 資料庫。\]](http://docs.aws.amazon.com/zh_tw/AmazonRDS/latest/UserGuide/images/MigrateMariaDBToRDS_4.png)


### 建立 MariaDB 資料庫並匯入資料
<a name="mariadb-importing-data-reduced-downtime-create-database"></a>

1. 判斷需要何種資料庫執行個體類別及多大的儲存空間，才能支援這個 Amazon RDS 資料庫預計的工作負載。在此流程的過程中，決定資料載入程序需要多少空間與處理容量才夠。同時決定處理生產工作負載所需的資源。您可根據來源 MariaDB 資料庫的大小與資源加以估計。如需詳細資訊，請參閱[ 資料庫執行個體類別](Concepts.DBInstanceClass.md)。

1. 在 中建立包含 Amazon EC2 執行個體 AWS 區域 的資料庫執行個體。請遵循 [建立 Amazon RDS 資料庫執行個體](USER_CreateDBInstance.md) 中的指示，並使用下列準則：
   + 指定與您來源資料庫執行個體相容的資料庫引擎版本。
   + 指定與 Amazon EC2 執行個體相同的虛擬私有雲端 (VPC) 和 VPC 安全群組。這種作法可確保您的 Amazon EC2 執行個體與 Amazon RDS 執行個體能在網路上看見彼此。確保您的資料庫執行個體可以公開存取。若要如下一節中說明的方式，以您的來源資料庫設定複寫，必須將資料庫執行個體設為公開存取。
   + 匯入資料庫備份前，請勿設定多個可用區域、備份保留期或僅供讀取複本。匯入完成後，您可以設定生產執行個體的多可用區域和備份保留。

1. 檢視 Amazon RDS 資料庫的預設組態選項。如果資料庫的預設參數群組沒有您想要的組態選項，請尋找其他提供您所需選項的參數群組，或者建立新的參數群組。如需建立參數群組的詳細資訊，請參閱 [Amazon RDS 的參數群組](USER_WorkingWithParamGroups.md)。

1. 以主要使用者身分連線至新的 Amazon RDS 資料庫。建立必要的使用者，以支援需存取資料庫執行個體的管理員、應用程式和服務。Amazon RDS 資料庫的主機名稱是此資料庫執行個體的**端點**值 (不含連接埠號碼)，例如 `mysampledb.123456789012.us-west-2.rds.amazonaws.com`。端點值可在 Amazon RDS 主控台的資料庫詳細資訊中找到。

1. 連線到您的 Amazon EC2 執行個體。如需詳細資訊，請參閱《Amazon Elastic Compute Cloud 使用者指南》**中適用於 Linux 執行個體的[連線到您的執行個體](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/EC2_GetStarted.html#ec2-connect-to-instance-linux)。

1. 使用 `mysql` 命令，以遠端主機的形式從 Amazon EC2 執行個體連線至 Amazon RDS 資料庫。下列命令為範例：

   ```
   mysql -h host_name -P 3306 -u db_master_user -p
   ```

   *host\$1name* 是 Amazon RDS 資料庫端點。

1. 出現 `mysql` 提示時，請執行 `source` 命令，並傳入資料庫傾印檔案的名稱。此命令會將資料載入至 Amazon RDS 資料庫執行個體。
   + 若為 SQL 格式，請使用下列命令：

     ```
     MariaDB [(none)]> source backup.sql;
     ```
   + 若為分隔符號文字格式，請先建立資料庫 (如果它不是您在設定 Amazon RDS 資料庫時建立的預設資料庫)。

     ```
     MariaDB [(none)]> create database database_name;
     MariaDB [(none)]> use database_name;
     ```

     接著建立資料表。

     ```
     MariaDB [(none)]> source table1.sql
     MariaDB [(none)]> source table2.sql
     etc...
     ```

     然後匯入資料。

     ```
     MariaDB [(none)]> LOAD DATA LOCAL INFILE 'table1.txt' INTO TABLE table1 FIELDS TERMINATED BY ',' ENCLOSED BY '"' LINES TERMINATED BY '0x0d0a';
     MariaDB [(none)]> LOAD DATA LOCAL INFILE 'table2.txt' INTO TABLE table2 FIELDS TERMINATED BY ',' ENCLOSED BY '"' LINES TERMINATED BY '0x0d0a';
     etc...
     ```

     若要提升效能，您可透過多個連線平行執行這些操作，如此您的所有資料表就會建立並隨後載入。
**注意**  
在您一開始傾印資料表時，如果有透過 `mysqldump` 或 `mariadb-dump` 使用任何資料格式設定選項，請確認 `LOAD DATA LOCAL INFILE` 使用相同選項，才能確保資料檔案內容可順利解讀。

1. 在匯入的資料庫中，對一兩個資料表執行簡單的 `SELECT` 查詢，確認匯入作業執行成功。

如果您不再需要此程序中使用的 Amazon EC2 執行個體，請終止 EC2 執行個體以減少 AWS 資源用量。若要終止 EC2 執行個體，請參閱《Amazon Elastic Compute Cloud 使用者指南》**中的[終止執行個體](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/terminating-instances.html#terminating-instances-console)。

## 任務 4：從外部資料庫將資料複寫到新的 Amazon RDS 資料庫
<a name="mariadb-importing-data-reduced-downtime-replicate-data"></a>

在複製資料並傳輸至 MariaDB 資料庫期間，您的來源資料庫可能就會完成更新。您可以使用複寫功能，讓複製的資料庫保持在與來源資料庫相同的最新狀態。

![\[工作流程，顯示將資料從外部 Amazon RDS 資料庫複寫到 Amazon RDS 上的資料庫。\]](http://docs.aws.amazon.com/zh_tw/AmazonRDS/latest/UserGuide/images/MigrateMariaDBToRDS_5.png)


在 Amazon RDS 資料庫上啟動複寫功能所需的許可有其限制，不供 Amazon RDS 主要使用者使用。因此，請使用適當的 Amazon RDS 預存程序：
+ [mysql.rds\$1set\$1external\$1master](mysql-stored-proc-replicating.md#mysql_rds_set_external_master) 
+ [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) 開始複寫

### 啟動複寫
<a name="mariadb-importing-data-reduced-downtime-start-replication"></a>

在任務 1 中，[當您設定複寫選項時](#mariadb-importing-data-reduced-downtime-set-replication-options)，您會開啟二進位記錄，並為來源資料庫設定唯一的伺服器 ID。現在，您可將 Amazon RDS 資料庫設為複本，並將即時資料庫設為來源複寫執行個體。

1. 在 Amazon RDS 主控台中，將託管來源資料庫之伺服器的 IP 位址，新增至 Amazon RDS 資料庫的 VPC 安全群組。如需 VPC 安全群組的詳細資訊，請參閱《Amazon Virtual Private Cloud 使用者指南》**中的[設定安全群組規則](https://docs.aws.amazon.com/vpc/latest/userguide/working-with-security-group-rules.html)。

   您可能還需要設定本機網路，以允許從 Amazon RDS 資料庫的 IP 位址建立連線，使其能與來源執行個體通訊。若要尋找 Amazon RDS 資料庫的 IP 位址，請使用 `host` 命令：

   ```
   host host_name
   ```

   *host\$1name* 是來自 Amazon RDS 資料庫端點的 DNS 名稱，例如 `myinstance.123456789012.us-east-1.rds.amazonaws.com`。您可在 Amazon RDS 主控台的資料庫執行個體詳細資訊中找到端點值。

1. 使用您選擇的用戶端，連線至來源執行個體，然後建立複寫作業所需的使用者。此帳戶只供複寫作業使用，務必限制其存取您的網域，以提升安全性。下列命令為範例：

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

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

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

1. 如果您使用 SQL 格式建立備份檔，且外部執行個體並非 MariaDB 10.0.24 或更新版本，請透過執行下列命令來查看該檔案的內容：

   ```
   cat backup.sql
   ```

   該檔案包括 `CHANGE MASTER TO` 註解，內含主控端日誌檔案的名稱與位置。若您使用 `--master-data` 命令的 `mysqldump` 選項，備份檔內就會包含這個註解。請注意 `MASTER_LOG_FILE` 和 `MASTER_LOG_POS` 的值。

   ```
   --
   -- Position to start replication or point-in-time recovery from
   --
   
   -- CHANGE MASTER TO MASTER_LOG_FILE='mysql-bin-changelog.000031', MASTER_LOG_POS=107;
   ```

   如果您使用分隔符號文字格式來建立備份檔，且外部執行個體並非 MariaDB 10.0.24 或更高版本，您應該已在任務 1 [當您建立現有資料庫的備份複本時](#mariadb-importing-data-reduced-downtime-create-backup)中的步驟 1 時，就取得二進位日誌座標。

   如果外部執行個體是 MariaDB 10.0.24 或更高版本，您應該已在任務 1 [當您建立現有資料庫的備份複本時](#mariadb-importing-data-reduced-downtime-create-backup)中的步驟 2 時，就取得 GTID，以此啟動複寫作業。

1. 使 Amazon RDS 資料庫成為複本。如果外部執行個體並非 MariaDB 10.0.24 或更高版本，請以主要使用者身分連線至 Amazon RDS 資料庫，接著使用 [mysql.rds\$1set\$1external\$1master](mysql-stored-proc-replicating.md#mysql_rds_set_external_master) 預存程序找到來源資料庫，將其視為來源複寫執行個體。

   如果您有 SQL 格式的備份檔，請使用您在步驟 4 中所確定的主控端日誌檔案名稱和主控端日誌位置。如果您使用的是分隔符號文字格式，請使用您在建立備份檔時確定的名稱和位置。下列命令為範例：

   ```
   CALL mysql.rds_set_external_master ('myserver.mydomain.com', 3306,
       'repl_user', 'password', 'mysql-bin-changelog.000031', 107, 1);
   ```
**注意**  
指定此處所顯示提示以外的憑證，作為安全最佳實務。

   如果外部執行個體是 MariaDB 10.0.24 或更高版本，請以主要使用者身分連線至 Amazon RDS 資料庫，接著使用 [mysql.rds\$1set\$1external\$1master\$1gtid](mysql_rds_set_external_master_gtid.md) 預存程序找到來源資料庫，將其視為來源複寫執行個體。請使用您在任務 1 [當您建立現有資料庫的備份副本時](#mariadb-importing-data-reduced-downtime-create-backup)中的步驟 2 中確定的 GTID。下列命令為範例：

   ```
   CALL mysql.rds_set_external_master_gtid ('source_server_ip_address', 3306, 'ReplicationUser', 'password', 'GTID', 1); 
   ```

   `source_server_ip_address` 是來源複寫執行個體的 IP 地址。目前不支援 EC2 私有 DNS 地址。
**注意**  
指定此處所顯示提示以外的憑證，作為安全最佳實務。

1. 在 Amazon RDS 資料庫上，若要開始複寫，請執行下列使用 [mysql.rds\$1start\$1replication](mysql-stored-proc-replicating.md#mysql_rds_start_replication) 預存程序的命令：

   ```
   CALL mysql.rds_start_replication;
   ```

1. 在 Amazon RDS 資料庫上，執行 [SHOW REPLICA STATUS](https://dev.mysql.com/doc/refman/8.0/en/show-replica-status.html) 命令，以判斷複本與來源複寫執行個體的狀態是否一致。`SHOW REPLICA STATUS` 命令的結果包括 `Seconds_Behind_Master` 欄位。若 `Seconds_Behind_Master` 欄位傳回的值為 0，即表示複本已是來源複寫執行個體的最新狀態。

   若為 MariaDB 10.5、10.6、10.11、11.4 或 11.8 資料庫執行個體，請使用 [mysql.rds\$1replica\$1status](mysql_rds_replica_status.md) 預存程序，而非執行 MySQL 命令。

1. 在 Amazon RDS 資料庫處於最新狀態之後，請開啟自動備份，如此您就可以在需要時還原該資料庫。您可以使用 [Amazon RDS 主控台](https://console.aws.amazon.com/rds/)，開啟或修改 Amazon RDS 資料庫的自動備份。如需詳細資訊，請參閱[備份簡介](USER_WorkingWithAutomatedBackups.md)。

## 任務 5：將即時應用程式重新導向至 Amazon RDS 執行個體
<a name="mariadb-importing-data-reduced-downtime-redirect-app"></a>

在 MariaDB 資料庫處於來源複寫執行個體的最新狀態之後，現在您可以更新即時應用程式，以使用 Amazon RDS 執行個體。

![\[顯示停止複寫並將即時應用程式導向至 Amazon RDS 上資料庫的工作流程。\]](http://docs.aws.amazon.com/zh_tw/AmazonRDS/latest/UserGuide/images/MigrateMariaDBToRDS_6.png)


### 將您的即時應用程式重新導向至 MariaDB 資料庫並停止複寫
<a name="mariadb-importing-data-reduced-downtime-redirect-app-stop-app"></a>

1. 若要新增 Amazon RDS 資料庫的 VPC 安全群組，請新增託管應用程式之伺服器的 IP 地址。如需有關修改 VPC 安全群組的詳細資訊，請參閱《Amazon Virtual Private Cloud 使用者指南》**中的[設定安全群組規則](https://docs.aws.amazon.com/vpc/latest/userguide/working-with-security-group-rules.html)。

1. 確認 [SHOW REPLICA STATUS](https://dev.mysql.com/doc/refman/8.0/en/show-replica-status.html) 命令結果中的 `Seconds_Behind_Master` 欄位為 0，這表示複本與來源複寫執行個體保持同步。

   ```
   SHOW REPLICA STATUS;
   ```

   若為 MariaDB 10.5、10.6、10.11、11.4 或 11.8 資料庫執行個體，請使用 [mysql.rds\$1replica\$1status](mysql_rds_replica_status.md) 程序，而非執行 MySQL 命令。

1. 交易完成時關閉所有與此來源的連線。

1. 更新您的應用程式，以使用 Amazon RDS 資料庫。這裡所謂的更新，通常包括變更連線設定，以識別 Amazon RDS 資料庫的主機名稱和連接埠、要與其連線的使用者帳戶和密碼，以及要使用的資料庫。

1. 連線到資料庫執行個體。

1. 執行下列使用 [mysql.rds\$1stop\$1replication](mysql-stored-proc-replicating.md#mysql_rds_stop_replication) 預存程序的命令來停止 Amazon RDS 執行個體的複寫：

   ```
   CALL mysql.rds_stop_replication;
   ```

1. 在您的 Amazon RDS 資料庫上執行下列使用 [mysql.rds\$1reset\$1external\$1master](mysql-stored-proc-replicating.md#mysql_rds_reset_external_master) 預存程序來重設複寫組態，使得此執行個體不再視為複本。

   ```
   CALL mysql.rds_reset_external_master;
   ```

1. 開啟其他 Amazon RDS 功能，例如多可用區域支援和僅供讀取複本。如需詳細資訊，請參閱[設定及管理 Amazon RDS 的多可用區域部署](Concepts.MultiAZ.md)及[使用資料庫執行個體僅供讀取複本](USER_ReadRepl.md)。

# 匯入任何 Amazon RDS for MariaDB 資料庫執行個體來源的資料
<a name="mariadb-importing-data-any-source"></a>

使用 Amazon RDS，您可以將現有的 MariaDB 資料從任何來源遷移至 RDS for MariaDB 資料庫執行個體。您可以將資料從內部部署資料庫、其他雲端提供者或現有的 RDS for MariaDB 資料庫執行個體傳輸到目標 RDS for MariaDB 資料庫執行個體。透過此功能，您可以合併資料庫、實作災難復原解決方案，或是從自我管理的資料庫轉換。常見案例包括從自我託管 MariaDB 伺服器移至完全受管的 Amazon RDS 資料庫執行個體、將多個 MariaDB 資料庫合併為單一資料庫執行個體，或使用生產資料建立測試環境。以下各節提供使用 `mariadb-dump`、備份檔案或複寫等方法來匯入 MariaDB 資料的逐步說明。

## 步驟 1：建立一般檔案，其中需包含要載入的資料
<a name="mariadb-importing-data-any-source-create-flat-files"></a>

使用逗號分隔值 (CSV) 等通用格式存放要載入的資料。每個資料表必須擁有各自的檔案 - 您無法將不同資料表的資料結合為同一檔案。以對應資料表的相同名稱命名各個檔案。副檔名可隨意指定。例如，如果資料表名稱為 `sales`，則檔案名稱可以是 `sales.csv` 或 `sales.txt`。

可以的話，依照預計載入之資料表的主索引鍵排序資料。這樣可以大幅縮短載入時間，並將磁碟儲存空間需求降至最低。

檔案越小，此程序的速度就會越快，效率越高。如有個別檔案未壓縮前的大小大於 1 GiB，請將檔案分割成多個檔案，再分別載入。

在泛 Unix 系統 (包括 Linux) 上，使用 `split` 命令。舉例來說，下列命令會將 `sales.csv` 檔案分割成多個小於 1 GiB 的檔案，且只會於分行處分割 (-C 1024m)。新檔案的名稱包含遞增數值尾碼。下列命令會產生具有 `sales.part_00` 和 `sales.part_01` 等名稱的檔案。

```
split -C 1024m -d sales.csv sales.part_ 
```

其他作業系統也有類似的公用程式可用。

您可以將一般檔案存放在任何位置。不過，當您在[步驟 5](#mariadb-importing-data-any-source-load-data) 中載入資料時，您必須從檔案所在的相同位置叫用 `mysql` Shell，或使用您在執行 `LOAD DATA LOCAL INFILE` 時的檔案絕對路徑。

## 步驟 2：禁止任何應用程式存取目標資料庫執行個體
<a name="mariadb-importing-data-any-source-stop-apps"></a>

開始載入大量資料前，請先禁止所有應用程式活動存取您預計要載入資料的目標資料庫執行個體。如果有其他工作階段會修改要載入或參考的資料表，我們尤其建議執行這項操作。這麼做可以降低載入期間違反限制條件的風險，並提升載入效能。此外，還可以將資料庫執行個體還原至載入前的時間點，以免遺失非載入作業程序所做的變更。

當然，這可能無法盡如人願，或可能不切實際。如果您無法在載入作業前停止應用程式存取資料庫執行個體，請採取因應措施，確保資料的可用性與完整性。所需的確切步驟會因特定使用案例與現場需求而異。

## 步驟 3：建立資料庫快照
<a name="mariadb-importing-data-any-source-create-snapshot"></a>

如果您預計要載入資料的新資料庫執行個體內沒有資料，您可略過此步驟。否則，建議您在資料載入前後，都要建立目標 Amazon RDS 資料庫執行個體的資料庫快照。Amazon RDS 資料庫快照是您資料庫執行個體的完整備份，可用來將您的資料庫執行個體還原至已知狀態。啟動資料庫快照作業時，資料庫執行個體的輸入/輸出操作會在資料庫備份時暫停。

若在載入前先建立資料庫快照，一旦有需要，就能將資料庫還原至載入前的狀態。若能在載入後立即拍攝資料庫快照，萬一發生事故，就不必重新載入資料。您也可以在載入後使用資料庫快照將資料匯入新的資料庫執行個體中。

下列範例會執行 AWS CLI [create-db-snapshot](https://docs.aws.amazon.com/cli/latest/reference/rds/create-db-snapshot.html) 命令來建立`AcmeRDS`執行個體的資料庫快照，並為資料庫快照提供識別符 `"preload"`。

針對 Linux、macOS 或 Unix：

```
aws rds create-db-snapshot \
    --db-instance-identifier AcmeRDS \
    --db-snapshot-identifier preload
```

在 Windows 中：

```
aws rds create-db-snapshot ^
    --db-instance-identifier AcmeRDS ^
    --db-snapshot-identifier preload
```

您也可以使用從資料庫快照還原的功能，建立試轉用的測試資料庫執行個體，或復原載入期間所做的變更。

請注意，如從資料庫快照還原資料庫，系統會建立新的資料庫執行個體，且如同所有資料庫執行個體一樣，該執行個體會具備獨一無二的識別碼與端點。若要還原資料庫執行個體，且不會變更端點，請先刪除資料庫執行個體，如此才能重新使用端點。

舉例來說，若要建立試轉或其他測試所需的資料庫執行個體，您必須賦予資料庫執行個體專屬識別符。在此例中，識別符是 `AcmeRDS-2`。範例使用與 `AcmeRDS-2` 關聯的端點連線至資料庫執行個體。如需詳細資訊，請參閱 [restore-db-instance-from-db-snapshot](https://docs.aws.amazon.com/cli/latest/reference/rds/restore-db-instance-from-db-snapshot.html)。

對於 Linux、macOS 或 Unix：

```
aws rds restore-db-instance-from-db-snapshot \
    --db-instance-identifier AcmeRDS-2 \
    --db-snapshot-identifier preload
```

在 Windows 中：

```
aws rds restore-db-instance-from-db-snapshot ^
    --db-instance-identifier AcmeRDS-2 ^
    --db-snapshot-identifier preload
```

若要重新使用現有端點，請先刪除資料庫執行個體，然後指定相同的識別碼給還原的資料庫。如需詳細資訊，請參閱 [delete-db-instance](https://docs.aws.amazon.com/cli/latest/reference/rds/delete-db-instance.html)。

下列範例也會在刪除資料庫執行個體前擷取其最終資料庫快照。此為選用操作，但建議您採用。

對於 Linux、macOS 或 Unix：

```
aws rds delete-db-instance \
    --db-instance-identifier AcmeRDS \
    --final-db-snapshot-identifier AcmeRDS-Final

aws rds restore-db-instance-from-db-snapshot \
    --db-instance-identifier AcmeRDS \
    --db-snapshot-identifier preload
```

在 Windows 中：

```
aws rds delete-db-instance ^
    --db-instance-identifier AcmeRDS ^
    --final-db-snapshot-identifier AcmeRDS-Final

aws rds restore-db-instance-from-db-snapshot ^
    --db-instance-identifier AcmeRDS ^
    --db-snapshot-identifier preload
```

## 步驟 4 (選用)：關閉 Amazon RDS 自動備份
<a name="mariadb-importing-data-any-source-turn-off-automated-backups"></a>

**警告**  
如果您需要執行時間點復原，請勿關閉自動備份。

關閉自動備份可產生最佳化效能，但並非資料載入作業的必要功能。關閉自動備份會清除所有現有的備份。因此，在您關閉自動備份後，就無法執行時間點復原。關閉自動備份不會影響手動資料庫快照。所有現有手動資料庫快照仍可用於復原作業。

關閉自動備份功能可將載入時間減少約 25%，並可降低載入期間所需的儲存空間。如果您預計載入資料的新資料庫執行個體不含任何資料，則要加快載入速度，並避免備份產生額外的儲存空間需求，關閉備份功能是最簡單的方式。不過，在某些情況下，您可能會計劃載入已包含資料的資料庫執行個體。如果是這樣，請權衡關閉備份功能的好處，以及無法執行時間點復原功能的影響。

預設情況下，資料庫執行個體會開啟自動備份功能 (保留期為 1 天)。若要關閉自動備份，請將備份保留期設為零。載入後，您可以將備份保留期設為非零的值，以重新開啟自動備份功能。若要開啟或關閉備份功能，Amazon RDS 會關閉資料庫執行個體，然後重新啟動，以便開啟或關閉 MariaDB 記錄功能。

執行 AWS CLI `modify-db-instance`命令將備份保留期設定為零，並立即套用變更。將保留期設為 0 需要重新啟動資料庫執行個體，請靜待重新啟動作業完成，再繼續操作。如需詳細資訊，請參閱 [modify-db-instance](https://docs.aws.amazon.com/cli/latest/reference/rds/modify-db-instance.html)。

對於 Linux、macOS 或 Unix：

```
aws rds modify-db-instance \
    --db-instance-identifier AcmeRDS \
    --apply-immediately \
    --backup-retention-period 0
```

在 Windows 中：

```
aws rds modify-db-instance ^
    --db-instance-identifier AcmeRDS ^
    --apply-immediately ^
    --backup-retention-period 0
```

您可以使用 AWS CLI [describe-db-instances](https://docs.aws.amazon.com/cli/latest/reference/rds/describe-db-instances.html) 命令來檢查資料庫執行個體的狀態。下列範例顯示 `AcmeRDS` 資料庫執行個體的資料庫執行個體狀態：

```
aws rds describe-db-instances --db-instance-identifier AcmeRDS --query "*[].{DBInstanceStatus:DBInstanceStatus}"
```

當資料庫執行個體狀態為 `available` 時，您即可繼續進行下一個步驟。

## 步驟 5：載入資料
<a name="mariadb-importing-data-any-source-load-data"></a>

若要將資料列從一般檔案讀取至資料庫資料表，請使用 MariaDB `LOAD DATA LOCAL INFILE` 陳述式。

**注意**  
您必須從一般檔案所在的相同位置或使用您在執行 `LOAD DATA LOCAL INFILE` 時的檔案絕對路徑來調用 `mariadb` Shell。

下列範例說明如何從名為 `sales.txt` 的檔案將資料載入至資料庫中名為 `Sales` 的資料表：

```
MariaDB [(none)]> LOAD DATA LOCAL INFILE 'sales.txt' INTO TABLE Sales FIELDS TERMINATED BY ' ' ENCLOSED BY '' ESCAPED BY '\\';
Query OK, 1 row affected (0.01 sec)
Records: 1  Deleted: 0  Skipped: 0  Warnings: 0
```

如需 `LOAD DATA` 陳述式的詳細資訊，請參閱 MariaDB 文件中的 [LOAD DATA INFILE](https://mariadb.com/docs/server/reference/sql-statements/data-manipulation/inserting-loading-data/load-data-into-tables-or-index/load-data-infile)。

## 步驟 6：重新開啟 Amazon RDS 自動備份
<a name="mariadb-importing-data-any-source-turn-on-automated-backups"></a>

如果您在[步驟 4](#mariadb-importing-data-any-source-turn-off-automated-backups) 關閉了 Amazon RDS 自動備份，在載入完成後，您可以將備份保留期間設回載入前的值，以重新開啟 Amazon RDS 自動備份。如步驟 4 所述，Amazon RDS 會重新啟動資料庫執行個體，所以短暫停機是正常現象。

下列範例會執行 AWS CLI [modify-db-instance](https://docs.aws.amazon.com/cli/latest/reference/rds/modify-db-instance.html) `AcmeRDS` 命令，以開啟資料庫執行個體的自動備份，並將保留期間設定為一天：

針對 Linux、macOS 或 Unix：

```
aws rds modify-db-instance \
    --db-instance-identifier AcmeRDS \
    --backup-retention-period 1 \
    --apply-immediately
```

在 Windows 中：

```
aws rds modify-db-instance ^
    --db-instance-identifier AcmeRDS ^
    --backup-retention-period 1 ^
    --apply-immediately
```