使用本机备份和还原 - Amazon Relational Database Service

使用本机备份和还原

在启用并配置本机备份和还原功能后,可以开始使用该功能。先连接到您的 Microsoft SQL Server 数据库,然后调用 Amazon RDS 存储过程来执行该操作。有关连接到数据库的说明,请参阅 连接到运行 Microsoft SQL Server 数据库引擎的数据库实例

某些存储过程要求您向 Amazon S3 存储桶和文件提供 Amazon Resource Name (ARN)。您的 ARN 的格式为 arn:aws:s3:::bucket_name/file_name.extension。Amazon S3 不需要在 ARN 中使用账号或 AWS 区域。

如果您还提供可选 KMS 密钥,则密钥 ARN 的格式为 arn:aws:kms:region:account-id:key/key-id。有关更多信息,请参阅 Amazon Resource Name (ARN) 和 AWS 服务命名空间。您必须使用对称加密 KMS 密钥来加密您的备份。Amazon RDS 不支持非对称 KMS 密钥。有关更多信息,请参阅《AWS Key Management Service 开发人员指南》中的创建对称 KMS 密钥

注意

无论您是否使用 KMS 密钥,本机备份和还原任务都会对上传到 S3 的文件默认启用服务器端高级加密标准 (AES) 256 位加密。

有关如何调用每个存储过程的说明,请参阅以下主题:

备份数据库

要备份数据库,请使用 rds_backup_database 存储过程。

注意

您无法在维护时段内对数据库进行备份,也无法在 Amazon RDS 拍摄快照时对数据库进行备份。

使用量

exec msdb.dbo.rds_backup_database @source_db_name='database_name', @s3_arn_to_backup_to='arn:aws:s3:::bucket_name/file_name.extension', [@kms_master_key_arn='arn:aws:kms:region:account-id:key/key-id'], [@overwrite_s3_backup_file=0|1], [@type='DIFFERENTIAL|FULL'], [@number_of_files=n];

以下参数为必需参数:

  • @source_db_name – 要备份的数据库的名称。

  • @s3_arn_to_backup_to – 指示要用于备份的 Amazon S3 存储桶以及备份文件的名称的 ARN。

    此文件可以具有任何扩展名,但通常使用 .bak

以下参数为可选参数:

  • @kms_master_key_arn – 用于加密项目的对称加密 KMS 密钥的 ARN。

    • 您不能使用默认加密密钥。如果使用默认密钥,则不会备份数据库。

    • 如果未指定 KMS 密钥标识符,则不会对备份文件进行加密。有关更多信息,请参阅加密 Amazon RDS 资源

    • 指定 KMS 密钥时,将使用客户端加密。

    • Amazon RDS 不支持非对称 KMS 密钥。有关更多信息,请参阅《AWS Key Management Service 开发人员指南》中的创建对称 KMS 密钥

  • @overwrite_s3_backup_file – 指示是否覆盖现有备份文件的值。

    • 0 – 不覆盖现有文件。此值是默认值。

      如果文件已存在,则将 @overwrite_s3_backup_file 设置为 0 会返回错误。

    • 1 – 覆盖具有指定名称的现有文件,即使该文件不是备份文件也是如此。

  • @type – 备份的类型。

    • DIFFERENTIAL – 进行差异备份。

    • FULL – 进行完整备份。此值是默认值。

    差异备份基于上一个完整备份。要使差异备份起作用,您不能在上一个完整备份和差异备份之间拍摄快照。如果您需要差异备份,但快照存在,请先进行另一个完整备份,然后再继续进行差异备份。

    您可以使用以下示例 SQL 查询来查找上一个完整备份或快照:

    select top 1 database_name , backup_start_date , backup_finish_date from msdb.dbo.backupset where database_name='mydatabase' and type = 'D' order by backup_start_date desc;
  • @number_of_files – 备份将被划分(分块)成的文件数。最大文件数为 10。

    • 完整备份和差异备份都支持多文件备份。

    • 如果您输入值 1 或省略该参数,则会创建单个备份文件。

    请提供文件拥有的通用前缀,然后使用星号 (*) 为其添加后缀。星号可位于 S3 ARN 的 file_name 部分中的任意位置。星号由所生成文件中的一系列字母数字字符串替换,从 1-of-number_of_files 开始。

    例如,如果 S3 ARN 中的文件名为 backup*.bak 并且您已设置 @number_of_files=4,则生成的备份文件为 backup1-of-4.bakbackup2-of-4.bakbackup3-of-4.bakbackup4-of-4.bak

    • 如果任意文件名已存在,并且 @overwrite_s3_backup_file 设置为 0,则会返回错误。

    • 在 S3 ARN 的 file_name 部分中,多文件备份只能有一个星号。

    • 单文件备份可以在 S3 ARN 的 file_name 部分中包含任意数量的星号。星号不会从所生成的文件名中删除。

