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

将备份还原到 Amazon RDS MySQL 数据库实例

Amazon RDS 支持使用备份文件导入 MySQL 数据库。您可以创建本地数据库的备份,将备份存储在 Amazon S3 上,然后将该备份文件还原到运行 MySQL 的新 Amazon RDS 数据库实例上。

您可在下图中查找支持的场景。

MySQL 从 S3 架构中导入备份文件

MySQL 5.6 版支持从 Amazon S3 中导入备份文件 。在所有 AWS 区域中,可以从 Amazon S3 中导入备份文件。

如果在创建、复制和还原备份文件时您的数据库可以处于脱机状态,我们建议您使用备份文件将数据库导入到 Amazon RDS 中。如果本地数据库无法处于脱机状态,在通过 Amazon S3 迁移到 Amazon RDS 后,您可以使用二进制日志复制更新您的数据库,如本主题中所述。有关更多信息,请参阅 利用 Amazon RDS 外部运行的 MySQL 或 MariaDB 实例进行复制。也可以使用 AWS Database Migration Service 将数据库迁移到 Amazon RDS 中。有关更多信息,请参阅什么是 AWS Database Migration Service?

将备份文件从 Amazon S3 导入到 Amazon RDS 的限制和建议

以下是从 Amazon S3 中导入备份文件的一些限制和建议:

  • 您只能将数据导入到新数据库实例中,而不能导入到现有的数据库实例中。

  • 您必须使用 Percona XtraBackup 创建本地数据库的备份。

  • 您无法从在默认 MySQL 数据目录外部定义表的源数据库中迁移。

  • 您无法导入 MySQL 5.5 或 5.7 数据库。

  • 您无法将本地 MySQL 5.6 数据库导入到 Amazon RDS MySQL 5.7 数据库。在导入完成后,您可以升级数据库实例。

  • 您无法还原大小超过 6 TB 的数据库。

  • 您无法从加密的源数据库中还原,但可以还原到加密的 Amazon RDS 数据库实例。

  • 无法加密您的 Amazon S3 存储桶。

  • 无法从与您的 Amazon RDS 数据库实例不同的 AWS 区域上的 Amazon S3 存储桶中进行还原。

  • 在 db.t2.micro 数据库实例类上不支持从 Amazon S3 导入。不过,您可以还原到不同的数据库实例类,并稍后更改该实例类。有关实例类的更多信息,请参阅所有可用数据库实例类的规范

  • Amazon S3 将上传到 Amazon S3 存储桶的文件大小限制为 5 TB。如果备份文件超过 5 TB,则必须将备份文件拆分为较小的文件。

  • Amazon RDS 将上传到 Amazon S3 存储桶的文件数限制为 100 万个。如果数据库的备份数据 (包括所有完整和增量备份) 超过 100 万个文件,请使用 tarball (.tar.gz) 文件将完整和增量备份文件存储在 Amazon S3 存储桶中。

  • 不会自动导入用户账户。请从源数据库中保存您的用户账户,并稍后将其添加到新数据库实例中。

  • 不会自动导入函数。请从源数据库中保存您的函数,并稍后将其添加到新数据库实例中。

  • 不会自动导入存储过程。请从源数据库中保存您的存储过程,并稍后将其添加到新数据库实例中。

  • 不会自动导入时区信息。请记录源数据库的时区信息,并稍后设置新数据库实例的时区。有关更多信息,请参阅 MySQL 数据库实例的本地时区

  • 主要版本和次要版本均不支持反向迁移。例如,您不能从版本 5.7 迁移到版本 5.6,也不能从版本 5.6.39 迁移到版本 5.6.37。

设置以将备份文件从 Amazon S3 导入到 Amazon RDS 的概述

您需要设置一些组件以将备份文件从 Amazon S3 导入到 Amazon RDS 中:

  • 用于存储备份文件的 Amazon S3 存储桶。

  • Percona XtraBackup 创建的本地数据库备份。

  • 允许 Amazon RDS 访问存储桶的 AWS Identity and Access Management (IAM) 角色。

如果您已有一个 Amazon S3 存储桶,则可以使用它。如果没有 Amazon S3 存储桶,您可以创建新的存储桶。无法加密您的 Amazon S3 存储桶。如果要创建新的存储桶,请参阅创建存储桶

可以使用 Percona XtraBackup 工具创建备份。有关更多信息,请参阅 创建数据库备份

如果您已有一个 IAM 角色,则可以使用它。如果您没有 IAM 角色,则可以手动创建一个新的 角色。或者,在使用 AWS 管理控制台还原数据库时,您可以选择使用向导在您的账户中创建新的 IAM 角色。如果要手动创建新的 IAM 角色,或者将信任和权限策略附加到现有的 IAM 角色,请参阅手动创建 IAM 角色。如果要创建新的 IAM 角色,请按照AWS 管理控制台中的步骤进行操作。

