本文档介绍如何通过全量备份文件将自建SQL Server数据库的多个库或所有库全量迁移至阿里云RDS SQL Server。
前提条件
RDS实例为如下版本:
- RDS SQL Server集群系列(2017企业版、2019企业版)
- RDS SQL Server高可用系列(2008 R2、2012标准版、2012企业版、2014标准版、2014企业版、2016标准版、2016企业版、2017标准版、2019标准版)
- RDS SQL Server基础系列(2012企业基础版、2012Web版、2016Web版)
背景信息
RDS SQL Server为您提供了三种基于OSS的数据库上云方案:
全量备份数据上云(SQL Server 2008 R2)
全量备份数据上云(SQL Server 2012、2014、2016、2017和2019)
增量备份数据上云(SQL Server 2012、2014、2016、2017和2019)
以上三种数据库上云方案迁移的级别为数据库,即每次只能完成一个数据库迁移上云。如果SQL Server实例需要迁移的数据库数量较多,上述迁移方案将不再适用。
为解决多个数据库迁移上云问题,RDS SQL Server推出了实例级别的数据库迁移上云方案,您只需将SQL Server实例中所有数据库的完整备份文件上传到OSS Bucket(存储空间)的同一文件夹中,然后执行迁移上云脚本即可。
注意事项
- 本方案仅支持全量迁移上云,暂不支持增量迁移上云。
- 如果需要使用子账号执行迁移上云,请为子账号授予OSS和RDS的读写权限(即AliyunOSSFullAccess和AliyunRDSFullAccess权限)。
准备工作
- 安装Python2.7.18版本,详情请参见Python官网。
- 确认Python安装成功并查看版本。
- Windows操作系统
执行
c:\Python27\python.exe -V
查看Python版本,如果输出内容为:Python 2.7.18
表明您已安装成功。如果提示“不是内部或外部命令”, 请在Path环境变量中增加Python的安装路径和pip命令的目录。
- Mac、Linux或Unix操作系统
执行
python -V
查看Python版本,如果输出内容为:Python 2.7.18
表明您已安装成功。
- Windows操作系统
- 选择下述方法之一,安装SDK依赖包:
- 使用pip安装
pip install aliyun-python-sdk-rds pip install oss2
- 使用源码安装
# 克隆OpenAPI git clone https://github.com/aliyun/aliyun-openapi-python-sdk.git # 安装阿里云SDK核心库 cd aliyun-python-sdk-core python setup.py install # 安装阿里云RDS SDK cd aliyun-python-sdk-rds python setup.py install # 克隆阿里云OSS SDK git clone https://github.com/aliyun/aliyun-oss-python-sdk.git cd aliyun-oss-python-sdk # 安装阿里云OSS2 SDK python setup.py install
- 使用pip安装
- 创建与目标RDS实例相同地域的存储空间(Bucket)。
说明 如果存储空间已经存在,请跳过本步骤。
- 在目标RDS实例中创建与待迁移数据库名称相同的数据库,保持数据库为空。
- 如果目标实例是RDS SQL Server 2012及以上版本,无需执行本步骤。
- 如果目标实例是RDS SQL Server 2008R2版本。
- 备份自建SQL Server的所有数据库。警告
- 为保障数据一致性,在执行全量备份期间,请勿写入新的数据,请提前安排以免影响业务运行。
- 如果您不使用备份脚本来执行备份,备份文件必须按照
数据库名称_备份类型_备份时间.bak
的格式来命名,例如Testdb_FULL_20180518153544.bak
。
- 下载备份脚本。
- 双击备份脚本,使用Microsoft SQL Server Management Studio(SSMS)客户端打开。
- 根据业务需求,修改下述参数。
示例:配置项 说明 @backup_databases_list 需要备份的数据库,多个数据库以分号或者逗号分隔。 @backup_type 备份类型,取值: - FULL:全量备份。
- DIFF:差异备份。
- LOG:日志备份。
注意 本案例中,取值需为FULL。
@backup_folder 备份文件所在的本地目录。如不存在,会自动创建。 @is_run 是否执行备份,取值: - 1:执行备份。
- 0:仅执行检查,不执行备份。
SELECT /** * Databases list needed to backup, delimiter is : or , * empty('') or null: means all databases excluding system database * example: '[testdb]: TestDR, Test, readonly' **/ @backup_databases_list = N'[dtstestdata],[testdb]' @backup_type = N'FULL', -- Backup Type? FULL: FULL backup; DIFF: Differential backup; LOG: Log backup @backup_folder = N'C:\BACKUP' -- Backup folder to store backup files. @is_run = 1 -- Check or run? 1, run directly; 0, just check
- 运行备份脚本,数据库将备份至指定的目录中。
- 根据需求选择下述方法,将数据库备份文件上传到OSS的存储空间中。
警告 请确保上传的OSS存储空间和RDS实例属于同一地域,既可以提高RDS读取备份文件效率,也可以避免无法下载备份文件导致任务失败。
方法 说明 使用OSS Browser工具上传 推荐使用OSS Browser工具上传备份文件到OSS。 注意 如果您的自建数据库部署在ECS实例上,且ECS实例的网络为专有网络,那么在使用OSS Browser工具登录时,请用OSS Endpoint的专有网络地址,通过内网上传备份文件到OSS,提升备份文件上传的效率。
使用OSS控制台上传 如果备份文件小于5GB,可以直接使用OSS控制台上传。 使用OSS API上传 如果您有全自动无人干预上云需求,请使用OSS OpenAPI,通过断点续传的方式上传备份文件到OSS Bucket。
将数据库迁移至RDS
- 下载迁移上云脚本。
- 解压后执行如下命令,了解该脚本需要传入的参数信息。
python ~/Downloads/RDSSQLCreateMigrateTasksBatchly.py -h
结果如下:
RDSSQLCreateMigrateTasksBatchly.py -k <access_key_id> -s <access_key_secret> -i <rds_instance_id> -e <oss_endpoint> -b <oss_bucket> -d <directory>
表 1. 参数说明 参数 说明 access_key_id 目标RDS实例所属的阿里云账号的AccessKey ID。 access_key_secret 目标RDS实例所属的阿里云账号的AccessKey Secret。 rds_instance_id 目标RDS实例ID。 oss_endpoint 备份文件所属的存储空间的Endpoint地址。 oss_bucket 备份文件所属的存储空间名称。 directory 备份文件在OSS存储空间中的目录。如果是根目录,请传入 /
。 - 执行迁移上云脚本,完成迁移任务。
示例:
将OSS存储空间(名称为testdatabucket)的Migrationdata目录中,所有满足条件的备份文件全量迁移到RDS SQL Server实例(实例ID为rm-2zesz5774ud8s****)。
python ~/Downloads/RDSSQLCreateMigrateTasksBatchly.py -k LTAIQ**** -s BMkIUhroub******** -i rm-2zesz5774ud**** -e oss-cn-beijing.aliyuncs.com -b testdatabucket -d Migrationdata
- 查看迁移任务的执行进度。
- 访问RDS实例列表,在上方选择地域,然后单击目标实例ID。
- 根据RDS实例的版本,选择下述操作步骤:
- RDS SQL Server 2008 R2
单击左侧导航栏的数据上云,你可以查看到所有提交的迁移上云任务。
说明 可以单击右上角的刷新来查看迁移上云任务的最新状态。
- RDS SQL Server 2012及以上版本
单击左侧导航栏的备份恢复,然后单击备份数据上云记录页签。
说明 默认会展示最近一周的记录,您可以选择时间范围来查看特定时间段内的上云恢复记录。
- RDS SQL Server 2008 R2