Amazon Aurora
Aurora 用户指南 (API 版本 2014-10-31)
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

将 RDS MySQL 快照迁移到 Aurora

您可以迁移 Amazon RDS MySQL 数据库实例的数据库快照以创建 Aurora MySQL 数据库集群。将使用原始 Amazon RDS MySQL 数据库实例中的数据填充新的 Aurora MySQL 数据库集群。必须已从运行 MySQL 版本 5.6 或 5.7 的 Amazon RDS 数据库实例创建数据库快照。

手动数据库快照和自动数据库快照都可以迁移。创建数据库集群后,您可创建可选 Aurora 副本。

如果 MySQL 数据库实例和 Aurora 数据库集群运行相同版本的 MySQL,您可以将 MySQL 快照直接还原到 Aurora 数据库集群。例如,您可以将 MySQL 5.6 版快照直接还原到 Aurora MySQL 5.6 版,但无法将 MySQL 5.6 版快照直接还原到 Aurora MySQL 5.7 版。

如果您要将 MySQL 5.6 版本快照迁移到 Aurora MySQL 5.7 版本,可以使用以下一种方法执行迁移:

  • 将 MySQL 5.6 版快照迁移到 Aurora MySQL 5.6 版,拍摄 Aurora MySQL 5.6 版数据库集群快照,然后将 Aurora MySQL 5.6 版快照还原到 Aurora MySQL 5.7 版。

  • 将 MySQL 版本 5.6 快照升级到 MySQL 版本 5.7,拍摄 MySQL 版本 5.7 数据库实例的快照,然后将 MySQL 版本 5.7 快照还原到 Aurora MySQL 版本 5.7。

注意

您还可以创建源 MySQL 数据库实例的 Aurora 只读副本,以将 MySQL 数据库实例迁移到 Aurora MySQL 数据库集群。有关更多信息,请参阅使用 Aurora 只读副本将数据从 MySQL 数据库实例迁移到 Amazon Aurora MySQL 数据库集群

MySQL 和 Aurora MySQL 之间的不兼容性包括:

  • 无法将 MySQL 版本 5.7 快照迁移到 Aurora MySQL 版本 5.6。

  • 无法将使用 MySQL 5.6.40 或 5.7.22 创建的数据库快照迁移到 Aurora MySQL。

您必须采取的常见步骤如下:

  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 来扩展您的压缩表。有关更多信息,请参阅 https://dev.mysql.com/doc/refman/5.6/en/innodb-row-format.html

您可以在现有 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. ' + '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)

AWS 管理控制台

您可以迁移 Amazon RDS MySQL 数据库实例的数据库快照以创建 Aurora MySQL 数据库集群。将使用原始 Amazon RDS MySQL 数据库实例中的数据填充新的 Aurora MySQL 数据库集群。必须已从运行 MySQL 版本 5.6 或 5.7 的 Amazon RDS 数据库实例创建数据库快照。有关创建数据库快照的信息,请参阅创建数据库快照

如果数据库快照不在要从中找到数据的 AWS 区域中,请使用 Amazon RDS 控制台将数据库快照复制到该 AWS 区域。有关复制数据库快照的信息,请参阅复制数据库快照

使用 AWS 管理控制台迁移数据库快照时,控制台将执行必要的操作创建数据库集群和主实例。

您还可以选择使用 AWS Key Management Service (AWS KMS) 加密密钥静态加密新的 Aurora MySQL 数据库集群。

