AWS Database Migration Service
分步迁移指南 (API 版本 2016-01-01)
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

将与 MySQL 兼容的数据库迁移到 Amazon Aurora MySQL

如果数据库支持 InnoDB 或 MyISAM 表空间,则可以使用以下选项将数据迁移到 Amazon Aurora MySQL 数据库集群:

使用 Amazon S3 将数据从外部 MySQL 数据库迁移到 Amazon Aurora MySQL

您可以从源 MySQL 版本 5.5 或 5.6 数据库中将源文件复制到 Amazon S3 存储桶,然后从这些文件还原 Amazon Aurora MySQL 数据库集群。

此选项可能比使用 mysqldump 迁移数据要快得多,因为使用 mysqldump 可重放所有命令以便在新的 Amazon Aurora MySQL 数据库集群中从源数据库重新创建架构和数据。通过复制源 MySQL 数据文件,Amazon Aurora MySQL 可以立即将这些文件用作数据库集群的数据。

注意

亚太地区(孟买)区域不支持通过 Amazon S3 存储桶中的备份文件还原 Amazon Aurora MySQL 数据库集群。

Amazon Aurora MySQL 不会还原数据库中的所有内容。您应从源 MySQL 或 MariaDB 数据库保存数据库架构和以下项目的值,然后将这些内容添加到已还原的 Amazon Aurora MySQL 数据库集群(在创建此集群后)。

  • 用户账户

  • 函数

  • 存储过程

  • 时区信息。从 Amazon Aurora MySQL 数据库集群的本地操作系统中加载时区信息。

先决条件

在将数据复制到 Amazon S3 存储桶并从这些文件还原数据库集群之前,您必须执行以下操作:

  • 在您的本地服务器上安装 Percona XtraBackup。

  • 准许 Amazon Aurora MySQL 代表您访问您的 Amazon S3 存储桶。

安装 Percona XtraBackup

Amazon Aurora MySQL 可以从使用 Percona XtraBackup 创建的文件还原数据库集群。您可以从 Percona 网站 https://www.percona.com/doc/percona-xtrabackup/2.4/installation 安装 Percona XtraBackup。

所需权限

要将 MySQL 数据迁移到 Amazon Aurora MySQL 数据库集群,需要几种权限:

  • 请求该 Amazon RDS 从 Amazon S3 存储桶创建新集群的用户必须有权列出您的 AWS 账户的存储桶。通过使用 AWS Identity and Access Management (IAM) 策略,可以向用户授予此权限。

  • Amazon RDS 需要代表您访问 Amazon S3 存储桶(在该存储桶中,您存储了用于创建 Amazon Aurora MySQL 数据库集群的文件)的权限。通过使用 IAM 服务角色,可以向 Amazon RDS 授予必需的权限。

  • 提出请求的用户还必须有权列出您的 AWS 账户的 IAM 角色。

  • 如果提出请求的用户将创建 IAM 服务角色或将请求 Amazon RDS 创建 IAM 服务角色(通过使用控制台),则用户必须有权为您的 AWS 账户创建 IAM 角色。

例如,以下 IAM 策略向用户授予使用控制台列出 IAM 角色、创建 IAM 角色和列出您的账户的 S3 存储桶所需的最低权限。

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

此外,为使用户可以将 IAM 角色与 S3 存储桶关联,IAM 用户必须具有该 IAM 角色的 iam:PassRole 权限。此权限允许管理员限制用户可关联到 S3 存储桶的 IAM 角色。

例如,以下 IAM 策略允许用户将名为 S3Access 的角色与 S3 存储桶关联。

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

创建 IAM 服务角色

可以通过选择选择新角色选项(本主题稍后将展示),让 Amazon RDS 管理控制台为您创建角色。如果选择此选项并为新角色指定名称,那么 Amazon RDS 将使用您提供的名称创建 Amazon RDS 访问 S3 存储桶所需的 IAM 服务角色。

作为替代方法,您可以使用以下程序手动创建角色。

