將 RDS for MySQL 快照遷移至 Aurora - Amazon Aurora

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

將 RDS for MySQL 快照遷移至 Aurora

您可以遷移 RDS for MySQL 資料庫執行個體的資料庫快照,以建立 Aurora MySQL 資料庫叢集。新的 Aurora MySQL 資料庫叢集會使用來自原始 RDS for MySQL 資料庫執行個體的資料填入。資料庫快照必須是從執行 MySQL 版本 (與 Aurora MySQL 相容) 的 Amazon RDS 資料庫執行個體建立。

您可以遷移手動或自動資料庫快照。建立資料庫叢集之後,您就可以建立選用的 Aurora 複本。

注意

您也可以建立來源 RDS for MySQL 資料庫執行個體的 Aurora 僅供讀取複本,以便將 RDS for MySQL 資料庫執行個體遷移至 Aurora MySQL 資料庫叢集。如需詳細資訊,請參閱使用 Aurora 讀取複本,從 RDS for MySQL 資料庫執行個體將資料遷移至 Amazon Aurora MySQL 資料庫叢集

您無法從某些舊版 MySQL 8.0 版本 (包括 8.0.11、8.0.13 和 8.0.15) 遷移到 Aurora MySQL 版本 3.05 及更高版本。建議您在遷移之前,先升級至 MySQL 8.0.28 版。

您必須採取的一般步驟如下:

  1. 決定要佈建給 Aurora MySQL 資料庫叢集的空間數量。如需更多詳細資訊,請參閱 我需要多少空間?

  2. 使用主控台在 Amazon RDS MySQL 執行個體所在的 AWS 區域建立快照。如需建立資料庫快照的相關資訊,請參閱建立資料庫快照

  3. 如果資料庫快照和資料庫叢集不是位於相同的 AWS 區域,請使用 Amazon RDS 主控台將資料庫快照複製到該 AWS 區域。如需複製資料庫快照的相關資訊,請參閱複製資料庫快照

  4. 使用主控台來遷移資料庫快照,並使用與原始 MySQL 資料庫執行個體相同的資料庫建立 Aurora MySQL 資料庫叢集。

警告

Amazon RDS 限制每個 AWS 帳戶一次只能將一個快照複製到每個 AWS 區域。

我需要多少空間?

當您將 MySQL 資料庫執行個體的快照遷移至 Aurora MySQL 資料庫叢集時,Aurora 在遷移快照之前,將會先使用 Amazon Elastic Block Store (Amazon EBS) 磁碟區來格式化快照中的資料。在某些情況下,需要額外的空間以格式化準備遷移的資料。

如果資料表不是 MyISAM 資料表且未壓縮,則最大為 16 TB。如果您有 MyISAM 資料表,則 Aurora 必須使用磁碟區中額外的空間,將資料表轉換成與 Aurora MySQL 相容。如果您有壓縮的資料表,則 Aurora 必須使用磁碟區中額外的空間將這些資料表解壓縮,再存放於 Aurora 叢集磁碟區。由於需要此額外空間,請確定要從 MySQL 資料庫執行個體遷移的 MyISAM 和壓縮資料表的大小皆未超過 8 TB。

減少將資料遷移至 Amazon Aurora MySQL 所需的空間量

您可能想要先修改資料庫結構描述再遷移至 Amazon Aurora。在下列情況中,如此修改可能相當實用:

  • 您想要加快遷移程序的速度。

  • 您不確定必須佈建多少空間。

  • 您已嘗試遷移資料,但因為佈建的空間不足導致遷移失敗。

您可以進行下列變更,以改善將資料庫移遷移至 Amazon Aurora 的程序。

重要

務必在從生產資料庫的快照所還原的新資料庫執行個體上執行這些更新,而非在生產執行個體上。然後,您可以從新資料庫執行個體的快照將資料遷移至 Aurora 資料庫叢集,以避免生產資料庫上的任何服務中斷。

資料表類型 限制或指導方針

MyISAM 資料表

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 建立的資料表)。

若要盡可能避免空間不足,或想要加速遷移程序,請將 ROW_FORMAT 設為 DEFAULTCOMPACTDYNAMICREDUNDANT,以展開壓縮資料表。如需詳細資訊,請參閱 MySQL 文件中的 InnoDB 資料列格式

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

-- This script examines a MySQL database for conditions that block -- migrating the database into Amazon Aurora. -- It needs to 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' );

指令碼產生的輸出類似於下列範例中的輸出。範例顯示兩個必須從 MyISAM 轉換成 InnoDB 的資料表。輸出也包含每個資料表的大約大小 (以 MB 為單位)。