使用 AWS 管理控制台迁移 MySQL 数据库快照

  1. 登录 AWS 管理控制台 并通过以下网址打开 Amazon RDS 控制台:https://console.amazonaws.cn/rds/

  2. 从 MySQL 数据库实例或快照中开始迁移:

    要从数据库实例中开始迁移,请执行以下操作:

    1. 在导航窗格中,选择实例,然后选择 MySQL 数据库实例。

    2. 选择实例操作,然后选择迁移最新的快照

    要从快照中开始迁移,请执行以下操作:

    1. 选择 Snapshots

    2. Snapshots 页面上,选择要迁移到 Aurora MySQL 数据库集群的快照。

    3. 选择快照操作,然后选择迁移快照

    将显示迁移数据库页。

  3. Migrate Database 页面上设置以下值:

    • 迁移到数据库引擎:选择 aurora

    • 数据库引擎版本:选择 Aurora MySQL 数据库集群的数据库引擎版本。

    • 数据库实例类:选择具有数据库所需的存储和容量的数据库实例类,例如 db.r3.large。Aurora 集群卷随数据库中的数据量增长而自动扩展,最多达到最大大小 (64 TiB)。因此,您只需选择满足当前存储要求的数据库实例类。有关更多信息,请参阅Aurora 存储概述

    • 数据库实例标识符:为数据库集群输入一个名称,该名称在您选择的 AWS 区域中对于您的账户是唯一的。此标识符将在数据库集群中实例的终端节点地址中使用。您可以选择对该名称进行一些巧妙处理,例如,包括选定的 AWS 区域和数据库引擎(如 aurora-cluster1)。

      数据库实例标识符具有以下限制:

      • 它必须包含 1 到 63 个字母数字字符或连字符。

      • 它的第一个字符必须是字母。

      • 它不能以连字符结束或包含两个连续连字符。

      • 它对于每个 AWS 区域的每个 AWS 账户的所有数据库实例必须是唯一的。

    • Virtual Private Cloud (VPC):如果已具有 VPC,您可以选择 VPC 标识符(如 vpc-a464d1c1)以将该 VPC 用于 Aurora MySQL 数据库集群。有关使用现有 VPC 的信息,请参阅如何创建 VPC 以用于 Amazon Aurora

      否则,可以通过选择 Create a new VPC,让 Amazon RDS 为您创建 VPC。

    • 子网组:如果已具有子网组,您可以选择子网组标识符(如 gs-subnet-group1)以将该子网组用于 Aurora MySQL 数据库集群。

      否则,可以通过选择 Create a new subnet group,让 Amazon RDS 为您创建子网组。

    • 公有可访问性:选择以指定仅 VPC 中的资源可以访问数据库集群中的实例。选择 Yes 可指定数据库集群中的实例可以由公用网络上的资源访问。默认值为 Yes

      注意

      您的生产数据库集群可能不需要位于公有子网中,因为仅应用程序服务器将需要访问数据库集群。如果数据库集群不需要位于公有子网中,请将 Publicly Accessible 设置为 No

    • 可用区:选择可用区以托管 Aurora MySQL 数据库集群的主实例。要让 Amazon RDS 选择可用区,请选择 No Preference (无首选项)

    • 数据库端口:键入在连接到 Aurora MySQL 数据库集群中的实例时使用的默认端口。默认为 3306

      注意

      您可能位于企业防火墙后面,该防火墙不允许访问默认端口 (例如,MySQL 默认端口 3306)。在此情况下,请提供企业防火墙允许的端口值。请记住此端口值,以便在稍后连接到 Aurora MySQL 数据库集群时使用。

    • 加密:为要静态加密的新 Aurora MySQL 数据库集群选择启用加密。如果选择启用加密,您必须选择一个 AWS KMS 加密密钥以作为主密钥值。

      如果数据库快照未加密,请指定一个加密密钥来对数据库集群进行静态加密。

      如果数据库快照已加密,请指定一个加密密钥,以便使用指定的加密密钥对您的数据库集群进行静态加密。您可以指定数据库快照使用的加密密钥或其他密钥。您无法从加密的数据库快照创建未加密的数据库集群。

    • 自动次要版本升级:该设置不适用于 Aurora MySQL 数据库集群。

      有关 Aurora MySQL 引擎更新的更多信息,请参阅Amazon Aurora MySQL 的数据库引擎更新

  4. 选择 Migrate 以迁移您的数据库快照。

  5. 选择 Instances,然后选择箭头图标以显示数据库集群详细信息并监控迁移的进度。在详细信息页面上,您可以找到用于连接到数据库集群的主实例的集群终端节点。有关连接到 Aurora MySQL 数据库集群的更多信息,请参阅连接到 Amazon Aurora 数据库集群

CLI

可迁移 Amazon RDS MySQL 数据库实例的数据库快照来创建 Aurora 数据库集群。然后,将使用数据库快照中的数据填充新的数据库集群。数据库快照必须来自运行 MySQL 5.6 或 5.7 版的 Amazon RDS 数据库实例。有关更多信息,请参阅创建数据库快照

如果数据库快照不在您要找到数据的 AWS 区域中,请将数据库快照复制到该 AWS 区域。有关更多信息,请参阅复制数据库快照

您可以使用包含以下参数的 restore-db-cluster-from-snapshot 命令通过 Amazon RDS MySQL 数据库实例的数据库快照创建 Aurora 数据库群集:

  • --db-cluster-identifier

    要创建的数据库集群的名称。

  • --engine aurora-mysql(对于 MySQL 5.7 兼容数据库集群)或 --engine aurora(对于 MySQL 5.6 兼容数据库集群)

  • --kms-key-id

    用于选择性加密数据库集群的 AWS Key Management Service (AWS KMS) 加密密钥,具体取决于是否加密了数据库快照。

    • 如果数据库快照未加密,请指定一个加密密钥来对数据库集群进行静态加密。否则,不会对您的数据库集群进行加密。

    • 如果数据库快照已加密,请指定一个加密密钥,以便使用指定的加密密钥对您的数据库集群进行静态加密。否则,您的数据库集群将使用数据库快照的加密密钥进行静态加密。

      注意

      您无法从加密的数据库快照创建未加密的数据库集群。

  • --snapshot-identifier

    要迁移的数据库快照的 Amazon 资源名称 (ARN)。有关 Amazon RDS ARN 的更多信息,请参阅 Amazon Relational Database Service (Amazon RDS)

在使用 RestoreDBClusterFromSnapshot 命令迁移数据库快照时,该命令将创建数据库集群和主实例。

在该示例中,您从将 ARN 设置为 mydbsnapshotARN 的数据库快照创建一个名为 mydbcluster 的 MySQL 5.7 兼容数据库集群。

针对 Linux、OS X 或 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 的数据库快照创建一个名为 mydbcluster 的 MySQL 5.6 兼容数据库集群。

针对 Linux、OS X 或 Unix:

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

对于 Windows:

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