详情页标题前

阿里云RDS数据库SQL Server实例级别迁移上云-云淘科技

详情页1

本文介绍如何通过全量备份文件将自建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进行权限管理。

限制条件

本方案仅支持全量迁移上云,暂不支持增量迁移上云。

准备工作

  1. 安装Python2.7.18版本,详情请参见Python官网。

  2. 确认Python安装成功并查看版本。

    • Windows操作系统

      执行c:\Python27\python.exe -V查看Python版本,如果输出内容为:Python 2.7.18表明您已安装成功。

      如果提示“不是内部或外部命令”,请在Path环境变量中增加Python的安装路径和pip命令的目录。

      阿里云RDS数据库SQL Server实例级别迁移上云-云淘科技

    • Mac、Linux或Unix操作系统

      执行python -V查看Python版本,如果输出内容为:Python 2.7.18表明您已安装成功。

  3. 选择下述方法之一,安装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
  4. 创建与目标RDS实例相同地域的存储空间(Bucket),详情请参见创建存储空间。

    说明

    如果存储空间已经存在,请跳过本步骤。

  5. 在目标RDS实例中创建与待迁移数据库名称相同的数据库,保持数据库为空。

    • 如果目标实例是RDS SQL Server 2012及以上版本,无需执行本步骤。

    • 如果目标实例是RDS SQL Server 2008 R2版本,详情请参见创建数据库和账号(SQL Server 2008 R2)。

  6. 备份自建SQL Server的所有数据库。

    警告

    • 为保障数据一致性,在执行全量备份期间,请勿写入新的数据,请提前安排以免影响业务运行。

    • 如果您不使用备份脚本来执行备份,备份文件必须按照数据库名称_备份类型_备份时间.bak的格式来命名,例如Testdb_FULL_20180518153544.bak,否则会导致备份报错。

    1. 下载备份脚本。

    2. 双击备份脚本,使用Microsoft SQL Server Management Studio(SSMS)客户端打开。SSMS的连接方法,请参见官方文档。

    3. 根据业务需求,修改下述参数。

      配置项

      说明

      @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
    4. 运行备份脚本,数据库将备份至指定的目录中。

      阿里云RDS数据库SQL Server实例级别迁移上云-云淘科技

  7. 根据需求选择下述方法,将数据库备份文件上传到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

  1. 下载迁移上云脚本。

  2. 解压后执行如下命令,了解该脚本需要传入的参数信息。

    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存储空间中的目录。如果是根目录,请传入/

  3. 执行迁移上云脚本,完成迁移任务。

    示例:

    将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
  4. 查看迁移任务的执行进度。

    1. 访问RDS实例列表,在上方选择地域,然后单击目标实例ID。
    2. 根据RDS实例的版本,选择下述操作步骤:

      • RDS SQL Server 2008 R2

        单击左侧导航栏的数据上云,您可以查看到所有提交的迁移上云任务。

        说明

        可以单击右上角的刷新来查看迁移上云任务的最新状态。

      • RDS SQL Server 2012及以上版本

        单击左侧导航栏的备份恢复,然后单击备份数据上云记录页签。

        说明

        默认会展示最近一周的记录,您可以选择时间范围来查看特定时间段内的上云恢复记录。

视频演示

常见错误

错误提示

原因

解决方法

HTTP Status: 404 Error:InvalidAccessKeyId.NotFound Specified access key is not found. RequestID: XXXXXXXXXXXXXXXXX

调用OpenAPI时使用的AccessKey ID不正确。

传入正确的AccessKey ID和AccessKey Secret,查看方法请参见访问密钥常见问题。

HTTP Status: 400 Error:IncompleteSignature The request signature does not conform to Aliyun standards. server string to sign is:......

调用OpenAPI时使用的AccessKey Secret不正确。

RDS engine doesn't support, this is only for RDS SQL Server engine.

本方案仅支持RDS SQL Server,不支持其他引擎。

将RDS SQL Server作为迁移的目标实例。

Couldn't find specify RDS [XXX].

RDS实例ID不存在。

检查传入的RDS实例ID是否正确。

{'status': -2, 'request-id': '', 'details': "RequestError: HTTPConnectionPool(host='xxxxxxxxxxxxxxxxx', port=80): Max retries exceeded with url: /?bucketInfo= (Caused by NewConnectionError(': Failed to establish a new connection: [Errno 8] nodename nor servname provided, or not known',))"}

Endpoint错误,导致连接失败。

检查传入的Endpoint是否正确,获取方法请参见存储空间概览。

{'status': 404,'-id': 'xxxxxxxxx', 'details': {'HostId': 'xxxxxxxxx', 'Message': 'The specified bucket does not exist.', 'Code': 'NoSuchBucket', 'RequestId': 'xxxxxxxx', 'BucketName': 'aaaatp-test-on-ecs'}}

OSS Bucket(存储空间)不存在。

检查传入的OSS Bucket是否正确。

