将备份还原到 MySQL 数据库实例 - Amazon Relational Database Service
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

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

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

本节中介绍的方案将还原本地数据库的备份。只要数据库可供访问,您就可以将此技术用于其他位置(例如 Amazon EC2 或非Amazon云服务)中的数据库。

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


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

在所有 Amazon Web Services 区域,MySQL 均支持从 Amazon S3 导入备份文件。

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

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

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

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

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

  • 您无法将数据从数据库快照导出中导入到 Amazon S3。

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

  • 您必须将数据导入到 Amazon Web Services 区域中 MySQL 主要版本的原定设置次要版本。例如,如果您的主要版本是 MySQL 8.0,而 Amazon Web Services 区域的原定设置次要版本为 8.0.28,则必须将数据导入 MySQL 8.0.28 版数据库实例。您可以在导入后升级数据库实例。有关确定默认次要版本的信息,请参阅 Amazon RDS 上的 MySQL 版本

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

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

  • 您无法将本地 MySQL 数据库从一个主要版本导入到另一个主要版本。例如,您无法将 MySQL 5.7 数据库导入到 RDS for MySQL 8.0 数据库。在导入完成后,您可以升级数据库实例。

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

  • 您无法从 Amazon S3 存储桶中的加密备份进行还原。

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

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

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

  • 还原数据库时,将复制备份,然后在数据库实例上提取。因此,为数据库实例预配置的存储空间,应该等于或大于备份大小之和加上磁盘上原始数据库大小。

  • Amazon RDS 将上传到 Amazon S3 存储桶的文件数限制为一百万个。如果数据库的备份数据 (包括所有完整和增量备份) 超过 100 万个文件,请使用 Gzip (.gz)、tar (.tar.gz) 或 Percona xbstream (.xbstream) 文件将完整和增量备份文件存储在 Amazon S3 存储桶中。Percona XtraBackup 8.0 仅支持使用 Percona xbstream 进行压缩。

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

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

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

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

  • innodb_data_file_path 参数必须仅配置一个使用默认数据文件名 "ibdata1:12M:autoextend" 的数据文件。使用此方法无法迁移具有两个数据文件或具有不同名称的数据文件的数据库。

    下面是不允许使用的文件名示例:"innodb_data_file_path=ibdata1:50M; ibdata2:50M:autoextend""innodb_data_file_path=ibdata01:50M:autoextend"

  • 还原数据库的最大大小是支持的最大数据库大小减去备份的大小。因此,如果支持的最大数据库大小为 64 TiB,并且备份的大小为 30 TiB,则还原数据库的最大大小为 34 TiB,如以下示例所示:

    64 TiB - 30 TiB = 34 TiB

    有关 Amazon RDS for MySQL 支持的最大数据库大小的信息,请参阅通用型 SSD 存储预置 IOPS SSD 存储

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

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

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

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

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

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

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

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

创建数据库备份

可以使用 Percona XtraBackup 软件创建备份。建议您使用最新的 Percona XtraBackup 版本。您可以从下载 Percona XtraBackup 中安装 Percona XtraBackup。

警告

创建数据库备份时,XtraBackup 可能会将凭证保存在 xtrabackup_info 文件中。确保对该文件进行检查,以使其中的 tool_command 设置不包含任何敏感信息。

注意

对于 MySQL 8.0 迁移,您必须使用 Percona XtraBackup 8.0。Percona XtraBackup 8.0.12 及更高版本支持迁移 MySQL 的所有版本。如果您要迁移到 RDS for MySQL 8.0.20 或更高版本,则必须使用 Percona XtraBackup 8.0.12 或更高版本。

对于 MySQL 5.7 迁移,还可以使用 Percona XtraBackup 2.4。对于早期 MySQL 版本的迁移,还可以使用 Percona XtraBackup 2.3 或 2.4。

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

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

使用 Percona XtraBackup 创建完整备份

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

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

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

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

  • Gzip (.gz)

  • tar (.tar)

  • Percona xbstream (.xbstream)

注意

Percona XtraBackup 8.0 仅支持使用 Percona 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 使用增量备份

