使用 SQLServer 备份文件.bak 还原至 RDS

阅读数:89 2019 年 9 月 27 日 14:36

使用 SQLServer 备份文件.bak 还原至 RDS

任何形式的数据损坏都有可能导致数据的丢失,宕机。对于 DBA 来讲是一个不小的打击。云中托管的数据库无论从数据库的管理、高可用或灾难恢复上来讲都是 DBA 的一个很好的选择。如何利用传统的 SQL Server 的备份文件还原到 AWS 托管的 SQL Server 数据库是用户们普遍关心的问题。下面我将介绍:如何使用备份文件将 MS_SQL Server 还原数据库到 RDS SQL Server.

步骤:

1. 创建一台管理主机
2. 创建 RDS SQL Server
3. 修改安全组和关联选项组
4. 将已经备份的数据上传到 S3 上
5. 创建并配置选项组
6. 使用 SSMS 将 S3 上的.bak 还原到 RDS 上

步骤一:创建一台管理主机

创建 EC2 虚拟机做为管理主机,目的是出于安全角度考虑使用跳板机连接数据库,而不是将 SQL Server 的 Endpoint 暴露在公网上。
创建一台 EC2 虚拟机并安装 SQL Server Management Studio,不再赘述。
SSMS 工具下载地址:[ https://docs.microsoft.com/zh-tw/sql/ssms/download-sql-server-management-studio-ssms?view=sql-server-2017 ](

步骤二:创建 RDS SQL Server

创建一台 SQL Server Standard Edition,

可以选择生产(Production)或开发/测试(Dev/Test)

生产环境也就是多可用区部署:

多可用区部署为数据库实例提供了更高的可用性、数据持久性和容错能力。在进行计划的数据维护或发生未计划的服务中断时,Amazon RDS 会自动故障转移到最新的辅助数据库实例。

开发和测试环境就是单实例,会有单点故障。

使用 SQLServer 备份文件.bak 还原至 RDS

步骤三:修改安全组和关联选项组

修改 RDS 安全组,目的是让刚创建的管理主机与 RDS 建立连接,如下图:

使用 SQLServer 备份文件.bak 还原至 RDS

在 RDS 的安全组中的 Source 修改成 EC2 的安全组 ID:

使用 SQLServer 备份文件.bak 还原至 RDS

返回到管理主机上,使用 SSMS 测试连通性

使用 SQLServer 备份文件.bak 还原至 RDS

连接成功

使用 SQLServer 备份文件.bak 还原至 RDS

步骤四:将已经备份的数据上传到 S3 上

一般而言,如果你的文件大小达到 100MB,你应该考虑使用分段上传。使用 AWS 的 s3 cp 命令和 s3 sync 等命令可以自动对要上传的大文件分片,然后上传。如果你对命令不熟悉可以参考这篇 blog 中的 5. 使用 AWS CLI 的自动分段上传 https://aws.amazon.com/cn/blogs/china/uploading-using-s3/

步骤五:创建并配置选项组

下面就是要创建和配置选项组,目的是添加 S3 的路径将 S3 上的.bak 文件还原到 RDS 上。

在创建选项组之前要确认一下 RDS 的 Engine 版本号,先记下来。

使用 SQLServer 备份文件.bak 还原至 RDS

创建 Option Group

使用 SQLServer 备份文件.bak 还原至 RDS

这里可能会问到,我的 RDS SQL server 对应 Engine 是什么?如下图:

使用 SQLServer 备份文件.bak 还原至 RDS

我的 RDS 用的是 SQL Server Standard Edition 所用选择 sqlserver-se

根据前面 RDS instance 的截图,Major engine version 就是 14.00。

使用 SQLServer 备份文件.bak 还原至 RDS

Add Option:
使用 SQLServer 备份文件.bak 还原至 RDS

选择 Add option,选项如下图:

使用 SQLServer 备份文件.bak 还原至 RDS

修改 RDS 实例并关联选项组

使用 SQLServer 备份文件.bak 还原至 RDS

Change Option Group 为我们创建的 Option Group

使用 SQLServer 备份文件.bak 还原至 RDS
使用 SQLServer 备份文件.bak 还原至 RDS

modifying 这个状态大概会持续 30-60 秒,刷新一下
使用 SQLServer 备份文件.bak 还原至 RDS

步骤六:使用 SSMS 将 S3 上的 bak 还原到 RDS 上

回到 SSMS 工具的 EC2 管理主机上执行还原脚本:

例 未加密

复制代码
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';

这里执行未加密的脚本:

复制代码
exec msdb.dbo.rds_restore_database
@restore_db_name='adventurerestore',
@s3_arn_to_restore_from='arn:aws:s3:::sqlbakfilestest/AdventureWorks2017.bak';

执行脚本,开始还原。

使用 SQLServer 备份文件.bak 还原至 RDS

执行 exec msdb.dbo.rds_task_status; 查看任务状态 complete 100 代表完成。

使用 SQLServer 备份文件.bak 还原至 RDS

刷新数据库 还原的 adventurestore 已经建立好。

验证数据:
使用 SQLServer 备份文件.bak 还原至 RDS

Trouble Shooting:

以下是使用本地备份和还原时可能会遇到的问题。

问题 问题排查建议
Access Denied 备份或恢复流程无法访问备份文件。这通常由类似于以下的问题导致: 1. 引用不正确存储桶。使用不正确的格式引用存储桶。引用文件名但未使用 ARN。 2. 存储桶文件的权限不正确。例如,如果文件由正在尝试访问它的其他账户创建,请添加正确的权限。3. IAM 策略不正确或不完整。您的 IAM 角色必须包含所有的必要元素,例如,包括正确的版本。导入和导出 SQL Server 数据库中重点介绍了这些内容。
BACKUP DATABASE WITH COMPRESSION is not supported on <edition_name> Edition 仅 Microsoft SQL Server Enterprise Edition 和 Standard Edition 支持压缩备份文件。有关更多信息,请参阅 压缩备份文件
Database <database_name> cannot be restored because there is already an existing database with the same family_guid on the instance 您无法将一个备份文件还原到已用于创建该备份文件的同一数据库实例。而是应将该备份文件还原到新的数据库实例。您也无法将同一备份文件多次还原到一个数据库实例。也就是说,您无法将备份文件还原到已包含您正在还原的数据库的数据库实例。而是应将该备份文件还原到新的数据库实例。
Key does not exist 您已尝试还原一个加密备份,但未提供有效的加密密钥。检查您的加密密钥并重试。有关更多信息,请参阅 还原数据库
Please specify a bucket that is in the same region as RDS instance 您无法备份到与您的 Amazon RDS 数据库实例不同的 AWS 区域中的 Amazon S3 存储桶或从中进行还原。您可以使用 Amazon S3 复制将备份文件复制到正确的区域。有关更多信息,请参阅 Amazon S3 文档中的跨区域复制
The specified bucket does not exist 验证您使用正确格式为存储桶和文件提供了正确的 ARN。有关更多信息,请参阅 使用本机备份和还原

总结:

我们在迁移和还原的过程中就可以发现,AWS 对于服务的访问,数据库的连接,网络端口等等都会有非常详细的安全准则。数据库的安全是云中数据安全的非常重要的一部分。另外,对于数据库的高可用和安全,我们都可以通过这个博客了解。除此之外,Amazon Relational Database Service (Amazon RDS) 让用户能够在云中更轻松地设置、操作和扩展关系数据库。支持您已熟悉的数据库产品:MySQL、MariaDB、PostgreSQL、Oracle 和 Microsoft SQL Server。最后,打个广告,具有高性能并且与 MySQL 和 PostgreSQL 兼容的完全托管的关系数据库引擎——Aurora 不仅具有商用数据库的速度和可靠性,同时还具有开源数据库的简单性和成本效益。您可以通过 DMS 工具来进行同构或异构数据库的迁移。 https://docs.aws.amazon.com/zh_cn/AmazonRDS/latest/AuroraUserGuide/CHAP_AuroraOverview.html

作者介绍:

李强
AWS 解决方案架构师,负责基于 AWS 的云计算方案架构的咨询和设计,同时致力于 AWS 云服务在国内的应用和推广,在物联网和微软的技术栈有着广泛的设计和实践经验。在加入 AWS 之前,曾在东芝中国负责系统开发和运维工作,在微软中国负责中小企业的技术咨询和方案设计工作。

本文转载自 AWS 技术博客。

原文链接:
https://amazonaws-china.com/cn/blogs/china/use-sql-server-copyfile-bak-rds/

欲了解 AWS 的更多信息,请访问【AWS 技术专区】

评论

发布