+---------------------------------+------------------+ | ==> MyISAM or Compressed Tables | Approx size (MB) | +---------------------------------+------------------+ | test.name_table | 2102.25 | | test.my_table | 65.25 | +---------------------------------+------------------+ 2 rows in set (0.01 sec)

將 RDS for MySQL 資料庫快照遷移至 Aurora MySQL 資料庫叢集

您可以遷移 RDS for MySQL 資料庫執行個體的資料庫快照,以使用 AWS Management Console 或 AWS CLI 建立 Aurora MySQL 資料庫叢集。新的 Aurora MySQL 資料庫叢集會使用來自原始 RDS for MySQL 資料庫執行個體的資料填入。如需建立資料庫快照的相關資訊,請參閱建立資料庫快照

如果資料庫快照不在您要存放資料的 AWS 區域,請將資料庫快照複製到該 AWS 區域。如需複製資料庫快照的相關資訊,請參閱複製資料庫快照

使用 AWS Management Console 遷移資料庫快照時,控制台會進行建立資料庫叢集和主要執行個體所需的操作。

您也可以選擇使用 AWS KMS key,為新的 Aurora MySQL 資料庫叢集進行靜態加密。

使用 AWS Management Console遷移 MySQL 資料庫快照
  1. 登入 AWS Management Console,開啟位於 https://console.aws.amazon.com/rds/ 的 Amazon RDS 主控台。

  2. 從 MySQL 資料庫執行個體或從快照來開始遷移:

    從資料庫執行個體開始遷移:

    1. 在導覽窗格中,選擇 Databases (資料庫),然後選取 MySQL 資料庫執行個體。

    2. Actions (動作) 中,選擇 Migrate latest snapshot (遷移最新的快照)。

    若要從快照開始遷移,請執行以下操作:

    1. 選擇 Snapshots (快照)

    2. Snapshots (快照) 頁面上,選擇您要遷移至 Aurora MySQL 資料庫叢集的快照。

    3. 選擇 Snapshot Actions (快照動作),然後選擇 Migrate Snapshot (遷移快照)

    Migrate Database (遷移資料庫) 頁面隨即出現。

  3. Migrate Database (遷移資料庫) 頁面上設定下列值:

    • Migrate to DB Engine (遷移至資料庫引擎):選取 aurora

    • DB Engine Version (資料庫引擎版本):選取 Aurora MySQL 資料庫叢集的資料庫引擎版本。

    • DB Instance Class (資料庫執行個體類別):為您的資料庫選取具有所需儲存體和容量的資料庫執行個體類別,例如 db.r3.large。Aurora 叢集磁碟區會隨著您的資料庫中的資料數量增加自動成長。Aurora 叢集磁碟區的大小最多可增長至 128 tebibytes (TiB)。因此,您只需選擇滿足目前儲存體需求的資料庫執行個體。如需更多詳細資訊,請參閱 Amazon Aurora 儲存體的概觀

    • DB Instance Identifier (資料庫執行個體識別符):鍵入資料庫叢集的名稱,在您所選取 AWS 區域中的帳戶內要是唯一的名稱。此識別符用於資料庫叢集內執行個體的端點位址。您可以選擇在名稱中增加一些情報 (像是包括您選取的 AWS 區域和資料庫引擎),例如 aurora-cluster1

      該資料庫執行個體識別符有下列限制:

      • 必須包含 1 到 63 個英數字元或連字號。

      • 第一個字元必須是字母。

      • 不能以一個連字號結尾或是連續包含兩個連字號。

      • 對每個 AWS 區域中每個 AWS 帳戶的所有資料庫執行個體必須是唯一的。

    • Virtual Private Cloud (VPC):如果具有現有的 VPC,您可以選取 VPC 識別符,例如 vpc-a464d1c1,將該 VPC 用於 Aurora MySQL 資料庫叢集。如需建立 VPC 的詳細資訊,請參閱 教學課程:建立要與資料庫叢集搭配使用的 VPC (僅限 IPv4)

      否則,您可以選擇由 Aurora 為您建立 VPC,方法為選取 Create a new VPC (建立新的 VPC)

    • DB Subnet group (資料庫子網路群組):如果具有現有的子網路群組,您可以選取子網路群組識別符,例如 gs-subnet-group1,將該子網路群組用於 Aurora MySQL 資料庫叢集。

      否則,您可以選擇由 Aurora 為您建立子網路群組,方法為選取 Create a new subnet group (建立新的子網路群組)

    • Public a ccessibility (公開存取性):選擇 No (否),以指定資料庫叢集中的執行個體只能由 VPC 內的資源存取。選取 Yes (是),以指定公有網路上的資源可以存取資料庫叢集內的執行個體。預設值為 Yes (是)

      注意

      生產資料庫叢集可能不必位於公有子網路中,因為只有應用程式伺服器才需要存取資料庫叢集。如果您的資料庫叢集不必位於公有子網路中,將 Publicly Accessible (公開存取性) 設為 No (否)

    • Availability zone (可用區域):選取可用區域以託管 Aurora MySQL 資料庫叢集的主要執行個體。若要讓 Aurora 為您選擇可用區域,請選取 No Preference (無偏好設定)

    • Database Port (資料庫連接埠):輸入要在連接至 Aurora MySQL 資料庫叢集中的執行個體時使用的預設連接埠。預設值為 3306

      注意

      您可能在公司防火牆的後方,而此防火牆不允許存取預設連接埠,例如 MySQL 預設連接埠 3306。在此情況下,提供公司防火牆允許的連接埠值。稍後連線至 Aurora MySQL 資料庫叢集時,請記住該連接埠值。

    • Encryption (加密):選擇 Enable Encryption (啟用加密),對新的 Aurora MySQL 資料庫叢集進行靜態加密。如果您選擇 Enable Encryption (啟用加密),則必須選擇 KMS 金鑰作為 AWS KMS key值。

      如果資料庫快照未加密,請指定加密金鑰,以便對資料庫叢集進行靜態加密。

      如果資料庫快照已加密,請指定加密金鑰,以使用指定的加密金鑰對資料庫叢集進行靜態加密。您可以指定資料庫快照所使用的加密金鑰,或不同的金鑰。您無法從已加密的資料庫快照來建立未加密的資料庫叢集。

    • Auto Minor Version Upgrade (自動次要版本升級):此設定不適用於 Aurora MySQL 資料庫叢集。

      如需 Aurora MySQL 引擎更新的詳細資訊,請參閱 Amazon Aurora MySQL 的資料庫引擎更新

  4. 選擇 Migrate (遷移) 以遷移您的資料庫快照。

  5. 選擇 Instances (執行個體),然後選擇箭頭圖示以顯示資料庫叢集詳細資訊並監控遷移進度。在詳細資訊頁面上,您可以找到用於連接至資料庫叢集之主要執行個體的叢集端點。如需連接至 Aurora MySQL 資料庫叢集的詳細資訊,請參閱連接至 Amazon Aurora 資料庫叢集