创建数据库备份

可以使用 Percona XtraBackup 软件创建备份。Amazon RDS 支持使用以下版本的 Percona XtraBackup 软件创建的备份文件:

  • 对于 MySQL 5.7,请使用 Percona XtraBackup 2.4 版或更高版本。

  • 对于 MySQL 5.6,请使用 Percona XtraBackup 2.3 版。

如果尚未安装 Percona XtraBackup,我们建议您使用最新的软件版本。您可以从下载 Percona XtraBackup 中下载 Percona XtraBackup。

您可以使用 Percona XtraBackup 创建 MySQL 数据库文件的完整备份。或者,如果已使用 Percona XtraBackup 备份 MySQL 数据库文件,您可以上传现有的完整和增量备份目录和文件。

有关使用 Percona XtraBackup 备份数据库的更多信息,请参阅 Percona 网站上的 Percona XtraBackup - 文档xtrabackup Binary

使用 Percona XtraBackup 创建完整备份

要创建可从 Amazon S3 中还原的 MySQL 数据库文件完整备份,请使用 Percona XtraBackup 实用工具 (xtrabackup) 备份您的数据库。

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

xtrabackup --user=<myuser> --password=<password> /s3-restore/backup

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

  • Gzip (.gz)

  • tar (.tar)

  • Percona xbstream (.xbstream)

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

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

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

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

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

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

通过 Percona XtraBackup 使用增量备份

如果您已使用 Percona XtraBackup 对 MySQL 数据库文件进行完整备份和增量备份,则无需创建完整备份和将备份文件上传到 Amazon S3。相反,您可以将现有的备份目录和文件复制到 Amazon S3 存储桶以节省大量时间。有关使用 Percona XtraBackup 创建增量备份的更多信息,请参阅增量备份

在将现有的完整备份和增量备份文件复制到 Amazon S3 存储桶时,您必须以递归方式复制基目录的内容。这些内容包括完整备份以及所有增量备份目录和文件。此复制必须在 Amazon S3 存储桶中保留目录结构。Amazon RDS 将循环访问所有文件和目录。Amazon RDS 使用每个增量备份包含的 xtrabackup-checkpoints 文件标识基目录,并按照日志序列号 (LSN) 范围对增量备份进行排序。

Percona XtraBackup 的备份注意事项

Amazon RDS 根据文件名使用您的备份文件。根据文件格式使用相应的文件扩展名命名备份文件,例如,.xbstream 表示使用 Percona xbstream 格式存储的文件。

Amazon RDS 按照字母顺序以及自然数字顺序使用您的备份文件。在发出 xtrabackup 命令时,请使用 split 选项以确保按正确的顺序写入和命名备份文件。

Amazon RDS 不支持使用 Percona XtraBackup 创建的部分备份。在备份数据库的源文件时,不能使用以下选项创建部分备份:--tables--tables-exclude--tables-file--databases--databases-exclude--databases-file

Amazon RDS 支持使用 Percona XtraBackup 创建的增量备份。有关使用 Percona XtraBackup 创建增量备份的更多信息,请参阅增量备份

手动创建 IAM 角色

如果您没有 IAM 角色,则可以手动创建一个新的 角色。或者,在使用 AWS 管理控制台还原数据库时,您可以选择使用向导创建新的 IAM 角色。如果要创建新的 IAM 角色,请按照AWS 管理控制台中的步骤进行操作。

要手动创建新的 IAM 角色以从 Amazon S3 导入数据库,请创建一个角色以便将权限从 Amazon RDS 委托给 Amazon S3 存储桶。在创建 IAM 角色时,可附加信任和权限策略。要从 Amazon S3 中导入备份文件,请使用类似于以下示例的信任和权限策略。有关创建角色的更多信息,请参阅创建将权限委派给 AWS 服务的角色

或者,在使用 AWS 管理控制台还原数据库时,您可以选择使用向导创建新的 IAM 角色。如果要创建新的 IAM 角色,请按照AWS 管理控制台中的步骤进行操作。

信任和权限策略要求您提供 Amazon 资源名称 (ARN)。有关 ARN 格式的更多信息,请参阅 Amazon 资源名称 (ARN) 和 AWS 服务命名空间

例 用于从 Amazon S3 导入的信任策略

{ "Version": "2012-10-17", "Statement": [{ "Effect": "Allow", "Principal": {"Service": "rds.amazonaws.com"}, "Action": "sts:AssumeRole" }] }

例 用于从 Amazon S3 导入的权限策略 - IAM 用户权限

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