示例

例 差异备份
exec msdb.dbo.rds_backup_database @source_db_name='mydatabase', @s3_arn_to_backup_to='arn:aws:s3:::mybucket/backup1.bak', @overwrite_s3_backup_file=1, @type='DIFFERENTIAL';
例 使用加密的完整备份
exec msdb.dbo.rds_backup_database @source_db_name='mydatabase', @s3_arn_to_backup_to='arn:aws:s3:::mybucket/backup1.bak', @kms_master_key_arn='arn:aws:kms:us-east-1:123456789012:key/AKIAIOSFODNN7EXAMPLE', @overwrite_s3_backup_file=1, @type='FULL';
例 多文件备份
exec msdb.dbo.rds_backup_database @source_db_name='mydatabase', @s3_arn_to_backup_to='arn:aws:s3:::mybucket/backup*.bak', @number_of_files=4;
例 多文件差异备份
exec msdb.dbo.rds_backup_database @source_db_name='mydatabase', @s3_arn_to_backup_to='arn:aws:s3:::mybucket/backup*.bak', @type='DIFFERENTIAL', @number_of_files=4;
例 使用加密的多文件备份
exec msdb.dbo.rds_backup_database @source_db_name='mydatabase', @s3_arn_to_backup_to='arn:aws:s3:::mybucket/backup*.bak', @kms_master_key_arn='arn:aws:kms:us-east-1:123456789012:key/AKIAIOSFODNN7EXAMPLE', @number_of_files=4;
例 使用 S3 覆盖的多文件备份
exec msdb.dbo.rds_backup_database @source_db_name='mydatabase', @s3_arn_to_backup_to='arn:aws:s3:::mybucket/backup*.bak', @overwrite_s3_backup_file=1, @number_of_files=4;
例 使用 @number_of_files 参数的单文件备份

此示例生成一个名为 backup*.bak 的备份文件。

exec msdb.dbo.rds_backup_database @source_db_name='mydatabase', @s3_arn_to_backup_to='arn:aws:s3:::mybucket/backup*.bak', @number_of_files=1;

还原数据库

要还原数据库,请调用 rds_restore_database 存储过程。还原任务完成且数据库打开后,Amazon RDS 将创建数据库的初始快照。

使用量

exec msdb.dbo.rds_restore_database @restore_db_name='database_name', @s3_arn_to_restore_from='arn:aws:s3:::bucket_name/file_name.extension', @with_norecovery=0|1, [@kms_master_key_arn='arn:aws:kms:region:account-id:key/key-id'], [@type='DIFFERENTIAL|FULL'];

以下参数为必需参数:

  • @restore_db_name– 要还原的数据库的名称。数据库名称是唯一的。如果存在同名的现有数据库,则无法还原数据库。

  • @s3_arn_to_restore_from – 指示用于还原数据库的备份文件的 Amazon S3 前缀和名称的 ARN。

    • 对于单文件备份,请提供整个文件名。

    • 对于多文件备份,请提供文件拥有的通用前缀,然后使用星号 (*) 为其添加后缀。

    • 如果 @s3_arn_to_restore_from 为空,则返回以下错误消息:S3 ARN prefix cannot be empty (S3 ARN 前缀不能为空)

以下参数对于差异还原是必需的,但对于完整还原是可选的:

  • @with_norecovery – 用于还原操作的恢复子句。

    • 将它设置为 0 来使用 RECOVERY 进行还原。在这种情况下,在还原后,数据库将处于在线状态。

    • 将它设置为 1 来使用 NORECOVERY 进行还原。在这种情况下,在还原任务完成后,数据库将保持 RESTORING 状态。使用这种方法,您可以执行以后的差异还原。

    • 对于 DIFFERENTIAL 还原,请指定 01

    • 对于 FULL 还原,此值默认为 0