There is no backup file on OSS Bucket [xxxxxx] under [xxxxxxxxx] folder, check please.

OSS Bucket中对应的文件夹不存在或文件夹中没有满足条件的数据库备份文件。

检查OSS Bucket中文件夹是否存在,同时检查该文件夹中是否存在满足条件的数据库备份文件。

Warning!!!!!, [autotest_2005_ent_broken_full_dbcc_failed.bak] is not backup file, filtered.

备份文件的名称不符合规范。

如果您不使用备份脚本来执行备份,备份文件必须按照数据库名称_备份类型_备份时间.bak的格式来命名,例如Testdb_FULL_20180518153544.bak

HTTP Status: 403 Error:Forbidden.RAM The user is not authorized to operate the specified resource, or this operation does not support RAM. RequestID: xxxxx{'status': 403, 'request-id': 'xxxx', 'details': {'HostId': 'atp-test-on-ecs.oss-cn-beijing.aliyuncs.com', 'Message': 'The bucket you visit is not belong to you.', 'Code': 'AccessDenied', 'RequestId': 'xxxx'}}

子账号权限不足。

需要为子账号授予OSS和RDS的读写权限(即AliyunOSSFullAccessAliyunRDSFullAccess权限)。关于授权操作方法,请参见为RAM用户授权。

OPENAPI Response Error !!!!! : HTTP Status: Error: . RequestID: 32BB6886-775E-4BB7-A054-635664****

调用OpenAPI返回了错误信息。

根据错误码和错误信息来分析具体原因,详情请参见OpenAPI错误码。

表 2. 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.

数据库不存在。

  • RDS SQL Server 2008R2需要先创建同名数据库。

  • RDS SQL Server 2012及以上版本,要求不能存在同名的数据库。

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

(0)
上一篇 2023年12月9日 下午7:43
下一篇 2023年12月9日
详情页2

相关推荐

  • 在阿里函数计算里fc 多实例 IP动态的 我怎么设置rds的白名单呢?-云小二-阿里云

    在阿里函数计算里fc 多实例 IP动态的 我怎么设置rds的白名单呢? 以下为热心网友提供的参考意见 配置固定公网IP地址https://help.aliyun.com/zh/fc/user-guide/configure-static-public-ip-addresses?spm=a2c4g.11186623.0.i98 函数计算访问数据库、微信小程序或…

    阿里云 2023年12月13日
  • 阿里云大数据开发治理平台 DataWorks补数据-云淘科技

    本文为您介绍补数据的相关问题。 补数据功能说明 为什么小时分钟任务补数据选择了并行但实际不生效? 为什么补数据选择业务时间后不运行,实例显示黄色,实例状态显示等待时间? 为什么补数据选择业务时间昨天和今天,也会出现等待时间的情况? 为什么补数据选择补0点~1点生成了多个实例? 为什么进行大量补数据操作时,会出现等待资源情况(实例显示黄色,实例状态为等待资源)…

    2023年12月10日
  • 腾讯云TDSQL-C MySQL版闪回查询

    功能介绍 在数据库运维过程中可能会发生误操作的情况,这些误操作可能会给业务带来严重的影响,因误操作导致业务受到影响时,常见的恢复手段有回档、克隆等操作,但对于少量的数据变更以及紧急故障修复而言,容易出错且耗时较长,在数据量较大时恢复时间不可控。TXSQL 团队在 Innodb 引擎上设计和实现了闪回查询功能,仅需通过简单的 SQL 语句即可查询误操作前的历史…

    腾讯云 2023年12月9日
  • 腾讯云对象存储媒体 bucket 接口

    简介 本文档提供关于媒体 bucket 接口的 API 概览和 SDK 示例代码。 API 操作名 操作描述 DescribeMediaBuckets 查询媒体处理开通情况 用于查询已经开通媒体处理功能的存储桶 查询媒体处理开通情况 功能说明 用于查询已经开通媒体处理功能的存储桶。注意COS Javascript SDK 版本需要大于等于 v1.3.1。 使…

    腾讯云 2023年12月9日
  • 信息流广告,信息流部分建议宽度830px,只针对默认列表样式,顺序随机
  • 阿里云RDS数据库ModifyReadWriteSplittingConnection – 修改读写分离链路的延迟阈值和各个实例的读权重-云淘科技

    该接口用于修改读写分离链路的延迟阈值和各个实例的读权重。 接口说明 适用引擎 RDS MySQL RDS SQL Server 前提条件 调用该接口时,实例必须满足以下条件,否则将操作失败: MySQL实例使用的是共享代理。 MySQL实例已开通读写分离。 实例为如下版本: MySQL 5.7高可用系列(本地SSD盘) MySQL 5.6 SQL Serve…

    阿里云数据库 2023年12月9日

联系我们

400-800-8888

在线咨询: QQ交谈

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信
本站为广大会员提供阿里云、腾讯云、华为云、百度云等一线大厂的购买,续费优惠,保证底价,买贵退差。