

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

# 從外部 MySQL 資料庫將資料遷移至 Amazon Aurora MySQL 資料庫叢集
<a name="AuroraMySQL.Migrating.ExtMySQL"></a>

如果您的資料庫支援 InnoDB 或 MyISAM 資料表空間，在將資料遷移至 Amazon Aurora MySQL 資料庫叢集時，您有下列選項：
+ 您可以使用 `mysqldump` 公用程式來建立資料的傾出，然後將該資料匯入現有的 Amazon Aurora MySQL 資料庫叢集。如需更多詳細資訊，請參閱 [使用 mysqldump 從 MySQL 到 Amazon Aurora 的邏輯遷移](AuroraMySQL.Migrating.ExtMySQL.mysqldump.md)。
+ 您可以從資料庫將完整和增量備份檔案複製到 Amazon S3 儲存貯體，然後從這些檔案還原至 Amazon Aurora MySQL 資料庫叢集。比起使用 `mysqldump`，此選項遷移資料的速度更快。如需更多詳細資訊，請參閱 [使用 Percona XtraBackup 和 Amazon S3 從 MySQL 進行實體遷移](AuroraMySQL.Migrating.ExtMySQL.S3.md)。

**Topics**
+ [使用 Percona XtraBackup 和 Amazon S3 從 MySQL 進行實體遷移](AuroraMySQL.Migrating.ExtMySQL.S3.md)
+ [使用 mysqldump 從 MySQL 到 Amazon Aurora 的邏輯遷移](AuroraMySQL.Migrating.ExtMySQL.mysqldump.md)

# 使用 Percona XtraBackup 和 Amazon S3 從 MySQL 進行實體遷移
<a name="AuroraMySQL.Migrating.ExtMySQL.S3"></a>

您可以從來源 MySQL 5.7 或 8.0 版資料庫將完整和增量備份檔案複製到 Amazon S3 儲存貯體。然後，您可以從這些檔案還原到具有相同主要資料庫引擎版本的 Amazon Aurora MySQL 資料庫叢集。

此選項比使用 `mysqldump` 來遷移資料快得多，因為使用 `mysqldump` 會重新執行所有命令，在新的 Aurora MySQL 資料庫叢集中重新建立來源資料庫的結構描述和資料。經由複製來源 MySQL 資料檔案，Aurora MySQL 可以立即使用這些檔案做為 Aurora MySQL 資料庫叢集的資料。