以下参数为可选参数:

  • @kms_master_key_arn - 如果您已对备份文件进行加密,则 KMS 密钥用于解密文件。

    指定 KMS 密钥时,将使用客户端加密。

  • @type – 还原的类型。有效类型为 DIFFERENTIALFULL。默认值为 FULL

注意

对于差异还原,数据库必须处于 RESTORING 状态,或者必须已存在使用 NORECOVERY 还原的任务。

在数据库处于在线状态时,您无法还原以后的差异备份。

您无法为已具有使用 RECOVERY 的挂起还原任务的数据库提交还原任务。

多可用区实例不支持使用 NORECOVERY 的完整还原和差异还原

在具有只读副本的多可用区实例上还原数据库类似于在多可用区实例上还原数据库。您无需执行任何其他操作,即可在副本上还原数据库。

示例

例 单文件还原
exec msdb.dbo.rds_restore_database @restore_db_name='mydatabase', @s3_arn_to_restore_from='arn:aws:s3:::mybucket/backup1.bak';
例 多文件还原

为避免还原多个文件时出错,请确保所有备份文件有相同的前缀且没有任何其他文件使用该前缀。

exec msdb.dbo.rds_restore_database @restore_db_name='mydatabase', @s3_arn_to_restore_from='arn:aws:s3:::mybucket/backup*';
例 使用 RECOVERY 的完整数据库还原

以下三个示例执行相同的任务,即使用 RECOVERY 进行完整还原。

exec msdb.dbo.rds_restore_database @restore_db_name='mydatabase', @s3_arn_to_restore_from='arn:aws:s3:::mybucket/backup1.bak';
exec msdb.dbo.rds_restore_database @restore_db_name='mydatabase', @s3_arn_to_restore_from='arn:aws:s3:::mybucket/backup1.bak', [@type='DIFFERENTIAL|FULL'];
exec msdb.dbo.rds_restore_database @restore_db_name='mydatabase', @s3_arn_to_restore_from='arn:aws:s3:::mybucket/backup1.bak', @type='FULL', @with_norecovery=0;
例 使用加密的完整数据库还原
exec msdb.dbo.rds_restore_database @restore_db_name='mydatabase', @s3_arn_to_restore_from='arn:aws:s3:::mybucket/backup1.bak', @kms_master_key_arn='arn:aws:kms:us-east-1:123456789012:key/AKIAIOSFODNN7EXAMPLE';
例 使用 NORECOVERY 的完整数据库还原
exec msdb.dbo.rds_restore_database @restore_db_name='mydatabase', @s3_arn_to_restore_from='arn:aws:s3:::mybucket/backup1.bak', @type='FULL', @with_norecovery=1;
例 使用 NORECOVERY 的差异还原
exec msdb.dbo.rds_restore_database @restore_db_name='mydatabase', @s3_arn_to_restore_from='arn:aws:s3:::mybucket/backup1.bak', @type='DIFFERENTIAL', @with_norecovery=1;
例 使用 RECOVERY 的差异还原
exec msdb.dbo.rds_restore_database @restore_db_name='mydatabase', @s3_arn_to_restore_from='arn:aws:s3:::mybucket/backup1.bak', @type='DIFFERENTIAL', @with_norecovery=0;

还原日志

要还原日志,请调用 rds_restore_log 存储过程。

使用量

exec msdb.dbo.rds_restore_log @restore_db_name='database_name', @s3_arn_to_restore_from='arn:aws:s3:::bucket_name/log_file_name.extension', [@kms_master_key_arn='arn:aws:kms:region:account-id:key/key-id'], [@with_norecovery=0|1], [@stopat='datetime'];

以下参数为必需参数:

  • @restore_db_name – 要还原其日志的数据库的名称。

  • @s3_arn_to_restore_from – 指示用于还原日志的日志文件的 Amazon S3 前缀和名称的 ARN。此文件可以具有任何扩展名,但通常使用 .trn

    如果 @s3_arn_to_restore_from 为空,则返回以下错误消息:S3 ARN prefix cannot be empty (S3 ARN 前缀不能为空)