为 Amazon RDS 创建 IAM 角色以便访问 Amazon S3

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

  2. 在左侧导航窗格中,选择 Roles

  3. 选择 Create New Role,为新角色指定 Role Name 值,然后选择 Next Step

  4. AWS Service Roles 下,找到 Amazon RDS 并选择 Select

  5. 请勿选择策略以附加在 Attach Policy 步骤中,而是选择 Next Step

  6. 检查角色信息,然后选择 Create Role

  7. 在角色列表中,选择您新创建的角色的名称。选择 Permissions 选项卡。

  8. 选择 Inline Policies。由于您的新角色没有附加策略,系统将提示您创建一个。单击链接可创建新的策略。

  9. Set Permissions 页面上,选择 Custom Policy,然后选择 Select

  10. 键入 Policy Name,例如 S3-bucket-policy。为策略文档添加以下代码,从而将 <存储桶名称> 替换为您允许访问的 S3 存储桶的名称。

    作为策略文档的一部分,您还可以包含文件名前缀。如果指定前缀,则 Amazon Aurora MySQL 将使用 S3 存储桶中以指定前缀开头的文件创建数据库集群。如果不指定前缀,则 Amazon Aurora MySQL 将使用 S3 存储桶中的所有文件创建数据库集群。

    要指定前缀,请将 <prefix> 替换为文件名的前缀。在前缀后面包含星号 (*)。如果您不想指定前缀,请仅指定星号。

    { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "s3:ListBucket", "s3:GetBucketLocation" ], "Resource": [ "arn:aws:s3:::<bucket name>" ] }, { "Effect": "Allow", "Action": [ "s3:GetObject" ], "Resource": [ "arn:aws:s3:::<bucket name>/<prefix>*" ] } ] }
  11. 选择 Apply Policy

步骤 1:备份文件以还原为数据库群集

要创建 MySQL 数据库文件的备份,以便从 S3 还原它来创建 Amazon Aurora MySQL 数据库集群,请使用 Percona Xtrabackup 实用工具 (innobackupex) 备份数据库。

例如,以下命令创建 MySQL 数据库的备份并将备份文件存储在 /s3-restore/backup 文件夹中。

innobackupex --user=myuser --password=<password> --no-timestamp /s3-restore/backup

如果您要将备份压缩为单个文件(可在需要时进行拆分),则可以使用 --stream 选项来采用下列格式之一保存备份:

  • Gzip (.gz)

  • tar (.tar)

  • Percona xbstream (.xbstream)

例如,以下命令为您的 MySQL 数据库创建一个拆分成多个 Gzip 文件的备份。显示的参数值适用于小型测试数据库;对于您的情况,应确定所需的参数值。

innobackupex --user=myuser --password=<password> --stream=tar \ /mydata/s3-restore/backup | split -d --bytes=512000 \ - /mydata/s3-restore/backup3/backup.tar.gz

例如,以下命令为您的 MySQL 数据库创建一个拆分成多个 tar 文件的备份。

innobackupex --user=myuser --password=<password> --stream=tar \ /mydata/s3-restore/backup | split -d --bytes=512000 \ - /mydata/s3-restore/backup3/backup.tar

例如,以下命令为您的 MySQL 数据库创建一个拆分成多个 xbstream 文件的备份。

innobackupex --stream=xbstream \ /mydata/s3-restore/backup | split -d --bytes=512000 \ - /mydata/s3-restore/backup/backup.xbstream

Amazon S3 将上传至存储桶的文件大小限制为 5 TB。如果数据库的备份数据超过 5 TB,您就必须使用 split 命令将备份文件拆分为多个文件,每个小于 5 TB。

Amazon Aurora MySQL 不支持使用 Percona Xtrabackup 创建的部分备份。您无法在备份数据库的源文件时使用 --include--tables-file--databases 选项创建部分备份。

有关更多信息,请参阅 innobackupex 脚本

Amazon Aurora MySQL 根据文件名使用您的备份文件。确保根据文件格式为备份文件指定相应的文件扩展名,例如对于使用 Percona xbstream 格式存储的文件,指定 .xbstream

Amazon Aurora MySQL 按照字母顺序以及自然数字顺序使用您的备份文件。始终在您发出 innobackupex 命令时使用 split 选项,以确保备份文件按适当的顺序写入和命名。

步骤 2:将文件复制到 Amazon S3 存储桶

您使用 Percona Xtrabackup 实用工具备份 MySQL 数据库后,可以将备份文件复制到 Amazon S3 存储桶。

有关创建文件并将其上传到 Amazon S3 存储桶的信息,请参阅 Amazon S3 入门指南 中的 Amazon Simple Storage Service 入门

步骤 3:从 Amazon S3 存储桶还原 Aurora MySQL 数据库集群

可以通过使用 Amazon RDS 控制台,从 Amazon S3 存储桶还原备份文件以创建新的 Amazon Aurora MySQL 数据库集群。

