云服务器内容精选

  • 备份文件准备 请先阅读以确保您已了解备份迁移任务所需要的各项使用条件,以便帮助您顺利完成数据迁移。 表2 备份文件准备 迁移场景 准备工作 OBS自建桶场景 准备一个OBS桶,如果没有,则首先需要创建,相关操作请参见《 对象存储服务 控制台指南》中“创建桶”章节。 OBS桶里需要存在待还原的数据库备份文件,如果没有,需将本地的备份文件上传到OBS桶,并注意备份文件名称格式的正确性。上传备份文件的方法请参见《对象存储服务控制台指南》中“上传文件”章节。 如果批量上传多个文件(单次最多支持100个文件同时上传,总大小不超过5GB),或单次上传文件大于5GB,需下载OBS Browser+客户端,安装并登录,相关操作请参见《对象存储服务客户端指南》。 说明: 本地备份文件上传到OBS桶时,暂不支持KMS加密方式。 本地备份文件上传到OBS桶时,请选择“标准存储”,否则会导致备份文件迁移失败。 当桶内数据超过500条,可能会造成数据溢出现象,导致部分数据无法展示,建议使用独立的标准桶,桶的权限为公共读。 建议备份文件放置于同区域且独立的公共桶,混用其他公共桶可能会因为其他文件过多,而无法展示迁移备份文件。
  • 支持的源和目标数据库 表1 支持的数据库 源数据库版本 目标数据库版本 本地及其他云Microsoft SQL Server数据库备份文件版本: Microsoft SQL Server 2000 企业版、标准版 Microsoft SQL Server 2005 企业版、标准版 Microsoft SQL Server 2008 企业版、标准版、Web版 Microsoft SQL Server 2012 企业版、标准版、Web版 Microsoft SQL Server 2014 企业版、标准版、Web版 Microsoft SQL Server 2016 企业版、标准版、Web版 Microsoft SQL Server 2017 企业版、标准版、Web版 Microsoft SQL Server 2019 企业版、标准版、Web版 RDS for SQL Server Microsoft SQL Server 2008 企业版、标准版、Web版(存量版本) Microsoft SQL Server 2012 企业版、标准版、Web版 Microsoft SQL Server 2014 企业版、标准版、Web版 Microsoft SQL Server 2016 企业版、标准版、Web版 Microsoft SQL Server 2017 企业版、标准版、Web版 Microsoft SQL Server 2019 企业版、标准版、Web版 说明: 仅支持目标库大版本等于或高于源库大版本。 仅支持目标库功能性版本等于或高于源库功能性版本,如web版到标准版、标准版到企业版、企业版到企业版
  • 支持的源和目标数据库 表1 支持的数据库 源数据库版本 目标数据库版本 RDS for SQL Server全量备份文件版本: Microsoft SQL Server 2008 企业版、标准版、Web版 Microsoft SQL Server 2012 企业版、标准版、Web版 Microsoft SQL Server 2014 企业版、标准版、Web版 Microsoft SQL Server 2016 企业版、标准版、Web版 Microsoft SQL Server 2017 企业版、标准版、Web版 Microsoft SQL Server 2019 企业版、标准版、Web版 RDS for SQL Server Microsoft SQL Server 2008 企业版、标准版、Web版(存量版本) Microsoft SQL Server 2012 企业版、标准版、Web版 Microsoft SQL Server 2014 企业版、标准版、Web版 Microsoft SQL Server 2016 企业版、标准版、Web版 Microsoft SQL Server 2017 企业版、标准版、Web版 Microsoft SQL Server 2019 企业版、标准版、Web版 说明: 仅支持目标库大版本等于或高于源库大版本。 仅支持目标库功能性版本等于或高于源库功能性版本,如web版到标准版、标准版到企业版、企业版到企业版
  • 多表归一场景注意事项 DRS支持多表对一的数据聚合场景,最佳实践是推荐只选择同步加列DDL,其他大部分DDL同步都可能会因目标表修改而导致其他任务失败或数据不一致的情况发生,常见情况有:同步truncate导致目标数据全部被清空;同步创建索引导致目标表被锁定;同步rename导致其他任务找不到目标表而失败;同步改列导致其他任务因数据类型不兼容而失败。 多表归一高风险操作: DROP、TRUNCATE、RENAME等高危DDL未过滤,导致目标表DROP、TRUNCATE、RENAME。 随意执行DDL,导致同步任务中断未提前识别业务数据冲突,出现同步后数据不一致。 多对一的表不支持Online DDL工具。Online DDL通常会使用临时表和执行rename操作,多对一任务如果未过滤rename会导致目标数据丢失。 多表归一DDL操作技巧: 增加列ADD COLUMN: 配置DRS任务时过滤ADD COLUMN:先在目标库目标表增加列,再在每个多对一任务的源库源表分别增加列。同步任务会自动兼容源表列少于目标表的场景,因此任务不受影响。顺序相反则会导致任务中断。 配置DRS任务时未过滤ADD COLUMN:DRS会自动识别只执行一次DDL,不会导致任务失败。 修改列MODIFY COLUMN: 配置DRS任务时过滤MODIFY COLUMN:需要确保所有源表已经完成同步无时延并且无业务写入,先在目标库目标表修改列,再在每个多对一任务的源库源表分别修改列。 配置DRS任务时未过滤MODIFY COLUMN:DRS会自动识别只执行一次DDL,不会导致任务失败。 删除列DROP COLUMN: 配置DRS任务时过滤DROP COLUMN:先在每个源库源表删除列,多对一任务的所有源表删除列后,再在目标库表删除列。同步任务会自动兼容源表列少于目标表的场景,因此任务不受影响。顺序相反则会导致任务中断。 配置DRS任务时未过滤DROP COLUMN:DRS会自动识别只执行一次DDL,不会导致任务失败。 DROP、TRUNCATE类操作: 高危操作建议配置DRS任务时过滤掉,手工执行。如果未选择过滤,多对一任务一张源表的DROP、TRUNCATE操作会同步到目标表执行DROP、TRUNCATE操作,比如多对一任务DROP掉其中一个表,在目标库就把多对一的表DROP掉了,DROP索引、DROP约束是类似的。
  • 注意事项 为保证任务的正常运行,DRS提供了自动化的检查方法,在您启动DRS任务前,会针对源数据库和目标数据库的相关配置、条件进行检查。主要的检查项和对应的处理建议请参考DRS预检查项一览表。除了预检查项目之外,您还需要注意的事情如表4所示 表4 注意事项 类型名称 使用和操作限制 源数据库限制 源数据库不能是GeminiDB Mongo实例。 源数据库的库名不能包含/\."$和空格,集合名和视图名中不能包含$字符或以system.开头。 多个源数据库迁移到同一个目标数据库时,所选的待迁移数据库的库名不能重复。 副本集:MongoDB数据库的副本集实例状态必须正常,要存在主节点。 使用限制 通用: 整个迁移过程中,不允许修改、删除连接源和目标数据库的用户的用户名、密码、权限,或修改源和目标数据库的端口号。 整个迁移过程中,不允许对正在迁移中的目标数据库进行修改操作(包括但不限于DDL、DML操作)。 整个迁移过程中,不支持源数据库主备切换导致数据回滚的情况。 整个迁移过程中,不支持insert、update源库大于16MB的文档。 整个迁移过程中,源数据库不允许手动执行sh.moveChunk()操作,否则将导致迁移数据不一致。 全量迁移阶段: 任务启动和全量数据迁移阶段,请不要在源数据库执行DDL操作,否则可能导致任务异常。 增量迁移阶段: 选择集合迁移时,增量迁移过程中不建议对集合进行重命名操作。 数据对比: 建议在源库的业务低峰期进行数据比对,防止误报不一致数据,以及减少对源库和DRS任务的冲击。 在增量同步过程中做对比时,源库若存在写入,则对比结果可能不一致。 行对比时,集群实例如果存在孤儿文档或者正在进行chunk迁移,会导致返回的行数不准确,对比结果不一致。详细情况可参考MongoDB官方文档。 其他限制 源数据库为非集群实例时,增量迁移阶段支持如下操作: 支持数据库(database)新建、删除。 支持文档(document)新增、删除、更新。 支持集合(collection)新建、删除。 支持索引(index)新建、删除。 支持视图(view)新建,删除。 支持convertToCapped、collMod、renameCollection命令。 源库是集群实例时,集群到集群的全量+增量迁移,全量阶段和增量阶段,不允许对迁移对象做删除操作,否则会导致任务失败。 对于在源数据库已经存在TTL索引的集合,或者在增量迁移期间在源库数据创建了TTL索引的集合,由于源数据库和目标库数据库时区,时钟的不一致,不能保证迁移完成之后数据的一致性。 由于目标库不支持压缩参数的设置,DRS不迁移压缩参数,迁移任务不报错。 如果源数据库的MongoDB服务不是单独部署的,而是和其他的服务部署在同一台机器,则必须要给源数据库的wiredTiger引擎加上cacheSizeGB的参数配置,建议值设为最小空闲内存的一半。 如果源数据库是副本集,则建议填写所有的主节点和备节点信息,以防主备切换影响迁移任务。如果填写的是主备多个节点的信息,注意所有的节点信息必须属于同一个副本集实例。
  • 支持的迁移对象范围 在使用DRS进行迁移时,不同类型的迁移任务,支持的迁移对象范围不同,详细情况可参考表2。DRS会根据用户选择,在“预检查”阶段对迁移对象进行自动检查。 表2 支持的迁移对象 类型名称 使用须知 迁移对象范围 支持选择表级、库级或实例级(全部迁移)。 副本集:目前只支持集合(包括验证器,是否是固定集合),索引和视图的迁移。 集群:目前只支持集合(包括验证器,是否是固定集合),分片键,索引和视图的迁移。 单节点:目前只支持集合(包括验证器,是否是固定集合),索引和视图的迁移。 不支持视图的创建语句中有正则表达式。 不支持_id字段没有索引的集合。 不支持BinData()的第一个参数为2。 不支持范围分片的情况下maxKey当主键。 不支持源库集合的String类型字段中存储非UTF-8类型字符串,否则会导致迁移前后数据不一致。
  • 数据库账号权限要求 在使用DRS进行迁移时,连接源库和目标库的数据库账号需要满足以下权限要求,才能启动实时迁移任务。不同类型的迁移任务,需要的账号权限也不同,详细可参考表3进行赋权。DRS会在“预检查”阶段对数据库账号权限进行自动检查,并给出处理建议。 表3 数据库账号权限 类型名称 全量迁移 全量+增量迁移 源数据库连接账号 副本集:连接源数据库的用户需要有admin库的readAnyDatabase权限。 单节点:连接源数据库的用户需要有admin库的readAnyDatabase权限。 集群:连接源数据库的用户需要有admin库的readAnyDatabase权限,有config库的read权限。 如果需要迁移源数据库用户和角色信息,连接源数据库和目标库数据库的用户需要有admin数据库的系统表system.users、system.roles的read权限。 副本集:连接源数据库的用户需要有admin库的readAnyDatabase权限,有local库的read权限。 单节点:连接源数据库的用户需要有admin库的readAnyDatabase权限,有local库的read权限。 集群:连接源数据库mongos节点的用户需要有admin库的readAnyDatabase权限,有config库的read权限,连接源数据库分片节点的用户需要有admin库的readAnyDatabase权限,有local库的read权限。 如果需要迁移源数据库用户和角色信息,连接源数据库和目标库数据库的用户需要有admin数据库的系统表system.users、system.roles的read权限。 目标数据库连接账号 连接目标数据库的用户需要有admin库的dbAdminAnyDatabase权限,有目标数据库的readWrite权限。 对于目标数据库是集群的实例,迁移账号还要有admin库的clusterManager权限。 建议创建单独用于DRS任务连接的数据库账号,避免因为数据库账号密码修改,导致的任务连接失败。 连接源和目标数据库的账号密码修改后,请尽快修改DRS任务中的连接信息,避免任务连接失败后自动重试,导致数据库账号被锁定影响使用。 用户赋权参考语句:连接源数据库的用户需要有admin库的readAnyDatabase权限和config库的read权限。 db.grantRolesToUser("用户名",[{role:"readAnyDatabase",db:"admin"}, {role:"read",db:"config"}])
  • 使用建议 如果您使用的是全量迁移模式,确保源和目标数据库无业务写入,保证迁移前后数据一致。如果您使用的是全量+增量迁移模式,支持在源数据库有业务数据写入的情况下进行迁移。 数据库迁移与环境多样性和人为操作均有密切关系,为了确保迁移的平顺,建议您在进行正式的数据库迁移之前进行一次演练,可以帮助您提前发现问题并解决问题。 迁移阶段,确保目标数据库无业务写入,保证迁移前后数据一致。 基于以下原因,建议您在启动任务时选择“稍后启动”功能,将启动时间设置在业务低峰期,相对静止的数据可以有效提升一次性迁移成功率,避免迁移对业务造成性能影响。 在网络无瓶颈的情况下,全量迁移会对源数据库增加约20MB/s的查询压力,以及占用2~4个CPU。 DRS并发读取数据库,会占用大约6-10个session连接数,需要考虑该连接数对业务的影响。 更多DRS对数据库的影响,可参考DRS对源数据库和目标数据库有什么影响。
  • 使用须知 DRS全量+增量迁移过程一般包含四个阶段:任务启动阶段、全量阶段、增量阶段、结束任务阶段(单全量任务则包含三个阶段)。为了确保迁移各个阶段的平顺,在创建迁移任务前,请务必阅读以下使用须知。 表3 使用须知 类型名称 使用和操作限制 任务启动前须知 源数据库要求: 源库必须是本云GeminiDB Redis实例。 一个GeminiDB Redis实例只能同时作为一个DRS任务的源端数据库。 源数据库GeminiDB Redis内核版本(gemini version)为4.2.0及以上。 源数据库GeminiDB Redis需要开启复制功能。 set config set enable-replication 1。 创建全量+增量任务,需要支持PSYNC命令。 目标数据库要求: 迁移前目标库建议为空。 目标数据库实例必须有足够的存储空间。 暂不支持Redis 6.0版本填写用户名。 如果目标库是通过容器、云服务器、或NAT等方式创建的集群,请保证集群的config设置可以使DRS发现全部的主备节点。 其他使用须知: 全量+增量任务使用解析RDB的方式读取数据。 如果源库GeminiDB Redis复制功能超时时间repl-timeout过小(当前默认是3600s),可以适当进行扩大,防止任务失败时间过长,导致任务无法续传。 迁移过程中,如果源库GeminiDB Redis增配导致任务失败,需要重置任务。且为保障数据一致性,在重置任务前,建议先清空已迁移至目标的数据。 迁移过程中,不支持源库GeminiDB Redis减配,如果源库需要减配,请重新创建迁移任务。 对于List对象,由于在调用PSYNC进行重传时,不会对目标端已有的数据进行清空,可能导致出现重复数据。 源库GeminiDB Redis为主备版时,不支持在源库执行包含多个key的命令(例如mset等),否则可能因为key不在同一个slot或者涉及多个slot,导致报错:CROSSSLOT Keys in request don't hash to the same slot。 全量迁移阶段须知 迁移过程中,不允许修改连接源和目标数据库的密码,或修改源和目标数据库的端口号。 迁移过程中,不允许对正在迁移中的目标数据库进行修改操作。 增量迁移阶段须知 迁移过程中,不允许修改连接源和目标数据库的密码,或修改源和目标数据库的端口号。 迁移过程中,不允许对正在迁移中的目标数据库进行修改操作。
  • 支持的迁移对象范围 在使用DRS进行迁移时,不同类型的迁移任务,支持的迁移对象范围不同,详细情况可参考表2。DRS会根据用户选择,在“预检查”阶段对迁移对象进行自动检查。 表2 支持的迁移对象 类型名称 使用须知 迁移对象范围 迁移对象选择维度:仅支持全部迁移。 支持的迁移对象: 支持String,Hash,List,Set,Sorted Set类型迁移。 不支持Lua脚本和事务的迁移。 不支持Stream,BitMap,HyperLogLog,GEO类型迁移。 不支持自定义类型。 不支持迁移目标库不支持的命令。 不支持迁移没有hash_tag的批量操作命令。
  • 使用流程 一次完整的实时迁移,是通过创建实时迁移任务,以迁移任务作为数据库迁移的导向,依次进行迁移进度观察、迁移 日志分析 、迁移数据一致性对比等多项操作。通过多项指标和数据的对比分析,可以帮助您确定合适的业务割接时机,实现最小化业务中断的数据库迁移。 一次完整的实时迁移包含如下过程: 图1 迁移流程 步骤一:创建迁移任务。根据需要,选择源和目标数据库,创建迁移任务。 步骤二:查询迁移进度。迁移过程中,可以通过查看迁移进度了解数据迁移完成情况。 步骤三:查看迁移日志。迁移日志包含告警、错误和提示等类型的信息,可根据此类信息分析系统存在的问题。 步骤四:对比迁移项。数据迁移提供对比功能,可根据需要查看对象级对比、数据级对比等,来确保源和目标数据库的数据一致性。 本章节将以MySQL到RDS for MySQL的迁移为示例,介绍在VPC网络场景下,通过 数据复制服务 管理控制台配置数据迁移任务的流程,其他存储引擎的配置流程类似。 VPC网络适合云上同Region数据库之间的迁移。 在数据复制服务中,数据库迁移是通过任务的形式完成的,通过创建任务向导,可以完成任务信息配置、任务创建。迁移任务创建成功后,您也可以通过数据复制服务管理控制台,对任务进行管理。
  • 使用建议 如果您使用的是全量迁移模式,确保源和目标数据库无业务写入,保证迁移前后数据一致。如果您使用的是全量+增量迁移模式,支持在源数据库有业务数据写入的情况下进行迁移。 数据库迁移与环境多样性和人为操作均有密切关系,为了确保迁移的平顺,建议您在进行正式的数据库迁移之前进行一次演练,可以帮助您提前发现问题并解决问题。 迁移阶段,确保目标数据库无业务写入,保证迁移前后数据一致。 基于以下原因,建议您在启动任务时选择“稍后启动”功能,将启动时间设置在业务低峰期,相对静止的数据可以有效提升一次性迁移成功率,避免迁移对业务造成性能影响。 在网络无瓶颈的情况下,全量迁移会对源数据库增加约20MB/s的查询压力,以及占用2~4个CPU。 DRS并发读取数据库,会占用大约6-10个session连接数,需要考虑该连接数对业务的影响。 更多DRS对数据库的影响,可参考DRS对源数据库和目标数据库有什么影响。
  • 使用须知 DRS全量+增量迁移过程一般包含四个阶段:任务启动阶段、全量阶段、增量阶段、结束任务阶段(单全量任务则包含三个阶段)。为了确保迁移各个阶段的平顺,在创建迁移任务前,请务必阅读以下使用须知。 表3 使用须知 类型名称 使用和操作限制 任务启动前须知 源数据库对象要求: 创建全量+增量任务,需要支持PSYNC命令。 目标数据库对象要求: 目标库必须是本云GeminiDB Redis实例。 迁移前目标库GeminiDB Redis实例必须为空。 目标数据库实例版本要高于或等于源数据库版本。 其他使用须知: 单全量任务使用SCAN方式读取数据。 全量+增量任务使用解析RDB的方式读取数据。 源库不支持PSYNC命令的情况下,请使用单全量模式迁移。 源库支持PSYNC命令,请使用全量+增量模式迁移。 单全量任务不支持迁移过期时间。 单全量任务不支持Lua脚本迁移。 迁移Lua脚本时,源库需要同时有其它数据,否则无法解析出RDB中的Lua脚本,导致Lua脚本迁移失败。 源库为自建单机版Redis时,增量阶段支持append,blpop,brpop,decr,decrby,del,expire,expireat,flushall,flushdb,getset,hdel,hincrby,hincrbyfloat,hmset,hset,hsetnx,incr,incrby,incrbyfloat,linsert,lpop,lpush,lpushx,lrem,lset,ltrim,move,mset,msetnx,multi,persist,pexpire,pexpireat,psetex,publish,rename,rpop,rpush,rpushx,sadd,select,set,setbit,setex,setnx,setrange,smove,spop,srem,zadd,zincrby,zrem,zremrangebylex,zremrangebyrank,zremrangebyscore。 源库为单机版Redis时,由于GeminiDB Redis只允许单个命令操作单个slot,若在源库执行包含多个key的命令操作时,key不在同一个slot或涉及多个slot,会出现报错:CROSSSLOT Keys in request don't hash to the same slot。 DRS不会对目标库进行FLUSH等高危操作,所以对于List列表类型数据,可能出现重复的数据。 为保障增量迁移有效进行,建议迁移前,评估源库Redis参数,将源库的配置文件redis.conf中repl-backlog-size参数的值适当调大。 迁移过程中,如果自建Redis发生扩缩容(例如增加或者减少分片)、规格变配(例如扩大内存),则需要重新配置迁移任务。且为保证数据一致性,在重新配置任务前,建议先清空已迁移至目标GeminiDB Redis的数据。 如果源库中的某些Key设置了过期(expire)策略,由于可能存在Key已过期但未被及时删除的情况,所以在目标库中查看Key数量(例如通过info命令查看)时会比源库的Key数量少。为保障数据的一致性,建议设置延长Key的过期时间。 全量迁移阶段须知 迁移过程中,不允许修改连接源和目标数据库的密码,或修改源和目标数据库的端口号。 迁移过程中,不允许对正在迁移中的目标数据库进行修改操作。 增量迁移阶段须知 迁移过程中,不允许修改连接源和目标数据库的密码,或修改源和目标数据库的端口号。 迁移过程中,不允许对正在迁移中的目标数据库进行修改操作。
  • 支持的迁移对象范围 在使用DRS进行迁移时,不同类型的迁移任务,支持的迁移对象范围不同,详细情况可参考表2。DRS会根据用户选择,在“预检查”阶段对迁移对象进行自动检查。 表2 支持的迁移对象 类型名称 使用须知 迁移对象范围 迁移对象选择维度:支持选择库级。 支持的迁移对象: 支持String,Hash,List,Set,Sorted Set类型迁移。 支持Lua脚本迁移(单全量任务不支持)。 不支持事务的迁移。 不支持Stream,BitMap,HyperLogLog,GEO类型迁移。 不支持自定义类型。 不支持迁移目标库GeminiDB Redis不支持的命令。
  • 使用须知 DRS全量+增量迁移过程一般包含四个阶段:任务启动阶段、全量阶段、增量阶段、结束任务阶段(单全量任务则包含三个阶段)。为了确保迁移各个阶段的平顺,在创建迁移任务前,请务必阅读以下使用须知。 表3 使用须知 类型名称 使用和操作限制 任务启动前须知 源数据库对象要求: 创建全量+增量任务,需要支持PSYNC命令。 目标数据库对象要求: 目标库必须是本云GeminiDB Redis实例。 迁移前目标库GeminiDB Redis实例建议为空。 目标数据库实例版本要高于或等于源数据库版本。 其他使用须知: 全量+增量任务使用解析RDB的方式读取数据。 迁移Lua脚本时,源库需要同时有其它数据,否则无法解析出RDB中的Lua脚本,导致Lua脚本迁移失败。 DRS不会对目标库进行FLUSH等高危操作,所以对于List列表类型数据,可能出现重复的数据。 源库测试连接时,必须填写Redis集群所有分片的IP地址。同时为了避免影响源端Redis实例的业务访问,强烈建议从源实例的副本节点(从节点)进行数据迁移,即推荐填写Redis集群的Slave节点IP地址。 为保障增量迁移有效进行,建议迁移前,评估源库Redis参数,将源库的配置文件redis.conf中repl-backlog-size参数的值适当调大。 迁移过程中,如果源库Redis集群发生扩缩容(例如增加或者减少分片)、规格变配(例如扩大内存),则需要重新配置迁移任务。且为保证数据一致性,在重新配置任务前,建议先清空已迁移至目标GeminiDB Redis的数据。 如果源库中的某些Key设置了过期(expire)策略,由于可能存在Key已过期但未被及时删除的情况,所以在目标库中查看Key数量(例如通过info命令查看)时会比源库的Key数量少。为保障数据的一致性,建议设置延长Key的过期时间。 全量迁移阶段须知 迁移过程中,不允许修改连接源和目标数据库的密码,或修改源和目标数据库的端口号。 迁移过程中,如果源库Redis集群发生主备倒换,任务会失败,需要清空目标库重置任务。 迁移过程中,不允许对正在迁移中的目标数据库进行修改操作。 增量迁移阶段须知 迁移过程中,不允许修改连接源和目标数据库的密码,或修改源和目标数据库的端口号。 迁移过程中,如果源库Redis集群发生主备倒换,任务会失败,需要清空目标库重置任务。 迁移过程中,不允许对正在迁移中的目标数据库进行修改操作。