以下参数为可选参数:

  • @kms_master_key_arn - 如果您已对日志进行加密,则 KMS 密钥用于解密日志。

  • @with_norecovery – 用于还原操作的恢复子句。此值默认为 1

    • 将它设置为 0 来使用 RECOVERY 进行还原。在这种情况下,在还原后,数据库将处于在线状态。在数据库处于在线状态时,您无法还原其他日志备份。

    • 将它设置为 1 来使用 NORECOVERY 进行还原。在这种情况下,在还原任务完成后,数据库将保持 RESTORING 状态。使用这种方法,您可以执行以后的日志还原。

  • @stopat – 指定将数据库还原到其在指定的日期和时间的状态的值(采用日期时间格式)。仅将在指定日期和时间之前写入的事务日志记录应用于数据库。

    如果未指定此参数(它为 NULL),则会还原完整的日志。

注意

对于日志还原,数据库必须处于 restoring 状态,或者必须已存在使用 NORECOVERY 还原的任务。

在数据库处于在线状态时,您无法还原日志备份。

您无法在已具有使用 RECOVERY 的挂起还原任务的数据库上提交日志还原任务。

多可用区实例不支持日志还原。

示例

例 日志还原
exec msdb.dbo.rds_restore_log @restore_db_name='mydatabase', @s3_arn_to_restore_from='arn:aws:s3:::mybucket/mylog.trn';
例 使用加密的日志还原
exec msdb.dbo.rds_restore_log @restore_db_name='mydatabase', @s3_arn_to_restore_from='arn:aws:s3:::mybucket/mylog.trn', @kms_master_key_arn='arn:aws:kms:us-east-1:123456789012:key/AKIAIOSFODNN7EXAMPLE';
例 使用 NORECOVERY 的日志还原

以下两个示例执行相同的任务,即使用 NORECOVERY 进行日志还原。

exec msdb.dbo.rds_restore_log @restore_db_name='mydatabase', @s3_arn_to_restore_from='arn:aws:s3:::mybucket/mylog.trn', @with_norecovery=1;
exec msdb.dbo.rds_restore_log @restore_db_name='mydatabase', @s3_arn_to_restore_from='arn:aws:s3:::mybucket/mylog.trn';
例 使用 RECOVERY 的日志还原
exec msdb.dbo.rds_restore_log @restore_db_name='mydatabase', @s3_arn_to_restore_from='arn:aws:s3:::mybucket/mylog.trn', @with_norecovery=0;
例 使用 STOPAT 子句的日志还原
exec msdb.dbo.rds_restore_log @restore_db_name='mydatabase', @s3_arn_to_restore_from='arn:aws:s3:::mybucket/mylog.trn', @with_norecovery=0, @stopat='2019-12-01 03:57:09';

完成数据库还原

如果数据库上的上一个还原任务是使用 @with_norecovery=1 执行的,则数据库现在处于 RESTORING 状态。使用 rds_finish_restore 存储过程打开此数据库以进行常规操作。

使用量

exec msdb.dbo.rds_finish_restore @db_name='database_name';
注意

要使用此方法,数据库必须处于 RESTORING 状态,且没有任何挂起的还原任务。

多可用区实例不支持 rds_finish_restore 过程。

要完成数据库还原,请使用主登录名。或使用最近使用 NORECOVERY 还原数据库或日志的用户登录名。

处理部分还原的数据库

删除部分还原的数据库

要删除部分还原的数据库(保留为 RESTORING 状态),请使用 rds_drop_database 存储过程。

exec msdb.dbo.rds_drop_database @db_name='database_name';
注意

您无法为已具有挂起的还原或完成还原任务的数据库提交 DROP 数据库请求。

要删除数据库,请使用主登录名。或使用最近使用 NORECOVERY 还原数据库或日志的用户登录名。

部分还原的数据库的快照还原和时间点恢复行为

在快照还原和时间点恢复期间,将从目标实例中删除源实例中的部分还原的数据库(保留为 RESTORING 状态)。

取消任务

要取消备份或还原任务,请调用 rds_cancel_task 存储过程。

注意

您无法取消 FINISH_RESTORE 任务。

使用量