例 用于从 Amazon S3 导入的权限策略 - 角色权限

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "s3:ListBucket", "s3:GetBucketLocation" ], "Resource": "arn:aws-cn:s3:::bucket_name" }, { "Effect": "Allow", "Action": [ "s3:GetObject" ], "Resource": "arn:aws-cn:s3:::bucket_name/prefix*" } ] }

注意

如果包含文件名前缀,请在前缀后面包含星号 (*)。如果您不想指定前缀,请仅指定星号。

AWS 管理控制台

将数据从 Amazon S3 导入到新的 MySQL 数据库实例

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

  2. 在 Amazon RDS 控制台右上角,选择要在其中创建数据库实例的 AWS 区域。选择与包含数据库备份的 Amazon S3 存储桶相同的 AWS 区域。

  3. 在导航窗格中,选择 Instances

  4. 选择从 S3 还原以启动该向导。

    此时将打开向导,并显示选择引擎页面。

  5. 选择引擎页上,选择 MySQL 图标,然后选择下一步

    将显示指定源备份详细信息页。

     指定源数据库备份详细信息的页面
  6. 指定源备份详细信息页上,指定备份信息。

    1. 对于源引擎,请选择 mysql

    2. 对于源引擎版本,请选择源数据库的 MySQL 版本。

    3. 对于 S3 存储桶,请选择 Amazon S3 存储桶。

    4. (可选) 对于 S3 文件夹路径前缀,请键入存储在 Amazon S3 存储桶中文件的文件路径前缀。如果未指定前缀,则 RDS 使用 S3 存储桶的根文件夹中的所有文件和文件夹创建数据库实例。如果指定了前缀,则 RDS 使用 S3 存储桶中文件路径以指定前缀开头的文件和文件夹创建数据库实例。例如,假设将备份文件存储在 S3 上名为 backups 的子文件夹中,并且具有多组备份文件,每个文件位于自己的目录 (gzip_backup1、gzip_backup2,依此类推) 中。在这种情况下,请指定 backups/gzip_backup1 前缀以从 gzip_backup1 文件夹中的文件还原。

    5. 对于创建新角色,请选择以在您的账户中创建新的 IAM 角色;或者选择以选择现有的 IAM 角色。

    6. 对于 IAM 角色,请选择现有的 IAM 角色,或者指定新 IAM 角色的名称。您可以为创建新角色选择以选择创建新的 IAM 角色。

  7. 选择下一步以继续。此时将出现指定数据库详细信息页面。

    指定数据库详细信息页面上,指定数据库实例信息。有关每项设置的信息,请参阅 适用于 MySQL 数据库实例的设置

    注意

    确保为新的数据库实例分配足够的内存,以便成功进行还原。您也可以分配额外的内存以满足将来的增长需求。

  8. 选择 Next 以继续。此时将出现配置高级设置页面。

    提供 Amazon RDS 启动数据库实例所需的其他信息。有关每项设置的信息,请参阅 适用于 MySQL 数据库实例的设置

  9. 选择启动数据库实例

CLI

要使用 AWS CLI 将数据从 Amazon S3 导入到新的 MySQL 数据库实例中,请调用 restore-db-instance-from-s3 命令并使用以下参数。有关每项设置的信息,请参阅 适用于 MySQL 数据库实例的设置

注意

确保为新的数据库实例分配足够的内存,以便成功进行还原。您也可以分配额外的内存以满足将来的增长需求。

  • --allocated-storage

  • --db-instance-identifier

  • --db-instance-class

  • --engine

  • --master-user-name

  • --master-user-password

  • --s3-bucket-name

  • --s3-ingestion-role-arn

  • --s3-prefix

  • --source-engine

  • --source-engine-version

针对 Linux、OS X 或 Unix:

aws rds restore-db-instance-from-s3 \ --allocated-storage 250 \ --db-instance-identifier myidentifier \ --db-instance-class db.m4.large \ --engine mysql \ --master-user-name masterawsuser \ --master-user-password masteruserpassword \ --s3-bucket-name mybucket \ --s3-ingestion-role-arn arn:aws-cn:iam::account-number:role/rolename \ --s3-prefix bucketprefix \ --source-engine mysql \ --source-engine-version 5.6.27

对于 Windows:

aws rds restore-db-instance-from-s3 ^ --allocated-storage 250 ^ --db-instance-identifier myidentifier ^ --db-instance-class db.m4.large ^ --engine mysql ^ --master-user-name masterawsuser ^ --master-user-password masteruserpassword ^ --s3-bucket-name mybucket ^ --s3-ingestion-role-arn arn:aws-cn:iam::account-number:role/rolename ^ --s3-prefix bucketprefix ^ --source-engine mysql ^ --source-engine-version 5.6.27

API

要使用 Amazon RDS API 将数据从 Amazon S3 导入到新的 MySQL 数据库实例中,请调用 RestoreDBInstanceFromS3 操作。

相关主题