此外，您還可以在遷移過程中使用二進位日誌複寫來盡可能縮短停機時間。如果您使用二進位日誌複寫，則當資料正在遷移至 Aurora MySQL 資料庫叢集時，外部 MySQL 資料庫仍然可能發生交易。建立 Aurora MySQL 資料庫叢集之後，您可以使用二進位日誌複寫，以同步 Aurora MySQL 資料庫叢集與備份之後發生的交易。當 Aurora MySQL 資料庫叢集與 MySQL 資料庫達到同步時，請完全切換至 Aurora MySQL 資料庫叢集來處理新交易，以便完成遷移。如需詳細資訊，請參閱[使用複寫來同步 Amazon Aurora MySQL 資料庫叢集與 MySQL 資料庫](#AuroraMySQL.Migrating.ExtMySQL.S3.RepSync)。

**Contents**
+ [限制及考量](#AuroraMySQL.Migrating.ExtMySQL.S3.Limits)
+ [開始之前](#AuroraMySQL.Migrating.ExtMySQL.S3.Prereqs)
  + [安裝 Percona XtraBackup](#AuroraMySQL.Migrating.ExtMySQL.S3.Prereqs.XtraBackup)
  + [所需的許可](#AuroraMySQL.Migrating.ExtMySQL.S3.Prereqs.Permitting)
  + [建立 IAM 服務角色](#AuroraMySQL.Migrating.ExtMySQL.S3.Prereqs.CreateRole)
+ [備份要還原為 Amazon Aurora MySQL 資料庫叢集的檔案](#AuroraMySQL.Migrating.ExtMySQL.S3.Backup)
  + [使用 Percona XtraBackup 來建立完整備份](#AuroraMySQL.Migrating.ExtMySQL.S3.Backup.Full)
  + [透過 Percona XtraBackup 來使用增量備份](#AuroraMySQL.Migrating.ExtMySQL.S3.Backup.Incr)
  + [備份考量](#AuroraMySQL.Migrating.ExtMySQL.S3.Backup.Considerations)
+ [從 Amazon S3 儲存貯體還原 Amazon Aurora MySQL 資料庫叢集](#AuroraMySQL.Migrating.ExtMySQL.S3.Restore)
+ [使用複寫來同步 Amazon Aurora MySQL 資料庫叢集與 MySQL 資料庫](#AuroraMySQL.Migrating.ExtMySQL.S3.RepSync)
  + [針對加密複寫來設定外部 MySQL 資料庫和 Aurora MySQL 資料庫叢集](#AuroraMySQL.Migrating.ExtMySQL.S3.RepSync.ConfigureEncryption)
  + [同步 Amazon Aurora MySQL 資料庫叢集與外部 MySQL 資料庫](#AuroraMySQL.Migrating.ExtMySQL.S3.RepSync.Synchronizing)
+ [縮短實體遷移到 Amazon Aurora MySQL 的時間](AuroraMySQL.Migrating.ExtMySQL.Prechecks.md)
  + [不支援的資料表類型](AuroraMySQL.Migrating.ExtMySQL.Prechecks.md#AuroraMySQL.Migrating.ExtMySQL.Prechecks.Tables)
  + [具有不支援權限的使用者帳戶](AuroraMySQL.Migrating.ExtMySQL.Prechecks.md#AuroraMySQL.Migrating.ExtMySQL.Prechecks.Users)
  + [Aurora MySQL 第 3 版中的動態權限](AuroraMySQL.Migrating.ExtMySQL.Prechecks.md#AuroraMySQL.Migrating.ExtMySQL.Prechecks.Dynamic)
  + [使用「rdsadmin'@'localhost」作為 DEFINER 的預存物件](AuroraMySQL.Migrating.ExtMySQL.Prechecks.md#AuroraMySQL.Migrating.ExtMySQL.Prechecks.Objects)

## 限制及考量
<a name="AuroraMySQL.Migrating.ExtMySQL.S3.Limits"></a>

從 Amazon S3 儲存貯體還原至 Amazon Aurora MySQL 資料庫叢集時，須注意下列限制和考量：
+ 您只能將資料遷移至新的資料庫叢集，而非現有資料庫叢集。
+ 您必須使用 Percona XtraBackup 將資料備份到 S3。如需詳細資訊，請參閱[安裝 Percona XtraBackup](#AuroraMySQL.Migrating.ExtMySQL.S3.Prereqs.XtraBackup)。
+ Amazon S3 儲存貯體和 Aurora MySQL 資料庫叢集必須位於相同的 AWS 區域。
+ 您無法從以下項目還原：
  + 從資料庫叢集快照匯出還原至 Amazon S3。您無法將資料從資料庫叢集快照匯出遷移到 S3 儲存貯體。
  + 加密的來源資料庫，但可以加密要遷移的資料。您也可以在遷移過程中維持不加密資料。
  + MySQL 5.5 或 5.6 資料庫
+ Percona Server for MySQL 不支援作為來源資料庫，因為它可以包含 `mysql` 結構描述中的 `compression_dictionary*` 資料表。
+ 您無法還原至 Aurora Serverless 資料庫叢集。
+ 主要版本或次要版本都不支援回溯遷移。例如，您無法從 MySQL 8.0 版遷移至 Aurora MySQL 第 2 版 (與 MySQL 5.7 相容)，也無法從 MySQL 8.0.32 版遷移至 Aurora MySQL 3.03 版 (與 MySQL Community 8.0.26 版相容)。
+ 您無法從某些舊版 MySQL 8.0 版本 (包括 8.0.11、8.0.13 和 8.0.15) 遷移到 Aurora MySQL 版本 3.05 及更高版本。建議您在遷移之前，先升級至 MySQL 8.0.28 版。
+ db.t2.micro 資料庫執行個體類別上不支援從 Amazon S3 匯入。不過，您可以先還原至不同的資料庫執行個體類別，稍後再變更資料庫執行個體類別。如需資料庫執行個體類別的詳細資訊，請參閱 [Amazon Aurora 資料庫執行個體類別](Concepts.DBInstanceClass.md)。
+ Amazon S3 對上傳至 S3 儲存貯體的檔案大小限制為 5 TB。如果備份檔案超過 5 TB，您必須將備份檔案分割為較小的檔案。
+ Amazon RDS 隊上傳至 S3 儲存貯體的檔案數量限制為 1 百萬個。如果資料庫的備份資料 (包括所有完整和增量備份) 超過 1 百萬個檔案，請使用 Gzip (.gz)、tar (.tar.gz) 或 Percona xbstream (.xbstream) 檔案將完整和增量備份檔案儲存在 S3 儲存貯體中。Percona XtraBackup 8.0 只支援壓縮時的 Percona xbstream。
+ 若要為每個資料庫叢集提供管理服務，建立資料庫執行個體時，系統會一併建立 `rdsadmin` 使用者。由於這是 RDS 中預留的使用者，因此適用以下限制：
  + 不會匯入使用 `'rdsadmin'@'localhost'` DEFINER 的函數、程序、檢視、事件和觸發。如需詳細資訊，請參閱[使用「rdsadmin'@'localhost」作為 DEFINER 的預存物件](AuroraMySQL.Migrating.ExtMySQL.Prechecks.md#AuroraMySQL.Migrating.ExtMySQL.Prechecks.Objects)及[Amazon Aurora MySQL 的主要使用者權限](AuroraMySQL.Security.md#AuroraMySQL.Security.MasterUser)。
  + 建立 Aurora MySQL 資料庫叢集時，會一併建立具有所支援最大權限的主要使用者。從備份還原時，若指派任何不支援的權限給要匯入的使用者，這些權限都會在匯入過程中自動移除。

    若要找出可能受此影響的使用者，請參閱 [具有不支援權限的使用者帳戶](AuroraMySQL.Migrating.ExtMySQL.Prechecks.md#AuroraMySQL.Migrating.ExtMySQL.Prechecks.Users)。如需有關 Aurora MySQL 中所支援權限的詳細資訊，請參閱 [角色型權限模型](AuroraMySQL.Compare-80-v3.md#AuroraMySQL.privilege-model)。
+ 對於 Aurora MySQL 第 3 版，不會匯入動態權限。Aurora 支援的動態權限可在遷移後匯入。如需詳細資訊，請參閱[Aurora MySQL 第 3 版中的動態權限](AuroraMySQL.Migrating.ExtMySQL.Prechecks.md#AuroraMySQL.Migrating.ExtMySQL.Prechecks.Dynamic)。
+ 不會遷移 `mysql` 結構描述中使用者建立的資料表。
+ `innodb_data_file_path` 參數只能使用一個資料檔案 (預設資料檔案名稱 `ibdata1:12M:autoextend`) 來設定。具有兩個資料檔或具有不同名稱之資料檔的資料庫無法使用此方法移轉。

  以下是不允許的檔案名稱範例：`innodb_data_file_path=ibdata1:50M`、`ibdata2:50M:autoextend` 和 `innodb_data_file_path=ibdata01:50M:autoextend`。
+ 如果來源資料庫有資料表是在預設 MySQL 資料目錄外定義，您無法從這個來源資料庫遷移。
+ 使用此方法可支援的最大未壓縮備份大小目前限制為 64 TiB。對於壓縮備份，此限制會降低以考量未壓縮空間需求。在這種情況下，支援的最大備份大小為 (`64 TiB – compressed backup size`)。
+ Aurora MySQL 不支援匯入 MySQL 及其他外部元件和外掛程式。
+ Aurora MySQL 不會從資料庫還原任何內容。建議您從來源 MySQL 資料庫儲存資料庫結構描述和下列項目的值，然後在還原的 Aurora MySQL 資料庫叢集建立之後，將這些項目新增至其中：
  + 使用者帳戶
  + 函數
  + 預存程序
  + 時區資訊。時區資訊是從 Aurora MySQL 資料庫叢集的本機作業系統載入。如需詳細資訊，請參閱[Amazon Aurora 資料庫叢集的本機時區](Concepts.RegionsAndAvailabilityZones.md#Aurora.Overview.LocalTimeZone)。

## 開始之前
<a name="AuroraMySQL.Migrating.ExtMySQL.S3.Prereqs"></a>

您必須執行下列動作，才能將資料複製到 Amazon S3 儲存貯體，並從這些檔案還原至資料庫叢集：
+ 將 Percona XtraBackup 安裝在本機伺服器。
+ 允許 Aurora MySQL 代替您存取 Amazon S3 儲存貯體。

### 安裝 Percona XtraBackup
<a name="AuroraMySQL.Migrating.ExtMySQL.S3.Prereqs.XtraBackup"></a>

Amazon Aurora 可以從使用 Percona XtraBackup 所建立的檔案來還原資料庫叢集。您可以從 [Software Downloads - Percona](https://www.percona.com/downloads) (軟體下載 - Percona) 安裝 Percona XtraBackup。

若要遷移 MySQL 5.7，請使用 Percona XtraBackup 2.4。

若要遷移 MySQL 8.0，請使用 Percona XtraBackup 8.0。請確定 Percona XtraBackup 版本與來源資料庫的引擎版本相容。

### 所需的許可
<a name="AuroraMySQL.Migrating.ExtMySQL.S3.Prereqs.Permitting"></a>

若要將 MySQL 資料遷移至 Amazon Aurora MySQL 資料庫叢集，需要具備幾種許可：
+ 請求 Aurora 從 Amazon S3 儲存貯體建立新叢集的使用者必須具有列出您 AWS 帳戶儲存貯體的許可。您可以使用 AWS Identity and Access Management (IAM) 政策授予使用者此許可。
+ Aurora 需要許可來代表您存取 Amazon S3 儲存貯體，其中存放用來建立 Amazon Aurora MySQL 資料庫叢集的檔案。您需要使用 IAM 服務角色將必要許可授予 Aurora。
+ 提出請求的使用者也必須具備許可才能列出 AWS 帳戶的 IAM 角色。
+ 如果提出請求的使用者想要建立 IAM 服務角色，或要求 Aurora 建立 IAM 服務角色 (使用主控台)，則該使用者必須具備許可才能為您的 AWS 帳戶建立 IAM 角色。
+ 如果您計劃在遷移過程中加密資料，請更新將執行遷移之使用者的 IAM 政策，以授予 RDS 對 AWS KMS keys 用於加密備份的 的存取權。如需說明，請參閱[建立 IAM 政策以存取 AWS KMS資源](AuroraMySQL.Integrating.Authorizing.IAM.KMSCreatePolicy.md)。

例如，下列 IAM 政策將最低必要許可授予使用者，讓使用者可利用主控台來列出 IAM 角色、建立 IAM 角色、列出您帳戶的 Amazon S3 儲存貯體，以及列出 KMS 金鑰。

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "iam:ListRoles",
                "iam:CreateRole",
                "iam:CreatePolicy",
                "iam:AttachRolePolicy",
                "s3:ListBucket",
                "kms:ListKeys"
            ],
            "Resource": "*"
        }
    ]
}
```

------

此外，若要讓使用者將 IAM 角色與 Amazon S3 儲存貯體相關聯，IAM 使用者必須具備該 IAM 角色的 `iam:PassRole` 許可。此許可允許管理員限制使用者可將哪些 IAM 角色與 Amazon S3 儲存貯體建立關聯。

例如，下列 IAM 政策可讓使用者將名為 `S3Access` 的角色與 Amazon S3 儲存貯體建立關聯。

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement":[
        {
            "Sid":"AllowS3AccessRole",
            "Effect":"Allow",
            "Action":"iam:PassRole",
            "Resource":"arn:aws:iam::123456789012:role/S3Access"
        }
    ]
}
```

------

如需 IAM 使用者許可的詳細資訊，請參閱 [使用政策管理存取權](UsingWithRDS.IAM.md#security_iam_access-manage)。

### 建立 IAM 服務角色
<a name="AuroraMySQL.Migrating.ExtMySQL.S3.Prereqs.CreateRole"></a>

您可以選擇建立新角色選項，讓 AWS 管理主控台 為您**建立角色** （本主題稍後顯示）。如果您選取此選項並指定新角色的名稱，Aurora 會建立必要的 IAM 服務角色，讓 Aurora 能夠存取您提供其名稱的 Amazon S3 儲存貯體。

或者，您也可以使用下列程序來手動建立角色。

**為 Aurora 建立 IAM 角色以存取 Amazon S3**

1. 完成「[建立 IAM 政策來存取 Amazon S3 資源](AuroraMySQL.Integrating.Authorizing.IAM.S3CreatePolicy.md)」中的步驟。

1. 完成「[建立 IAM 角色以允許 Amazon Aurora 存取 AWS 服務](AuroraMySQL.Integrating.Authorizing.IAM.CreateRole.md)」中的步驟。

1. 完成「[將 IAM 角色與 Amazon Aurora MySQL 資料庫叢集建立關聯](AuroraMySQL.Integrating.Authorizing.IAM.AddRoleToDBCluster.md)」中的步驟。

## 備份要還原為 Amazon Aurora MySQL 資料庫叢集的檔案
<a name="AuroraMySQL.Migrating.ExtMySQL.S3.Backup"></a>

您可以使用 Percona XtraBackup 來建立 MySQL 資料庫檔案的完整備份，然後將備份檔案上傳至 Amazon S3 儲存貯體。或者，如果您已使用 Percona XtraBackup 來備份 MySQL 資料庫檔案，您可以將現有的完整和增量備份目錄及檔案上傳至 Amazon S3 儲存貯體。

**Topics**
+ [使用 Percona XtraBackup 來建立完整備份](#AuroraMySQL.Migrating.ExtMySQL.S3.Backup.Full)
+ [透過 Percona XtraBackup 來使用增量備份](#AuroraMySQL.Migrating.ExtMySQL.S3.Backup.Incr)
+ [備份考量](#AuroraMySQL.Migrating.ExtMySQL.S3.Backup.Considerations)

### 使用 Percona XtraBackup 來建立完整備份
<a name="AuroraMySQL.Migrating.ExtMySQL.S3.Backup.Full"></a>

若要建立 MySQL 資料庫檔案的完整備份，以便能夠從 Amazon S3 還原來建立 Aurora MySQL 資料庫叢集，請使用 Percona XtraBackup 公用程式 (`xtrabackup`) 來備份資料庫。

例如，下列命令會建立 MySQL 資料庫的備份，並將檔案存放在 `/on-premises/s3-restore/backup` 資料夾中。

```
xtrabackup --backup --user=<myuser> --password=<password> --target-dir=</on-premises/s3-restore/backup>
```

如果要將備份壓縮成單一檔案 (需要時可以分割)，您可以使用 `--stream` 選項將備份儲存為下列其中一種格式：
+ Gzip (.gz)
+ tar (.tar)
+ Percona xbstream (.xbstream)

下列命令建立 MySQL 資料庫的備份，並分割成多個 Gzip 檔案。

```
xtrabackup --backup --user=<myuser> --password=<password> --stream=tar \
   --target-dir=</on-premises/s3-restore/backup> | gzip - | split -d --bytes=500MB \
   - </on-premises/s3-restore/backup/backup>.tar.gz
```

下列命令建立 MySQL 資料庫的備份，並分割成多個 tar 檔案。

```
xtrabackup --backup --user=<myuser> --password=<password> --stream=tar \
   --target-dir=</on-premises/s3-restore/backup> | split -d --bytes=500MB \
   - </on-premises/s3-restore/backup/backup>.tar
```

下列命令建立 MySQL 資料庫的備份，並分割成多個 xbstream 檔案。

```
xtrabackup --backup --user=<myuser> --password=<password> --stream=xbstream \
   --target-dir=</on-premises/s3-restore/backup> | split -d --bytes=500MB \
   - </on-premises/s3-restore/backup/backup>.xbstream
```

**注意**  
如果您看到下列錯誤，可能是因為在命令中混合檔案格式所致：  

```
ERROR:/bin/tar: This does not look like a tar archive
```

使用 Percona XtraBackup 公用程式來備份 MySQL 資料庫之後，您可以將備份目錄和檔案複製到 Amazon S3 儲存貯體。

如需有關建立檔案並上傳至 Amazon S3 儲存貯體的資訊，請參閱 *Amazon S3 入門指南*中的 [Amazon Simple Storage Service 入門](https://docs.aws.amazon.com/AmazonS3/latest/userguide/GetStartedWithS3.html)。

### 透過 Percona XtraBackup 來使用增量備份
<a name="AuroraMySQL.Migrating.ExtMySQL.S3.Backup.Incr"></a>

Amazon Aurora MySQL 支援使用 Percona XtraBackup 所建立的完整和增量備份。如果您已使用 Percona XtraBackup 來執行 MySQL 資料庫檔案的完整和增量備份，則不需要建立完整備份並將備份檔案上傳至 Amazon S3。反之，您可以將完整和增量備份的現有備份目錄及檔案複製到 Amazon S3 儲存貯體，以節省大量時間。如需詳細資訊，請參閱 Percona 網站上的 [Create an incremental backup](https://docs.percona.com/percona-xtrabackup/8.0/create-incremental-backup.html) (建立增量備份)。

將現有的完整和增量備份檔案複製到 Amazon S3 儲存貯體時，您必須遞迴複製基本目錄的內容。這些內容包括完整備份，以及所有增量備份目錄和檔案。此副本必須保留 Amazon S3 儲存貯體中的目錄結構。Aurora 會逐一查看所有檔案和目錄。Aurora 使用包含在每個增量備份中的 `xtrabackup-checkpoints` 檔案，以識別基本目錄，以及依記錄序號 (LSN) 範圍來排序增量備份。

如需有關建立檔案並上傳至 Amazon S3 儲存貯體的資訊，請參閱 *Amazon S3 入門指南*中的 [Amazon Simple Storage Service 入門](https://docs.aws.amazon.com/AmazonS3/latest/userguide/GetStartedWithS3.html)。

### 備份考量
<a name="AuroraMySQL.Migrating.ExtMySQL.S3.Backup.Considerations"></a>

Aurora 不支援使用 Percona XtraBackup 所建立的局部備份。當您備份資料庫的來源檔案時，您無法使用 `--tables`、`--tables-exclude`、`--tables-file`、`--databases`、`--databases-exclude` 或 `--databases-file` 選項來建立局部備份。

如需使用 Percona XtraBackup 備份資料庫的詳細資訊，請參閱 Percona 網站上的 [Percona XtraBackup - Documentation](https://www.percona.com/doc/percona-xtrabackup/LATEST/index.html) (Percona XtraBackup - 文件) 和 [Work with binary logs](https://docs.percona.com/percona-xtrabackup/8.0/working-with-binary-logs.html) (使用二進位日誌)。

Aurora 支援使用 Percona XtraBackup 所建立的增量備份。如需詳細資訊，請參閱 Percona 網站上的 [Create an incremental backup](https://docs.percona.com/percona-xtrabackup/8.0/create-incremental-backup.html) (建立增量備份)。

Aurora 根據檔案名稱來取用備份檔案。務必根據檔案格式，以適當副檔案名稱來命名備份檔案 — 例如，使用 Percona xbstream 格式儲存的檔案應該採用 `.xbstream` 副檔案名稱。

Aurora 依字母順序和自然數順序來取用備份檔案。發出 `split` 命令時，一律使用 `xtrabackup` 選項，以確保依適當順序寫入和命名備份檔案。

Amazon S3 將上傳至 Amazon S3 儲存貯體的檔案大小限制為 5 TB。如果資料庫的備份資料超過 5 TB，請使用 `split` 命令將備份檔案分割成多個小於 5 TB 的檔案。

Aurora 將上傳至 Amazon S3 儲存貯體的來源檔案數量限制為 1 百萬個檔案。在某些情況下，資料庫的備份資料 (包括所有完整和增量備份) 可能包含大量檔案。在這些情況下，請使用 tarball (.tar.gz) 檔案將完整和增量備份檔案存放在 Amazon S3 儲存貯體中。

當您將檔案上傳至 Amazon S3 儲存貯體時，您可以使用伺服器端加密將資料加密。您之後就可以從這些加密的檔案還原 Amazon Aurora MySQL 資料庫叢集。Amazon Aurora MySQL 可以使用經過以下幾種伺服器端加密來還原有加密檔案的資料庫叢集：
+ 伺服器端加密搭配 Amazon S3 管理的金鑰 (SSE-S3) – 以採用強式多重因素加密的唯一金鑰來加密每個物件。
+ 伺服器端加密搭配 AWS KMS受管金鑰 (SSE-KMS) – 類似於 SSE-S3，但您可以選擇自行建立和管理加密金鑰，以及其他差異。

如需將檔案上傳至 Amazon S3 儲存貯體時使用伺服器端加密的相關資訊，請參閱《Amazon S3 開發人員指南》**中的[使用伺服器端加密保護資料](https://docs.aws.amazon.com/AmazonS3/latest/userguide/serv-side-encryption.html)。

## 從 Amazon S3 儲存貯體還原 Amazon Aurora MySQL 資料庫叢集
<a name="AuroraMySQL.Migrating.ExtMySQL.S3.Restore"></a>

您可以使用 Amazon RDS 主控台，從 Amazon S3 儲存貯體還原備份檔案，以建立新的 Amazon Aurora MySQL 資料庫叢集。

**從 Amazon S3 儲存貯體上的檔案還原 Amazon Aurora MySQL 資料庫叢集**

1. 登入 AWS 管理主控台 ，並在 [https://console.aws.amazon.com/rds/](https://console.aws.amazon.com/rds/)：// 開啟 Amazon RDS 主控台。

1. 在 Amazon RDS 主控台的右上角，選擇要建立資料庫叢集 AWS 的區域。選擇與包含資料庫備份的 Amazon S3 儲存貯體相同的 AWS 區域。

1. 在導覽窗格中，選擇 **Databases** (資料庫)，然後選擇 **Restore from S3** (從 S3 還原)。

1. 選擇 **Restore From S3 (從 S3 還原)**。

   系統會顯示 **Create database by restoring from S3** (從 S3 還原以建立資料庫) 頁面。  
![\[您可以在該頁面上指定從 S3 還原資料庫叢集的詳細資訊\]](http://docs.aws.amazon.com/zh_tw/AmazonRDS/latest/AuroraUserGuide/images/AuroraMigrateS3_01.png)

1. 在 **S3 目的地** 下：

   1. 選擇包含備份檔案的 **S3 儲存貯體**。

   1. (選用) 在 **S3 folder path prefix (S3 資料夾路徑字首)** 中，針對存放在 Amazon S3 儲存貯體中的檔案，輸入檔案路徑字首。

      如果不指定字首，RDS 會使用 S3 儲存貯體之根資料夾中的所有檔案和資料夾來建立資料庫執行個體。如果指定字首，RDS 會使用 S3 儲存貯體中的檔案和資料夾來建立資料庫執行個體，而且檔案的路徑以指定的字首開頭。

      例如，假設您將備份檔案儲存在 S3 中的一個名為 backups 的子資料夾，而且有多組備份檔案，各存放於自己的目錄中 (gzip\$1backup1、gzip\$1backup2 等等)。在此例子中，指定字首 backups/gzip\$1backup1，即可從 gzip\$1backup1 資料夾中的檔案還原。

1. 在 **Engine options (引擎選項)**：

   1. 針對 **Engine type** (引擎類型)，請選擇 **Amazon Aurora**。

   1. 針對 **Version** (版本)，請為已還原的資料庫執行個體選擇 Aurora MySQL 引擎版本。

1. 針對 **IAM Role (IAM 角色)**，您可以選擇現有的 IAM 角色。

1. (選用) 您也可以選擇 **Create a new role** (建立新角色)，讓系統為您建立新的 IAM 角色。若是如此：

   1. 請輸入 **IAM role name** (IAM 角色名稱)。

   1.  請選擇是否 **Allow access to KMS key** (允許存取 KMS 金鑰)：
      + 如果您未加密備份檔案，請選擇 **No (否)**。
      + 如果您將備份檔案上傳送至 Amazon S3 時以 AES-256 (SSE-S3) 加密，請選擇 **No (否)**。在此情況下，資料會自動解密。
      + 如果您在將備份檔案上傳至 Amazon S3 時，使用 AWS KMS (SSE-KMS) 伺服器端加密來加密備份檔案，請選擇**是**。接下來，為 **AWS KMS key**選擇正確的 KMS 金鑰。

         AWS 管理主控台 會建立 IAM 政策，讓 Aurora 能夠解密資料。

      如需詳細資訊，請參閱《Amazon S3 開發人員指南》**中的[使用伺服器端加密保護資料](https://docs.aws.amazon.com/AmazonS3/latest/userguide/serv-side-encryption.html)。

1. 選擇資料庫叢集的設定，例如資料庫叢集儲存組態、資料庫執行個體類別、資料庫叢集識別符，以及登入憑證。如需每項設定的相關資訊，請參閱 [Aurora 資料庫叢集的設定](Aurora.CreateInstance.md#Aurora.CreateInstance.Settings)。

1. 視需為您的 Aurora MySQL 資料庫叢集自訂其他設定。

1. 選擇 **Create database** (建立資料庫)，以啟動 Aurora 資料庫執行個體。

在 Amazon RDS 主控台上，新的資料庫執行個體會顯示在資料庫執行個體清單中。在資料庫執行個體建立完成且可供使用之前，資料庫執行個體會處於 **Creating (建立中)** 狀態。狀態變更為 **Available** (可用) 時，您便能連接到資料庫叢集的主執行個體。視資料庫執行個體類別和分配的存放區而定，新的執行個體可能需要幾分鐘才能使用。

若要檢視新建立的叢集，請在 Amazon RDS 主控台中選擇 **Databases** (資料庫) 檢視，然後選擇資料庫叢集。如需更多詳細資訊，請參閱 [檢視 Amazon Aurora 資料庫叢集](accessing-monitoring.md#Aurora.Viewing)。

![\[Amazon Aurora 資料庫執行個體清單\]](http://docs.aws.amazon.com/zh_tw/AmazonRDS/latest/AuroraUserGuide/images/AuroraLaunch04.png)


請記下資料庫叢集的連接埠和寫入器端點。您可以針對任何會執行寫入或讀取操作的應用程式，在 JDBC 和 ODBC 連線字串中使用資料庫叢集的寫入器端點和連接埠。

## 使用複寫來同步 Amazon Aurora MySQL 資料庫叢集與 MySQL 資料庫
<a name="AuroraMySQL.Migrating.ExtMySQL.S3.RepSync"></a>

若要在遷移過程中將停機情況降到最低或完全不停機，您可以將 MySQL 資料庫上已認可的交易複寫至 Aurora MySQL 資料庫叢集。複寫可讓資料庫叢集與遷移期間在 MySQL 資料庫上發生的交易達到同步。當資料庫叢集完全同步時，您就可以停止複寫，完成遷移至 Aurora MySQL。

**Topics**
+ [針對加密複寫來設定外部 MySQL 資料庫和 Aurora MySQL 資料庫叢集](#AuroraMySQL.Migrating.ExtMySQL.S3.RepSync.ConfigureEncryption)
+ [同步 Amazon Aurora MySQL 資料庫叢集與外部 MySQL 資料庫](#AuroraMySQL.Migrating.ExtMySQL.S3.RepSync.Synchronizing)

### 針對加密複寫來設定外部 MySQL 資料庫和 Aurora MySQL 資料庫叢集
<a name="AuroraMySQL.Migrating.ExtMySQL.S3.RepSync.ConfigureEncryption"></a>

若要安全地複寫資料，您可以使用加密複寫。

**注意**  
如果不需要使用加密複寫，您可以略過這些步驟，並前往[同步 Amazon Aurora MySQL 資料庫叢集與外部 MySQL 資料庫](#AuroraMySQL.Migrating.ExtMySQL.S3.RepSync.Synchronizing)中的指示。

下列是使用加密複寫的先決條件：
+ 必須在外部 MySQL 主要資料庫上啟用 Secure Sockets Layer (SSL)。
+ 必須為 Aurora MySQL 資料庫叢集準備用戶端金鑰和用戶端憑證。

在加密複寫期間，Aurora MySQL 資料庫叢集充當 MySQL 資料庫伺服器的用戶端。Aurora MySQL 用戶端的憑證和金鑰位於 .pem 格式的檔案中。

**針對加密複寫來設定外部 MySQL 資料庫和 Aurora MySQL 資料庫叢集**

1. 確保您已準備好進行加密複寫：
   + 如果您在外部 MySQL 主要資料庫上未啟用 SSL，也沒有準備用戶端金鑰和用戶端憑證，請在 MySQL 資料庫伺服器上啟用 SSL，並產生所需的用戶端金鑰和用戶端憑證。
   + 如果外部主要資料庫上已啟用 SSL，請為 Aurora MySQL 資料庫叢集提供用戶端金鑰和憑證。如果您沒有這些資料，請為 Aurora MySQL 資料庫叢集產生新的金鑰和憑證。若要簽署用戶端憑證，您必須有用於外部 MySQL 主要資料庫上設定 SSL 的憑證授權單位金鑰。

   如需詳細資訊，請參閱 MySQL 文件中的[使用 openssl 建立 SSL 憑證和金鑰](https://dev.mysql.com/doc/refman/5.6/en/creating-ssl-files-using-openssl.html)。

   您需要憑證授權單位憑證、用戶端金鑰和用戶端憑證。

1. 使用 SSL 以主要使用者的身分連接至 Aurora MySQL 資料庫叢集。

   如需以 SSL 連接至 Aurora MySQL 資料庫叢集的相關資訊，請參閱[Aurora MySQL 資料庫叢集的 TLS 連線](AuroraMySQL.Security.md#AuroraMySQL.Security.SSL)。

1. 執行 [mysql.rds\$1import\$1binlog\$1ssl\$1material](mysql-stored-proc-replicating.md#mysql_rds_import_binlog_ssl_material) 預存程序將 SSL 資訊匯入 Aurora MySQL 資料庫叢集。

   對於 `ssl_material_value` 參數，將 Aurora MySQL 資料庫叢集之 .pem 格式檔案中的資訊，插入正確的 JSON 承載中。

   下列範例將 SSL 資訊匯入 Aurora MySQL 資料庫叢集。在 .pem 格式檔案中，內文程式碼通常比範例所示的內文程式碼更長。

   ```
   call mysql.rds_import_binlog_ssl_material(
   '{"ssl_ca":"-----BEGIN CERTIFICATE-----
   AAAAB3NzaC1yc2EAAAADAQABAAABAQClKsfkNkuSevGj3eYhCe53pcjqP3maAhDFcvBS7O6V
   hz2ItxCih+PnDSUaw+WNQn/mZphTk/a/gU8jEzoOWbkM4yxyb/wB96xbiFveSFJuOp/d6RJhJOI0iBXr
   lsLnBItntckiJ7FbtxJMXLvvwJryDUilBMTjYtwB+QhYXUMOzce5Pjz5/i8SeJtjnV3iAoG/cQk+0FzZ
   qaeJAAHco+CY/5WrUBkrHmFJr6HcXkvJdWPkYQS3xqC0+FmUZofz221CBt5IMucxXPkX4rWi+z7wB3Rb
   BQoQzd8v7yeb7OzlPnWOyN0qFU0XA246RA8QFYiCNYwI3f05p6KLxEXAMPLE
   -----END CERTIFICATE-----\n","ssl_cert":"-----BEGIN CERTIFICATE-----
   AAAAB3NzaC1yc2EAAAADAQABAAABAQClKsfkNkuSevGj3eYhCe53pcjqP3maAhDFcvBS7O6V
   hz2ItxCih+PnDSUaw+WNQn/mZphTk/a/gU8jEzoOWbkM4yxyb/wB96xbiFveSFJuOp/d6RJhJOI0iBXr
   lsLnBItntckiJ7FbtxJMXLvvwJryDUilBMTjYtwB+QhYXUMOzce5Pjz5/i8SeJtjnV3iAoG/cQk+0FzZ
   qaeJAAHco+CY/5WrUBkrHmFJr6HcXkvJdWPkYQS3xqC0+FmUZofz221CBt5IMucxXPkX4rWi+z7wB3Rb
   BQoQzd8v7yeb7OzlPnWOyN0qFU0XA246RA8QFYiCNYwI3f05p6KLxEXAMPLE
   -----END CERTIFICATE-----\n","ssl_key":"-----BEGIN RSA PRIVATE KEY-----
   AAAAB3NzaC1yc2EAAAADAQABAAABAQClKsfkNkuSevGj3eYhCe53pcjqP3maAhDFcvBS7O6V
   hz2ItxCih+PnDSUaw+WNQn/mZphTk/a/gU8jEzoOWbkM4yxyb/wB96xbiFveSFJuOp/d6RJhJOI0iBXr
   lsLnBItntckiJ7FbtxJMXLvvwJryDUilBMTjYtwB+QhYXUMOzce5Pjz5/i8SeJtjnV3iAoG/cQk+0FzZ
   qaeJAAHco+CY/5WrUBkrHmFJr6HcXkvJdWPkYQS3xqC0+FmUZofz221CBt5IMucxXPkX4rWi+z7wB3Rb
   BQoQzd8v7yeb7OzlPnWOyN0qFU0XA246RA8QFYiCNYwI3f05p6KLxEXAMPLE
   -----END RSA PRIVATE KEY-----\n"}');
   ```

   如需詳細資訊，請參閱[mysql.rds\$1import\$1binlog\$1ssl\$1material](mysql-stored-proc-replicating.md#mysql_rds_import_binlog_ssl_material)及[Aurora MySQL 資料庫叢集的 TLS 連線](AuroraMySQL.Security.md#AuroraMySQL.Security.SSL)。
**注意**  
執行程序之後，密碼會儲存在檔案中。若稍後要清除這些檔案，您可以執行 [mysql.rds\$1remove\$1binlog\$1ssl\$1material](mysql-stored-proc-replicating.md#mysql_rds_remove_binlog_ssl_material) 預存程序。

### 同步 Amazon Aurora MySQL 資料庫叢集與外部 MySQL 資料庫
<a name="AuroraMySQL.Migrating.ExtMySQL.S3.RepSync.Synchronizing"></a>

您可以使用複寫來同步 Amazon Aurora MySQL 資料庫叢集與 MySQL 資料庫。

**使用複寫來同步 Aurora MySQL 資料庫叢集與 MySQL 資料庫**

1. 請確定外部 MySQL 資料庫的 /etc/my.cnf 檔案有相關的項目。

   如果不需要加密複寫，則啟動外部 MySQL 資料庫時，務必啟用二進位日誌 (binlog) 並停用 SSL。下列是未加密資料 /etc/my.cnf 檔案中的相關項目。

   ```
   log-bin=mysql-bin
   server-id=2133421
   innodb_flush_log_at_trx_commit=1
   sync_binlog=1
   ```

   如果需要加密複寫，則啟動外部 MySQL 資料庫時，務必啟用 SSL 和 binlog。/etc/my.cnf 檔案中的項目包括 MySQL 資料庫伺服器的 .pem 檔案位置。

   ```
   log-bin=mysql-bin
   server-id=2133421
   innodb_flush_log_at_trx_commit=1
   sync_binlog=1
   
   # Setup SSL.
   ssl-ca=/home/sslcerts/ca.pem
   ssl-cert=/home/sslcerts/server-cert.pem
   ssl-key=/home/sslcerts/server-key.pem
   ```

   您可以使用下列命令確認 SSL 已啟用。

   ```
   mysql> show variables like 'have_ssl';
   ```

   輸出類似如下。

   ```
   +~-~-~-~-~-~-~-~-~-~-~-~-~-~--+~-~-~-~-~-~--+
   | Variable_name | Value |
   +~-~-~-~-~-~-~-~-~-~-~-~-~-~--+~-~-~-~-~-~--+
   | have_ssl      | YES   |
   +~-~-~-~-~-~-~-~-~-~-~-~-~-~--+~-~-~-~-~-~--+
   1 row in set (0.00 sec)
   ```

1. 決定複寫的二進位日誌起始位置。在後續步驟中，您需要指定此位置來開始複寫。

   **使用 AWS 管理主控台**

   1. 登入 AWS 管理主控台 並開啟位於 https：//[https://console.aws.amazon.com/rds/](https://console.aws.amazon.com/rds/) 的 Amazon RDS 主控台。

   1. 在導覽窗格中，選擇 **Events** (事件)。

   1. 在 **Events (事件)** 清單中，記下 **Recovered from Binary log filename (已從二進位日誌檔案名稱還原)** 事件的位置。  
![\[檢視 MySQL 主要資料庫\]](http://docs.aws.amazon.com/zh_tw/AmazonRDS/latest/AuroraUserGuide/images/aurora-mysql-rep-binary-log-position.png)

   **使用 AWS CLI**

   您也可以使用 [describe-events](https://docs.aws.amazon.com/cli/latest/reference/rds/describe-events.html) AWS CLI 命令取得 binlog 檔案名稱和位置。以下顯示命令範例 `describe-events` 命令。

   ```
   PROMPT> aws rds describe-events
   ```

   在輸出中，識別顯示 binlog 位置的事件。

1. 在已連接外部 MySQL 資料庫的情況下，建立用於複寫的使用者。此帳戶只供複寫作業使用，務必限制其存取您的網域，以提升安全性。以下是範例。

   ```
   mysql> CREATE USER '<user_name>'@'<domain_name>' IDENTIFIED BY '<password>';
   ```

   使用者需要 `REPLICATION CLIENT` 和 `REPLICATION SLAVE` 權限。授予這些權限給該使用者。

   ```
   GRANT REPLICATION CLIENT, REPLICATION SLAVE ON *.* TO '<user_name>'@'<domain_name>';
   ```

   如果需要使用加密複寫，請對複寫使用者要求 SSL 連接。例如，您可以使用以下陳述式要求使用者帳戶 `<user_name>`.

   ```
   GRANT USAGE ON *.* TO '<user_name>'@'<domain_name>' REQUIRE SSL;
   ```
**注意**  
如果未包含 `REQUIRE SSL`，則複寫連線可能會以無訊息方式回復為未加密的連線。

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

   您可能還需要設定本機網路，以允許來自 Aurora MySQL 資料庫叢集之 IP 地址的連線，使其能與外部 MySQL 資料庫通訊。若要找出 Aurora MySQL 資料庫叢集的 IP 地址，請使用 `host` 命令。

   ```
   host <db_cluster_endpoint>
   ```

   主機名稱是來自 Aurora MySQL 資料庫叢集端點的 DNS 名稱。

1. 執行 [mysql.rds\$1reset\$1external\$1master (Aurora MySQL 第 2 版)](mysql-stored-proc-replicating.md#mysql_rds_reset_external_master) 或 [mysql.rds\$1reset\$1external\$1source (Aurora MySQL 第 3 版)](mysql-stored-proc-replicating.md#mysql_rds_reset_external_source) 預存程序以啟用二進位日誌複寫。此儲存的程序採用下列語法。

   ```
   CALL mysql.rds_set_external_master (
     host_name
     , host_port
     , replication_user_name
     , replication_user_password
     , mysql_binary_log_file_name
     , mysql_binary_log_file_location
     , ssl_encryption
   );
   
   CALL mysql.rds_set_external_source (
     host_name
     , host_port
     , replication_user_name
     , replication_user_password
     , mysql_binary_log_file_name
     , mysql_binary_log_file_location
     , ssl_encryption
   );
   ```

   如需有關參數的詳細資訊，請參閱 [mysql.rds\$1reset\$1external\$1master (Aurora MySQL 第 2 版)](mysql-stored-proc-replicating.md#mysql_rds_reset_external_master) 和 [mysql.rds\$1reset\$1external\$1source (Aurora MySQL 第 3 版)](mysql-stored-proc-replicating.md#mysql_rds_reset_external_source)。

   在 `mysql_binary_log_file_name` 和 `mysql_binary_log_file_location` 中，使用您稍早在 **Recovered from Binary log filename (已從二進位日誌檔案名稱還原)** 事件中記下的位置。

   如果 Aurora MySQL 資料庫叢集的資料未加密，則 `ssl_encryption` 參數必須設為 `0`。如果資料已加密，則 `ssl_encryption` 參數必須設為 `1`。

   下列範例對具有加密資料的 Aurora MySQL 資料庫叢集執行此程序。

   ```
   CALL mysql.rds_set_external_master(
     'Externaldb.some.com',
     3306,
     'repl_user'@'mydomain.com',
     'password',
     'mysql-bin.000010',
     120,
     1);
   
   CALL mysql.rds_set_external_source(
     'Externaldb.some.com',
     3306,
     'repl_user'@'mydomain.com',
     'password',
     'mysql-bin.000010',
     120,
     1);
   ```

   此儲存的程序會設定參數，供 Aurora MySQL 資料庫叢集用來連接至外部 MySQL 資料庫和讀取其二進位日誌。如果資料已加密，則它也會將 SSL 憑證授權單位憑證、用戶端憑證和用戶端金鑰下載至本機磁碟。

1. 執行 [mysql.rds\$1start\$1replication](mysql-stored-proc-replicating.md#mysql_rds_start_replication) 儲存的程序以啟動二進位日誌複寫。

   ```
   CALL mysql.rds_start_replication;
   ```

1. 監控 Aurora MySQL 資料庫叢集落後於 MySQL 複寫主要資料庫的程度。若要這麼做，請連接至 Aurora MySQL 資料庫叢集並執行下列命令。

   ```
   Aurora MySQL version 2:
   SHOW SLAVE STATUS;
   
   Aurora MySQL version 3:
   SHOW REPLICA STATUS;
   ```

   在命令輸出中，`Seconds Behind Master` 欄位顯示 Aurora MySQL 資料庫叢集落後於 MySQL 主要資料庫的程度。當此值為 `0` (零) 時，表示 Aurora MySQL 資料庫叢集與主要資料庫已同步，而您可以繼續下一步來停止複寫。

1. 連接至 MySQL 複寫主要資料庫並停止複寫。若要這樣做，請執行 [mysql.rds\$1stop\$1replication](mysql-stored-proc-replicating.md#mysql_rds_stop_replication) 預存程序。

   ```
   CALL mysql.rds_stop_replication;
   ```

# 縮短實體遷移到 Amazon Aurora MySQL 的時間
<a name="AuroraMySQL.Migrating.ExtMySQL.Prechecks"></a>

您可以進行以下資料庫修改來加快將資料庫遷移至 Amazon Aurora MySQL 的程序。

**重要**  
請務必對生產資料庫的副本進行這些更新，而不是直接更新生產資料庫。接著您可以備份副本並將它還原至 Aurora MySQL 資料庫叢集，以避免生產資料庫發生任何服務中斷的情況。

## 不支援的資料表類型
<a name="AuroraMySQL.Migrating.ExtMySQL.Prechecks.Tables"></a>

Aurora MySQL 針對資料庫資料表僅支援 InnoDB 引擎。如果您的資料庫中有 MyISAM 資料表，這些資料表必須先轉換，再遷移至 Aurora MySQL。在遷移過程中，轉換程序需要額外的空間將 MyISAM 轉換為 InnoDB。

若要盡可能避免空間不足，或想要加速遷移程序，請先將所有 MyISAM 資料表轉換成 InnoDB 資料表再遷移。產生的 InnoDB 資料表大小相當於 Aurora MySQL 針對該資料表所需的大小。若要將 MyISAM 資料表轉換成 InnoDB，請執行下列命令：

```
ALTER TABLE schema.table_name engine=innodb, algorithm=copy;
```

Aurora MySQL 不支援壓縮的資料表或頁面 (也就是以 `ROW_FORMAT=COMPRESSED` 或 `COMPRESSION = {"zlib"|"lz4"}` 建立的資料表)。

若要盡可能避免空間不足，或想要加速遷移程序，請將 `ROW_FORMAT` 設為 `DEFAULT`、`COMPACT`、`DYNAMIC` 或 `REDUNDANT`，以展開壓縮資料表。對於壓縮的頁面，請設定 `COMPRESSION="none"`。

如需詳細資訊，請參閱 MySQL 文件中的 [InnoDB 資料列格式](https://dev.mysql.com/doc/refman/8.0/en/innodb-row-format.html)和 [InnoDB 資料表與頁面壓縮](https://dev.mysql.com/doc/refman/8.0/en/innodb-compression.html)。

您可以在現有的 MySQL 資料庫執行個體上使用下列 SQL 指令碼，以列出資料庫中的 MyISAM 資料表或壓縮資料表。

```
-- This script examines a MySQL database for conditions that block
-- migrating the database into Aurora MySQL.
-- It must be run from an account that has read permission for the
-- INFORMATION_SCHEMA database.

-- Verify that this is a supported version of MySQL.

select msg as `==> Checking current version of MySQL.`
from
  (
  select
    'This script should be run on MySQL version 5.6 or higher. ' +
    'Earlier versions are not supported.' as msg,
    cast(substring_index(version(), '.', 1) as unsigned) * 100 +
      cast(substring_index(substring_index(version(), '.', 2), '.', -1)
      as unsigned)
    as major_minor
  ) as T
where major_minor <> 506;


-- List MyISAM and compressed tables. Include the table size.

select concat(TABLE_SCHEMA, '.', TABLE_NAME) as `==> MyISAM or Compressed Tables`,
round(((data_length + index_length) / 1024 / 1024), 2) "Approx size (MB)"
from INFORMATION_SCHEMA.TABLES
where
  ENGINE <> 'InnoDB'
  and
  (
    -- User tables
    TABLE_SCHEMA not in ('mysql', 'performance_schema',
                         'information_schema')
    or
    -- Non-standard system tables
    (
      TABLE_SCHEMA = 'mysql' and TABLE_NAME not in
        (
          'columns_priv', 'db', 'event', 'func', 'general_log',
          'help_category', 'help_keyword', 'help_relation',
          'help_topic', 'host', 'ndb_binlog_index', 'plugin',
          'proc', 'procs_priv', 'proxies_priv', 'servers', 'slow_log',
          'tables_priv', 'time_zone', 'time_zone_leap_second',
          'time_zone_name', 'time_zone_transition',
          'time_zone_transition_type', 'user'
        )
    )
  )
  or
  (
    -- Compressed tables
       ROW_FORMAT = 'Compressed'
  );
```

## 具有不支援權限的使用者帳戶
<a name="AuroraMySQL.Migrating.ExtMySQL.Prechecks.Users"></a>

具有 Aurora MySQL 不支援之權限的使用者帳戶在匯出時，不支援的權限不會一起匯出。如需支援的權限清單，請參閱 [角色型權限模型](AuroraMySQL.Compare-80-v3.md#AuroraMySQL.privilege-model)。

您可以在來源資料庫上執行下列 SQL 查詢，以列出具有不支援權限的使用者帳戶。

```
SELECT
    user,
    host
FROM
    mysql.user
WHERE
    Shutdown_priv = 'y'
    OR File_priv = 'y'
    OR Super_priv = 'y'
    OR Create_tablespace_priv = 'y';
```

## Aurora MySQL 第 3 版中的動態權限
<a name="AuroraMySQL.Migrating.ExtMySQL.Prechecks.Dynamic"></a>

不會匯入動態權限。Aurora MySQL 第 3 版支援以下動態權限。

```
'APPLICATION_PASSWORD_ADMIN',
'CONNECTION_ADMIN',
'REPLICATION_APPLIER',
'ROLE_ADMIN',
'SESSION_VARIABLES_ADMIN',
'SET_USER_ID',
'XA_RECOVER_ADMIN'
```

以下範例指令碼會將支援的動態權限授予 Aurora MySQL 資料庫叢集中的使用者帳戶。

```
-- This script finds the user accounts that have Aurora MySQL supported dynamic privileges 
-- and grants them to corresponding user accounts in the Aurora MySQL DB cluster.

/home/ec2-user/opt/mysql/8.0.26/bin/mysql -uusername -pxxxxx -P8026 -h127.0.0.1 -BNe "SELECT
  CONCAT('GRANT ', GRANTS, ' ON *.* TO ', GRANTEE ,';') AS grant_statement
  FROM (select GRANTEE, group_concat(privilege_type) AS GRANTS FROM information_schema.user_privileges 
      WHERE privilege_type IN (
        'APPLICATION_PASSWORD_ADMIN',
        'CONNECTION_ADMIN',
        'REPLICATION_APPLIER',
        'ROLE_ADMIN',
        'SESSION_VARIABLES_ADMIN',
        'SET_USER_ID',
        'XA_RECOVER_ADMIN')
      AND GRANTEE NOT IN (\"'mysql.session'@'localhost'\",\"'mysql.infoschema'@'localhost'\",\"'mysql.sys'@'localhost'\") GROUP BY GRANTEE)
      AS PRIVGRANTS; " | /home/ec2-user/opt/mysql/8.0.26/bin/mysql -u master_username -p master_password -h DB_cluster_endpoint
```

## 使用「rdsadmin'@'localhost」作為 DEFINER 的預存物件
<a name="AuroraMySQL.Migrating.ExtMySQL.Prechecks.Objects"></a>

不會匯入使用 `'rdsadmin'@'localhost'` 作為 DEFINER 的函數、程序、檢視、事件和觸發。

您可以在來源 MySQL 資料庫上使用以下 SQL 指令碼列出具有不支援 DEFINER 的預存物件。

```
-- This SQL query lists routines with `rdsadmin`@`localhost` as the definer.

SELECT
    ROUTINE_SCHEMA,
    ROUTINE_NAME
FROM
    information_schema.routines
WHERE
    definer = 'rdsadmin@localhost';

-- This SQL query lists triggers with `rdsadmin`@`localhost` as the definer.

SELECT
    TRIGGER_SCHEMA,
    TRIGGER_NAME,
    DEFINER
FROM
    information_schema.triggers
WHERE
    DEFINER = 'rdsadmin@localhost';

-- This SQL query lists events with `rdsadmin`@`localhost` as the definer.

SELECT
    EVENT_SCHEMA,
    EVENT_NAME
FROM
    information_schema.events
WHERE
    DEFINER = 'rdsadmin@localhost';

-- This SQL query lists views with `rdsadmin`@`localhost` as the definer.
SELECT
    TABLE_SCHEMA,
    TABLE_NAME
FROM
    information_schema.views
WHERE
    DEFINER = 'rdsadmin@localhost';
```

# 使用 mysqldump 從 MySQL 到 Amazon Aurora 的邏輯遷移
<a name="AuroraMySQL.Migrating.ExtMySQL.mysqldump"></a>

因為 Amazon Aurora MySQL 是 MySQL 相容資料庫，您可以使用 `mysqldump` 公用程式，從 MySQL 資料庫或 `mariadb-dump` 公用程式複製資料，將 MariaDB 資料庫的資料複製到現有的 Aurora MySQL 資料庫叢集。

如需如何使用非常大的 MySQL 或 MariaDB 資料庫進行討論，請參閱《Amazon Relational Database Service 使用者指南》**中的下列主題：
+ MySQL – [將資料匯入至 Amazon RDS for MySQL 資料庫，並減少停機時間](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/mysql-importing-data-reduced-downtime.html)
+ MariaDB – [將資料匯入至 Amazon RDS for MariaDB 資料庫，並減少停機時間](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/mariadb-importing-data-reduced-downtime.html)

對於資料量較少的 MySQL 或 MariaDB 資料庫，請參閱《Amazon Relational Database Service 使用者指南》**中的下列主題：
+ MySQL – [從外部 MySQL 資料庫將資料匯入 Amazon RDS for MySQL 資料庫執行個體](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/mysql-importing-data-external-database.html)
+ MariaDB – [從外部 MariaDB 資料庫將資料匯入 Amazon RDS for MariaDB 資料庫執行個體](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/mariadb-importing-data-external-database.html)