

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

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

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

## 步驟 1：建立一般檔案，其中需包含要載入的資料
<a name="mysql-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](#mysql-importing-data-any-source-load-data) 中載入資料時，您必須從檔案所在的相同位置叫用 `mysql` Shell，或使用您在執行 `LOAD DATA LOCAL INFILE` 時的檔案絕對路徑。

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

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

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

## 步驟 3：建立資料庫快照
<a name="mysql-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="mysql-importing-data-any-source-turn-off-automated-backups"></a>

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

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

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

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

執行 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="mysql-importing-data-any-source-load-data"></a>

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

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

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

```
mysql> 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` 陳述式的詳細資訊，請參閱 MySQL 文件中的 [LOAD DATA 陳述式](https://dev.mysql.com/doc/refman/8.4/en/load-data.html)。

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

如果您在[步驟 4](#mysql-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
```