如果您已使用 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 按照字母顺序以及自然数字顺序使用您的备份文件。在发出 split 命令时,请使用 xtrabackup 选项以确保按正确的顺序写入和命名备份文件。

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

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

手动创建 IAM 角色

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

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

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

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

例 用于从 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:s3:::bucket_name" }, { "Effect": "Allow", "Action": [ "s3:GetObject" ], "Resource": "arn:aws:s3:::bucket_name/prefix*" } ] }
注意

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

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

您可以使用Amazon Web Services Management Console、Amazon CLI 或 RDS API 将数据从 Amazon S3 导入到新的 MySQL 数据库实例。

将数据从 Amazon S3 导入到新的 MySQL 数据库实例
  1. 登录 Amazon Web Services Management Console 并通过以下网址打开 Amazon RDS 控制台:https://console.aws.amazon.com/rds/

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

  3. 在导航窗格中,选择 Databases (数据库)

  4. 选择从 S3 还原

    此时将显示通过从 S3 还原创建数据库页面。

    
                                您指定从 S3 还原数据库实例的详细信息的页面
  5. S3 目标下:

    1. 选择包含备份的 S3 桶

    2. (可选)对于 S3 文件夹路径前缀,输入存储在 Amazon S3 存储桶中的文件的文件路径前缀。

      如果未指定前缀,则 RDS 使用 S3 存储桶的根文件夹中的所有文件和文件夹创建数据库实例。如果指定了前缀,则 RDS 使用 S3 存储桶中文件路径以指定前缀开头的文件和文件夹创建数据库实例。

      例如,假设将备份文件存储在 S3 上名为 backups 的子文件夹中,并且具有多组备份文件,每个文件位于自己的目录 (gzip_backup1、gzip_backup2,依此类推) 中。在这种情况下,请指定 backups/gzip_backup1 前缀以从 gzip_backup1 文件夹中的文件还原。

  6. 引擎选项下:

    1. 对于引擎类型,选择 MySQL

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

    3. 对于 Version(版本),选择您所在 Amazon Web Services 区域中 MySQL 主要版本的原定设置次要版本。

      在Amazon Web Services Management Console中,仅默认的次要版本可用。您可以在导入后升级数据库实例。

  7. 对于 IAM 角色,您可以选择现有 IAM 角色。

  8. (可选)您还可以通过选择 Create a new role(创建新角色)并输入 IAM 角色名称为自己创建新的 IAM 角色。

  9. 指定数据库实例信息。有关每项设置的信息,请参阅 数据库实例的设置

    注意

    确保为新的数据库实例分配足够的内存,以便成功进行还原操作。

    您还可以选择启用存储自动扩展,以允许未来自动增长。

  10. 根据需要选择其他设置。

  11. 选择创建数据库

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

注意

确保为新的数据库实例分配足够的内存,以便成功进行还原操作。

您还可以使用 --max-allocated-storage 参数启用存储自动扩展并允许未来自动增长。

  • --allocated-storage

  • --db-instance-identifier

  • --db-instance-class

  • --engine

  • --master-username

  • --manage-master-user-password

  • --s3-bucket-name

  • --s3-ingestion-role-arn

  • --s3-prefix

  • --source-engine

  • --source-engine-version

对于 Linux、macOS 或 Unix:

aws rds restore-db-instance-from-s3 \ --allocated-storage 250 \ --db-instance-identifier myidentifier \ --db-instance-class db.m5.large \ --engine mysql \ --master-username admin \ --manage-master-user-password \ --s3-bucket-name mybucket \ --s3-ingestion-role-arn arn:aws:iam::account-number:role/rolename \ --s3-prefix bucketprefix \ --source-engine mysql \ --source-engine-version 8.0.32 \ --max-allocated-storage 1000

对于 Windows:

aws rds restore-db-instance-from-s3 ^ --allocated-storage 250 ^ --db-instance-identifier myidentifier ^ --db-instance-class db.m5.large ^ --engine mysql ^ --master-username admin ^ --manage-master-user-password ^ --s3-bucket-name mybucket ^ --s3-ingestion-role-arn arn:aws:iam::account-number:role/rolename ^ --s3-prefix bucketprefix ^ --source-engine mysql ^ --source-engine-version 8.0.32 ^ --max-allocated-storage 1000

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