通过 S3 存储桶上的文件还原 Amazon Aurora MySQL 数据库集群

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

  2. 在 RDS 控制面板中,选择 Restore Aurora MySQL DB Cluster from S3 (从 S3 还原 Aurora MySQL 数据库集群)

  3. Specify Source Backup Details 中,指定以下内容:

    对于此选项 执行该操作

    Source Engine

    Amazon Aurora MySQL 当前仅支持针对 mysql 数据库引擎从备份文件还原。

    Source Engine Version

    指定从中创建备份文件的 MySQL 数据库的版本,例如 5.6.22。支持 MySQL 版本 5.5 和 5.6。

    Select S3 Bucket

    选择存储了备份文件的 Amazon S3 存储桶。

    S3 Bucket Prefix(可选)

    为在 Amazon S3 存储桶中存储的文件指定文件路径前缀。S3 Bucket Prefix 是可选的。如果未指定前缀,则 Amazon Aurora MySQL 将使用 S3 存储桶的根文件夹中的所有文件创建数据库集群。如果指定前缀,Amazon Aurora MySQL 将使用 S3 存储桶中完整路径以指定前缀开头的文件创建数据库集群。

    Amazon Aurora MySQL 不会遍历 S3 存储桶中的子文件夹来查找备份文件。仅使用由 S3 Bucket Prefix 标识的文件夹中的文件。如果将您的备份文件存储在 S3 存储桶中的子文件夹中,则必须指定一个标识用于存储文件的文件夹的完整路径的前缀。

    例如,如果将您的备份文件存储在 S3 存储桶中名为 backups 的子文件夹中,并且您拥有多个备份文件集(每个文件集位于其自己的目录(gzip_backup1gzip_backup2 等)中),则将指定前缀 backups/gzip_backup1 以从 gzip_backup1 文件夹中的文件进行还原。

    IAM 角色

    选择您创建的用于授权 Amazon Aurora MySQL 代表您访问 Amazon S3 的 IAM 角色。如果您尚未创建 IAM 角色,您可以选择 Create a New Role 创建一个。

  4. 选择 Next Step

  5. Specify DB Details 页面上,指定数据库集群信息。下表显示数据库实例的设置。

    对于此选项 执行该操作

    数据库实例类

    选择用于定义数据库集群中的每个实例的处理和内存要求的数据库实例类。Aurora MySQL 支持 db.r3.largedb.r3.xlargedb.r3.2xlargedb.r3.4xlargedb.r3.8xlarge 数据库实例类。有关数据库实例类选项的详细信息,请参阅 Amazon RDS 文档

    Multi-AZ Deployment

    确定是否要在其他可用区中创建 Aurora MySQL 副本以实现故障转移支持。有关多可用区的更多信息,请参阅 Amazon RDS 文档

    DB Instance Identifier

    键入数据库群集中主实例的名称。此标识符将在数据库集群主实例的终端节点地址中使用。

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

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

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

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

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

    Master Username (主用户名)

    使用字母数字字符键入一个名称,该名称将用作您登录数据库群集的主用户名。已授予主用户名账户的默认权限包括:create, drop, references, event, alter, delete, index, insert, select, update, create temporary tables, lock tables, trigger, create view, show view, alter routine, create routine, execute, create user, process, show databases, grant option

    Master Password

    键入一个包含 8 到 41 位可打印 ASCII 字符 (的密码用不包括 /、"、和 @) 用作您的主用户密码。

    典型的 Specify DB Details 页面类似如下所示。

    
                                Amazon Aurora MySQL 启动数据库实例向导数据库实例详细信息
  6. 确认您的主密码,然后选择 Next

  7. Configure Advanced Settings 页面上,可自定义您的 Aurora MySQL 数据库集群的其他设置。下表列出了数据库集群的高级设置。

    对于此选项 执行该操作

    VPC

    选择将托管数据库群集的 VPC。选择 Create a New VPC 以让 Amazon RDS 为您创建 VPC。有关更多信息,请参阅本主题前面的。

    子网组

    选择要用于数据库集群的数据库子网组。选择 Create a New DB Subnet Group 以让 Amazon RDS 为您创建数据库子网组。有关更多信息,请参阅本主题前面的。

    公开访问

    选择 Yes 可向数据库集群提供公有 IP 地址;否则,请选择 No。数据库集群可以混合使用公有和私有数据库实例。有关隐藏实例以防止公开访问的更多信息,请参阅 Amazon RDS 文档

    可用区

    确定您是否希望指定特定的可用区。有关可用区的更多信息,请参阅 Amazon RDS 文档

    VPC 安全组

    选择一个或多个 VPC 安全组以保护对数据库群集的网络访问。选择 Create a New VPC Security Group 以让 Amazon RDS 为您创建 VPC 安全组。有关更多信息,请参阅本主题前面的。

    DB Cluster Identifier

    为数据库集群键入一个名称,该名称在您选择的区域中对于您的账户是唯一的。此标识符将在数据库集群的集群终端节点地址中使用。有关集群终端节点的信息,请参阅 Amazon RDS 文档

    数据库集群标识符具有以下限制:

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

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

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

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

    Database Name

    为您的数据库键入一个含有达 8 位字母和数字字符的名称。如果您未提供名称,Amazon RDS 将不会在您创建的数据库集群上创建数据库。

    Database Port

    指定应用程序和实用工具用来访问数据库的端口。Aurora MySQL 数据库集群默认为使用默认 MySQL 端口 3306。有些公司的防火墙不允许连接到默认的 MySQL 端口.如果您公司的防火墙不允许连接默认端口,请为新数据库集群选择其他端口。

    参数组

    选择参数组。Aurora MySQL 具有一个可使用的默认参数组,或者您也可以创建自己的参数组。有关参数组的更多信息,请参阅 Amazon RDS 文档

    选项组

    选择参数组。Aurora MySQL 具有一个可使用的默认选项组,或者您也可以创建自己的选项组。有关选项组的更多信息,请参阅 Amazon RDS 文档

    启用加密

    选择 Yes 可对此数据库集群启用静态加密。有关更多信息,请参阅 Amazon RDS 文档

    优先级

    选择实例的故障转移优先级。如果您未选择值,则默认值为 tier-1。此优先级决定从主实例故障恢复时提升 Aurora MySQL 副本的顺序。有关更多信息,请参阅 Amazon RDS 文档

    备份保留期

    选择 Aurora MySQL 将保留数据库的备份副本的时间长度(1 到 35 天)。可使用备份副本对数据库执行时间点还原 (PITR),以还原到第二个时间点。

    启用增强监测

    选择 Yes 可实时收集您的数据库集群在其上运行的操作系统的指标。有关更多信息,请参阅 Amazon RDS 文档

    粒度

    此选项仅在 Enable Enhanced Monitoring 设置为 Yes 时可用。设置为数据库集群收集指标的时间之间的间隔 (以秒为单位)。

    Auto Minor Version Upgrade

    如果希望在次要 MySQL 数据库引擎版本升级可用时,让 Aurora MySQL 数据库集群自动接收这些次要升级,请选择

    Auto Minor Version Upgrade 选项仅适用于升级到 Amazon Aurora MySQL 数据库集群的 MySQL 次要引擎版本。它不适用于应用于维持系统稳定性的常规修补程序。

    Maintenance Window

    选择可以进行系统维护的每周时间范围。

    典型 Configure Advanced Settings 页面类似如下所示。

    
                                Amazon Aurora MySQL 启动数据库实例向导配置高级设置
  8. 选择 Launch DB Instance (启动数据库实例) 以启动 Aurora MySQL 数据库实例,然后选择 Close (关闭) 以关闭该向导。

    在 Amazon RDS 控制台中,新数据库实例显示在数据库实例列表中。数据库实例具有 creating 状态,直到该数据库实例完成创建并可供使用。当状态更改为 available 时,您可连接到数据库群集的主实例。根据所分配的数据库实例类和存储的不同,新实例可能需要数分钟时间才能变得可用。

    要查看新创建的集群,请选择 Amazon RDS 控制台中的 Clusters (集群) 视图。有关更多信息,请参阅 Amazon RDS 文档

    
                                Amazon Aurora MySQL 数据库实例列表

    记下群集的端口和终端节点。在执行写入或读取操作的任何应用程序的 JDBC 和 ODBC 连接字符串中,使用集群的终端节点和端口。

使用 mysqldump 将 MySQL 迁移到 Amazon Aurora MySQL

您可以使用 mysqldump 实用工具创建数据的转储,然后将该数据导入现有的 Amazon Aurora MySQL 数据库集群。

因为 Amazon Aurora MySQL 是与 MySQL 兼容的数据库,所以您可以使用 mysqldump 实用工具从 MySQL 或 MariaDB 数据库中将数据复制到现有 Amazon Aurora MySQL 数据库集群。