您可以使用 restore-db-cluster-from-snapshot 命令和下列參數,從 RDS for MySQL 資料庫執行個體的資料庫快照來建立 Aurora 資料庫叢集:

  • --db-cluster-identifier – 要建立的資料庫叢集名稱。

  • --engine aurora-mysql – 適用於 MySQL 5.7 相容或 8.0 相容的資料庫叢集。

  • --kms-key-id – 用於選擇性加密資料庫叢集的 AWS KMS key,視資料庫快照是否加密而定。

    • 如果資料庫快照未加密,請指定加密金鑰,以便對資料庫叢集進行靜態加密。否則,資料庫叢集不會加密。

    • 如果資料庫快照已加密,請指定加密金鑰,以使用指定的加密金鑰對資料庫叢集進行靜態加密。否則會使用資料庫快照的加密金鑰,對資料庫叢集進行靜態加密。

      注意

      您無法從已加密的資料庫快照來建立未加密的資料庫叢集。

  • --snapshot-identifier – 要遷移之資料庫快照的 Amazon 資源名稱 (ARN)。如需 Amazon RDS ARN 的詳細資訊,請參閱 Amazon Relational Database Service (Amazon RDS)

當您使用 RestoreDBClusterFromSnapshot 命令來遷移資料庫快照時,此命令會建立資料庫叢集和主要執行個體。

在此範例中,您從 ARN 設為 mydbsnapshotARN 的資料庫快照,建立 MySQL 5.7 相容的資料庫叢集,名為 mydbcluster

對於LinuxmacOS、或Unix:

aws rds restore-db-cluster-from-snapshot \ --db-cluster-identifier mydbcluster \ --snapshot-identifier mydbsnapshotARN \ --engine aurora-mysql

在Windows中:

aws rds restore-db-cluster-from-snapshot ^ --db-cluster-identifier mydbcluster ^ --snapshot-identifier mydbsnapshotARN ^ --engine aurora-mysql

在此範例中,您從 ARN 設為 mydbsnapshotARN 的資料庫快照,建立 MySQL 5.7 相容的資料庫叢集,名為 mydbcluster

對於LinuxmacOS、或Unix:

aws rds restore-db-cluster-from-snapshot \ --db-cluster-identifier mydbcluster \ --snapshot-identifier mydbsnapshotARN \ --engine aurora-mysql

在Windows中:

aws rds restore-db-cluster-from-snapshot ^ --db-cluster-identifier mydbcluster ^ --snapshot-identifier mydbsnapshotARN ^ --engine aurora-mysql