如何为运行 SQL Server 的 Amazon RDS 数据库实例执行本机备份?

上次更新时间:2019 年 6 月 27 日

我想要为运行 SQL Server 的 Amazon Relational Database Service (Amazon RDS) 数据库实例执行本机备份。我需要将备份文件存储在 Amazon Simple Storage Service (Amazon S3) 中,或使用备份文件还原 RDS 数据库实例。该如何操作?

简短描述

Amazon RDS 支持 Microsoft SQL Server 数据库的本机备份和还原。您可以创建本地数据库的完整备份,将文件存储在 Amazon S3 中,然后将备份文件还原到运行 SQL Server 的现有 Amazon RDS 数据库实例中。您还可以将此备份文件还原到本地服务器或者运行 SQL Server 的另一个 Amazon RDS 数据库实例中。

解决方法

要设置 SQL Server 数据库的本机备份,请使用下列服务:

  • 用于存储备份文件的 Amazon S3 存储桶
  • 用于访问存储桶的 AWS Identity and Access Management (IAM) 角色
  • 已添加到数据库实例中的选项组的 SQLSERVER_BACKUP_RESTORE 选项

注意:在与 RDS 数据库实例相同的区域中创建 S3 存储桶。

  1. 打开 Amazon RDS 控制台,然后在导航窗格中选择选项组。选择创建组,然后输入服务器的名称、描述、引擎和引擎版本。然后,选择创建
  2. 选择您创建的选项组,然后选择添加选项。选择“SQLSERVER_BACKUP_RESTORE”。最佳做法是,创建一个新的 IAM 角色,然后选择添加选项,从而使您的 IAM 角色具有所需权限。选择您的 S3 存储桶,或者创建新的 S3 存储桶。然后,选择立即应用添加选项
  3. 通过在导航窗格中选择数据库将选项组与数据库实例关联,然后选择要备份的实例。选择操作,然后选择修改
  4. 数据库选项下,选择您创建的选项组,然后选择立即应用继续。检查信息,然后选择修改数据库实例。由于不需要实例重启,此选项组修改没有停机时间
  5. 当状态从正在修改变为可用时,通过 SQL Server Management Studio 连接数据库实例,然后选择新查询。输入以下 SQL 语句之一,以启动所需数据库的备份:

启动未加密数据库的备份

exec msdb.dbo.rds_backup_database 
@source_db_name='database_name', @s3_arn_to_backup_to='arn:aws:s3:::bucket_name/file_name_and_extension', 
@overwrite_S3_backup_file=1;

启动加密数据库的备份

exec msdb.dbo.rds_backup_database 
@source_db_name='database_name', 
@s3_arn_to_backup_to='arn:aws:s3:::bucket_name/file_name_and_extension', @kms_master_key_arn='arn:aws:kms:region:
account-id:key/key-id', 
@overwrite_S3_backup_file=1;

注意:替换这些示例中列出的 database_namebucket_namefile_name_and_extensionregionaccount-idkey-id,以匹配您的场景。您可以使用 S3 存储桶中生成的备份文件来还原新的 RDS 数据库实例。当调用 rds_backup_databaserds_restore_database 存储程序时,任务开始并输出该任务的相关信息。

当任务的生命周期状态为成功时,任务完成。然后,您可以打开 Amazon S3 控制台、选择您创建备份所在的存储桶并查看备份文件。您可以下载此文件,或者使用此文件还原新的 RDS 数据库实例。

使用以下 SQL 语句之一从 S3 存储桶提供的备份文件中还原

还原未加密的数据库

exec msdb.dbo.rds_restore_database 
@restore_db_name='database_name', 
@s3_arn_to_restore_from='arn:aws:s3:::bucket_name/file_name_and_extension';

还原加密的数据库

exec msdb.dbo.rds_restore_database 
@restore_db_name='database_name', 
@s3_arn_to_restore_from='arn:aws:s3::: bucket_name/file_name_and_extension', 
@kms_master_key_arn='arn:aws:kms:region:account-id:key/key-id'; 

您可以在执行备份或还原语句后获取任务 ID。或者,您可以使用以下脚本来确定特定数据库的所有已完成和待处理任务:

exec msdb.dbo.rds_task_status @db_name='database_name'

要跟踪作业的状态,请使用此 SQL 语句:

exec msdb..rds_task_status @task_id= 5

有关潜在错误和解决方案的列表,请参阅将 Microsoft SQL Server 企业工作负载迁移到 Amazon RDS


这篇文章对您有帮助吗?

您觉得我们哪些地方需要改进?


需要更多帮助?