exec msdb.dbo.rds_cancel_task @task_id=ID_number;

以下参数是必需参数:

  • @task_id– 要取消的任务的 ID。可以通过调用 rds_task_status 获取任务 ID。

跟踪任务的状态

要跟踪备份和还原任务的状态,请调用 rds_task_status 存储过程。如果您未提供任何参数,则存储过程将返回所有任务的状态。任务的状态约每 2 分钟更新一次。任务历史记录保留 36 天。

使用量

exec msdb.dbo.rds_task_status [@db_name='database_name'], [@task_id=ID_number];

以下参数为可选参数:

  • @db_name– 要显示其任务状态的数据库的名称。

  • @task_id– 要显示其任务状态的任务的 ID。

示例

例 列出特定任务的状态
exec msdb.dbo.rds_task_status @task_id=5;
例 列出特定数据库和任务的状态
exec msdb.dbo.rds_task_status @db_name='my_database', @task_id=5;
例 列出特定数据库上的所有任务及其状态
exec msdb.dbo.rds_task_status @db_name='my_database';
例 列出当前实例上的所有任务及其状态
exec msdb.dbo.rds_task_status;

响应

rds_task_status 存储过程返回以下列。

描述

task_id

任务的 ID。

task_type

任务类型取决于输入参数,如下所示:

  • 对于备份任务:

    • BACKUP_DB – 完整数据库备份

    • BACKUP_DB_DIFFERENTIAL – 差异数据库备份

  • 对于还原任务:

    • RESTORE_DB – 使用 RECOVERY 的完整数据库还原

    • RESTORE_DB_NORECOVERY – 使用 NORECOVERY 的完整数据库还原

    • RESTORE_DB_DIFFERENTIAL – 使用 RECOVERY 的差异数据库还原

    • RESTORE_DB_DIFFERENTIAL_NORECOVERY – 使用 NORECOVERY 的差异数据库还原

    • RESTORE_DB_LOG – 使用 RECOVERY 的日志还原

    • RESTORE_DB_LOG_NORECOVERY – 使用 NORECOVERY 的日志还原

  • 对于完成还原的任务:

    • FINISH_RESTORE – 完成还原并打开数据库

在完成以下还原任务时打开数据库后,Amazon RDS 创建数据库的初始快照:

  • RESTORE_DB

  • RESTORE_DB_DIFFERENTIAL

  • RESTORE_DB_LOG

  • FINISH_RESTORE

database_name

与任务关联的数据库的名称。

% complete

用百分比值表示的任务进度。

duration (mins)

在任务上花费的时间 (以分钟为单位)。

lifecycle

任务的状态。有以下可能状态:

  • CREATED – 一旦您调用 rds_backup_databaserds_restore_database,就会创建任务并将状态设置为 CREATED

  • IN_PROGRESS – 备份或还原任务开始后,状态将设置为 IN_PROGRESS。要将状态从 CREATED 更改为 IN_PROGRESS 可能需要最多 5 分钟的时间。

  • SUCCESS – 备份或还原任务完成之后,状态将设置为 SUCCESS

  • ERROR – 如果备份或还原任务失败,状态将设置为 ERROR。有关错误的更多信息,请参阅 task_info 列。

  • CANCEL_REQUESTED – 一旦您调用 rds_cancel_task,任务的状态就会设置为 CANCEL_REQUESTED

  • CANCELLED – 在成功取消任务后,任务的状态将设置为 CANCELLED

task_info

有关任务的其他信息。

如果在备份或还原数据库时出错,则此列将包含有关错误的信息。有关可能的错误列表以及缓解策略,请参阅 故障排除

last_updated

上次更新任务状态的日期和时间。状态每隔 5% 的进度更新一次。

created_at

任务的创建日期和时间。

S3_object_arn 指示要备份或还原的文件的 Amazon S3 前缀和名称的 ARN。

overwrite_s3_backup_file

调用备份任务时指定的 @overwrite_s3_backup_file 参数的值。有关更多信息,请参阅 备份数据库

KMS_master_key_arn 用于加密 (对于备份) 和解密 (对于还原) 的 KMS 密钥的 ARN。
filepath 不适用于本机备份和还原任务。
overwrite_file 不适用于本机备份和还原任务。