本文介绍如何通过全量备份文件将自建SQL Server数据库的多个库或所有库全量迁移至阿里云RDS SQL Server。
背景信息
为解决多个数据库迁移上云问题,RDS SQL Server推出了实例级别的数据库迁移上云方案,参见本文操作,您只需将SQL Server实例中所有数据库的完整备份文件上传到OSS Bucket(存储空间)的同一文件夹中,然后执行迁移上云脚本即可。
说明
如果您的上云迁移级别为数据库,即每次只需完成一个数据库迁移上云,SQL Server提供了以下三种基于OSS的数据库上云方案:
-
全量备份数据上云(SQL Server 2008 R2)
-
全量备份数据上云(SQL Server 2012及以上版本)
-
增量备份数据上云(SQL Server 2012及以上版本)
前提条件
-
目标端RDS SQL Server实例为2012及以上版本。
-
源端数据库需为自建SQL Server。
-
如果是RAM用户执行迁移上云,需为RAM账号授予AliyunOSSFullAccess权限和AliyunRDSFullAccess权限。如何为RAM用户授权,请参见通过RAM对OSS进行权限管理和通过RAM对RDS进行权限管理。
限制条件
本方案仅支持全量迁移上云,暂不支持增量迁移上云。
准备工作
-
安装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
表明您已安装成功。
-
-
选择下述方法之一,安装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
-
-
创建与目标RDS实例相同地域的存储空间(Bucket),详情请参见创建存储空间。
说明
如果存储空间已经存在,请跳过本步骤。
-
在目标RDS实例中创建与待迁移数据库名称相同的数据库,保持数据库为空。
-
如果目标实例是RDS SQL Server 2012及以上版本,无需执行本步骤。
-
如果目标实例是RDS SQL Server 2008 R2版本,详情请参见创建数据库和账号(SQL Server 2008 R2)。
-
-
备份自建SQL Server的所有数据库。
警告
-
为保障数据一致性,在执行全量备份期间,请勿写入新的数据,请提前安排以免影响业务运行。
-
如果您不使用备份脚本来执行备份,备份文件必须按照
数据库名称_备份类型_备份时间.bak
的格式来命名,例如Testdb_FULL_20180518153544.bak
,否则会导致备份报错。
-
下载备份脚本。
-
双击备份脚本,使用Microsoft SQL Server Management Studio(SSMS)客户端打开。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,详情请参见快速使用ossbrowser。
重要
如果您的自建数据库部署在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 -s -i -e -b -d
表 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及以上版本
单击左侧导航栏的备份恢复,然后单击备份数据上云记录页签。
说明
默认会展示最近一周的记录,您可以选择时间范围来查看特定时间段内的上云恢复记录。
-
视频演示
常见错误
错误提示 |
原因 |
解决方法 |
|
调用OpenAPI时使用的AccessKey ID不正确。 |
传入正确的AccessKey ID和AccessKey Secret,查看方法请参见访问密钥常见问题。 |
|
调用OpenAPI时使用的AccessKey Secret不正确。 |
|
|
本方案仅支持RDS SQL Server,不支持其他引擎。 |
将RDS SQL Server作为迁移的目标实例。 |
|
RDS实例ID不存在。 |
检查传入的RDS实例ID是否正确。 |
|
Endpoint错误,导致连接失败。 |
检查传入的Endpoint是否正确,获取方法请参见存储空间概览。 |
|
OSS Bucket(存储空间)不存在。 |
检查传入的OSS Bucket是否正确。 |
|
OSS Bucket中对应的文件夹不存在或文件夹中没有满足条件的数据库备份文件。 |
检查OSS Bucket中文件夹是否存在,同时检查该文件夹中是否存在满足条件的数据库备份文件。 |
|
备份文件的名称不符合规范。 |
如果您不使用备份脚本来执行备份,备份文件必须按照 |
|
子账号权限不足。 |
需要为子账号授予OSS和RDS的读写权限(即AliyunOSSFullAccess和AliyunRDSFullAccess权限)。关于授权操作方法,请参见为RAM用户授权。 |
|
调用OpenAPI返回了错误信息。 |
根据错误码和错误信息来分析具体原因,详情请参见OpenAPI错误码。 |
HTTP Status Code |
Error |
Description |
说明 |
403 |
InvalidDBName |
The specified database name is not allowed. |
非法的数据库名字,不允许使用系统数据库名。 |
403 |
IncorrectDBInstanceState |
Current DB instance state does not support this operation. |
RDS实例状态不正确。例如,实例状态为创建中。 |
400 |
IncorrectDBInstanceType |
Current DB instance type does not support this operation. |
不支持的引擎,该功能仅支持RDS SQL Server。 |
400 |
IncorrectDBInstanceLockMode |
Current DB instance lock mode does not support this operation. |
数据库锁定状态不正确。 |
400 |
InvalidDBName.NotFound |
Specified one or more DB name does not exist or DB status does not support. |
数据库不存在。
|
400 |
IncorrectDBType |
Current DB type does not support this operation. |
数据库类型不支持该操作。 |
400 |
IncorrectDBState |
Current DB state does not support this operation. |
数据库状态不正确,例如,数据库在创建中或者正在上云任务中。 |
400 |
UploadLimitExceeded |
UploadTimesQuotaExceeded: Exceeding the daily upload times of this DB. |
上云次数超过限制,每个实例每个库每天不超过20次上云操作。 |
400 |
ConcurrentTaskExceeded |
Concurrent task exceeding the allowed amount. |
上云次数超过限制,每个实例每天上云总次数不超过500次。 |
400 |
IncorrectFileExtension |
The file extension does not support. |
备份文件的后缀名错误。 |
400 |
InvalidOssUrl |
Specified oss url is not valid. |
提供的OSS下载链接地址不可用。 |
400 |
BakFileSizeExceeded |
Exceeding the allowed bak file size. |
数据库备份文件超过限制,最大不超过3TB。 |
400 |
FileSizeExceeded |
Exceeding the allowed file size of DB instance. |
还原备份文件后将超过当前实例的存储空间。 |
相关API
API |
描述 |
创建上云任务 |
创建数据上云任务 |
创建打开数据库任务 |
打开数据库 |
查询上云任务列表 |
查询数据上云任务列表 |
查询上云任务文件 |
查看数据上云任务文件详情 |
内容没看懂? 不太想学习?想快速解决? 有偿解决: 联系专家
阿里云企业补贴进行中: 马上申请
腾讯云限时活动1折起,即将结束: 马上收藏
同尘科技为腾讯云授权服务中心。
购买腾讯云产品享受折上折,更有现金返利:同意关联,立享优惠
转转请注明出处:http://www.yunxiaoer.com/155659.html