华为云用户手册

  • 使用建议 DRS任务启动和全量数据同步阶段,请不要在源数据库执行DDL操作,否则可能导致任务异常。 为保证同步前后数据一致性,确保同步期间目标数据库无业务写入。 数据库同步与环境多样性和人为操作均有密切关系,为了确保同步的平顺,建议您在进行正式的数据库同步之前进行一次演练,可以帮助您提前发现问题并解决问题。 基于以下原因,建议您在启动任务时选择“稍后启动”功能,将启动时间设置在业务低峰期,相对静止的数据可以有效提升一次性同步成功率,避免同步对业务造成性能影响。如果同步不可避免业务高峰期,推荐使用同步限速功能,即“流速模式”选择“限速”。 在网络无瓶颈的情况下,全量同步会对源数据库增加约50MB/s的查询压力,以及占用2~4个CPU。 同步无主键表时,为了确保数据一致性,会存在3s以内的单表级锁定。 正在同步的数据被其他事务长时间锁死,可能导致读数据超时。 由于MySQL固有特点限制,CPU资源紧张时,存储引擎为Tokudb的表,读取速度可能下降至10%。 DRS并发读取数据库,会占用大约6-10个session连接数,需要考虑该连接数对业务的影响。 全量阶段读取表数据时,特别是大表的读取,可能会阻塞业务上对大表的独占锁操作。 更多DRS对数据库的影响,可参考DRS对源数据库和目标数据库有什么影响。 数据对比 建议您结合数据对比的“稍后启动”功能,选择业务低峰期进行数据对比,以便得到更为具有参考性的对比结果。由于同步具有轻微的时差,在数据持续操作过程中进行对比任务,可能会出现少量数据不一致对比结果,从而失去参考意义。 如果涉及多对一场景的同步任务,可参考多对一的场景约束及操作建议。 如果涉及表级汇集的多对一同步任务,则不支持DDL,否则会导致同步全部失败。
  • 支持的源和目标数据库 表1 支持的数据库 源数据库 目标数据库 本地自建Mongo数据库(3.2、3.4、3.6、4.0、4.2、4.4、5.0版本) E CS 自建Mongo数据库(3.2、3.4、3.6、4.0、4.2、4.4、5.0版本) 其他云上Mongo数据库(3.2、3.4、3.6、4.0、4.2、4.4、5.0版本) DDS实例(3.2、3.4、4.0、4.2、4.4、5.0版本) 说明: 源数据库不支持GeminiDB Mongo实例。 DDS 5.0版本当前仅支持副本集,不支持集群。 如果源库选择DDS实例,则此链路的数据库引擎是“DDS”,否则,此链路的数据库引擎是“MongoDB(数据库种类)-DDS”。 DDS实例(3.4、4.0、4.2、4.4、5.0版本) 说明: 仅支持目标库版本等于或高于源库版本。 DDS 5.0版本当前仅支持副本集,不支持集群。
  • 支持的同步对象范围 在使用DRS进行同步时,不同类型的同步任务,支持的同步对象范围不同,详细情况可参考表3。DRS会根据用户选择,在“预检查”阶段对同步对象进行自动检查。 表3 支持的同步对象 类型名称 使用须知 同步对象范围 副本集:目前只支持集合(包括验证器,是否是固定集合),索引和视图的同步。 不支持同步系统库(如local、admin、config等)和系统集合,如果业务数据在系统库下,则需要先将业务数据移动到用户数据库下,可以使用renameCollection命令进行移出。 不支持视图的创建语句中有正则表达式。 不支持_id字段没有索引的集合。 不支持BinData()的第一个参数为2。 源库为4.4或更高版本副本集时,如果目标库低于5.0版本,不支持复合哈希索引,如果目标库为5.0版本则支持复合哈希索引。 全量和增量阶段都不支持时序集合。 请勿在源库集合的String类型字段中存储非UTF-8类型字符串,否则会导致同步前后数据不一致。
  • 数据库账号权限要求 在使用DRS进行同步时,连接源库和目标库的数据库账号需要满足以下权限要求,才能启动实时同步任务。不同类型的同步任务,需要的账号权限也不同,详细可参考表2进行赋权。DRS会在“预检查”阶段对数据库账号权限进行自动检查,并给出处理建议。 表2 数据库账号权限 类型名称 全量+增量同步 源数据库连接账号 副本集:连接源数据库的用户需要有admin库的readAnyDatabase权限,有local库的read权限。 单节点:连接源数据库的用户需要有admin库的readAnyDatabase权限,有local库的read权限。 目标数据库连接账号 连接目标数据库的用户需要有admin库的dbAdminAnyDatabase权限,有目标数据库的readWrite权限。 建议创建单独用于DRS任务连接的数据库账号,避免因为数据库账号密码修改,导致的任务连接失败。 连接源和目标数据库的账号密码修改后,请参考修改连接信息章节修改DRS任务的连接信息,避免任务连接失败后自动重试,导致数据库账号被锁定影响使用。
  • 注意事项 为保证任务的正常运行,DRS提供了自动化的检查方法,在您启动DRS任务前,会针对源数据库和目标数据库的相关配置、条件进行检查。主要的检查项和对应的处理建议请参考预检查项。除了预检查项目之外,您还需要注意的事情参见表4。 表4 注意事项 类型名称 使用和操作限制 源数据库限制 增量同步时,源数据库的Oplog日志必须打开。 在磁盘空间允许的情况下,建议源数据库Oplog保存时间越长越好,建议为3天。 使用限制 通用: 为了保持数据一致性,在整个同步过程中,不允许对正在同步中的目标数据库进行修改操作(包括但不限于DDL、DML操作)。 同步过程中,不允许修改、删除连接源和目标数据库的用户的用户名、密码、权限,或修改源和目标数据库的端口号。 在任务启动、任务全量同步阶段,不建议对源数据库做删除类型的DDL操作,例如删除数据库、集合、索引、文档、视图等,这样可能会引起任务同步失败。 在整个同步过程中,不支持源数据库主备切换导致数据回滚的情况。 不支持全量同步和增量同步阶段insert、update源库大于16MB的文档。 增量同步阶段: 源数据库为副本集实例时,增量同步阶段支持如下操作: 支持文档(document)新增、删除、更新。 支持集合(collection)新建、删除。 支持索引(index)新建、删除。 支持视图(view)新建,删除。 支持convertToCapped、collMod、renameCollection命令。 任务增量阶段,为保证同步的性能,会集合级的进行并发回放。特殊的情况只支持单线程写入,不支持并发回放: 集合的索引中有unique key时。 集合属性的capped为true时。 这种情况可能会导致任务时延增高。 常见故障排查: 在任务创建、启动、全量同步、增量同步、结束等过程中,如有遇到问题,可先参考“故障排查”章节进行排查。 其他限制 副本集:MongoDB数据库的副本集实例状态必须正常,要存在主节点。 压缩参数block_compressor的取值,根据源库对应集合的stats().wiredTiger.creationString.block_compressor来决定,如果目标库已经存在对应的空集合,则不同步压缩参数;特殊的,对于不支持的压缩参数,按照目标库实例的net.compression.compressors参数决定。当目标库为DDS 4.2版本时,由于目标库不支持压缩参数的设置,DRS不同步压缩参数。 如果源数据库的MongoDB服务不是单独部署的,而是和其他的服务部署在同一台机器,则必须要给源数据库的wiredTiger引擎加上cacheSizeGB的参数配置,建议值设为最小空闲内存的一半。 选择集合同步时,增量同步过程中不建议对集合进行重命名操作。 建议填写副本集所有的主节点和备节点信息,以防主备切换影响同步任务。如果填写的是主备多个节点的信息,注意所有的节点信息必须属于同一个副本集实例。 为了提高同步的速度,在开始同步之前,建议在源数据库删掉不需要的索引,只保留必须的索引。在同步过程中不建议对源库创建索引,如果必须要创建索引,请使用后台的方式创建索引。 为了防止回环,不支持在相同的源和目标库同时启动入云和出云任务。 说明: 同步任务支持源和目标为同一个数据库,为了避免回环,必须使用对象名映射功能进行重命名。
  • 支持的同步对象范围 在使用DRS进行同步时,不同类型的同步任务,支持的同步对象范围不同,详细情况可参考表2。DRS会根据用户选择,在“预检查”阶段对同步对象进行自动检查。 表2 支持的同步对象 类型名称 使用须知 同步对象范围 支持的字段类型: TINYINT、SMALLINT、INT、BIGINT、DECIMAL、NUMERIC、FLOAT、REAL、SMALLMONEY、MONEY、BIT、DATE、SMALLDATETIME、DATETIME、DATETIME2、DATETIMEOFFSET、TIME、TIMESTAMP、XML、CHAR、VARCHAR、NCHAR、NVARCHAR、BINARY、VARBINARY、IMAGE、NTEXT、TEXT、UNIQUEIDENTIFIER。 不支持的字段类型:HIERARCHYID、TABLE、SQL_VARIANT、GEOMETRY、GEOGRAPHY。 全量同步的范围: 支持选中表的表结构、数据和索引。 同步对象的库名、表名只能包含如下字符:字母、数字、下划线和中划线,库名长度不能超过58个字符。 同步对象选择的表个数不能超过1000。对于超过1000个表的情况,建议分批次同步(待上一个同步任务结束后,再重新创建任务)。 不支持同步源数据库中开启TDE(Transparent Data Encryption)加密的数据库。若不需要同步TDE加密的库,请在对象选择中去掉;若需要同步TDE加密的库,请先将TDE关闭。 不支持列加密。 全量阶段同步表结构时,源数据库自增列同步到目标端为普通列,不同步自增属性。 对于TIMESTAMP WITH TIME ZONE类型,根据目标库时区做转换后不得大于“9999-12-31 23:59:59.999999”。 默认值包含目标数据库不支持的值或者函数时,会导致对应表结构迁移失败。 单全量支持同步源端计算列到目标端普通列。 增量同步的范围: 支持DML(Data Manipulation Language):包括INSERT、UPDATE、DELETE。 不支持DDL(Data Definition Language)。 增量不支持同步源端计算列。
  • 支持的源和目标数据库 表1 支持的数据库 源数据库 目标数据库 本地自建Microsoft SQL Server(企业版2012、2014、2016、2017、2019、2022版本,标准版2016 SP2及以上版本、2017、2019、2022版本) ECS自建Microsoft SQL Server数据库(企业版2012、2014、2016、2017、2019、2022版本,标准版2016 SP2及以上版本、2017、2019、2022版本) 其他云上完全兼容Microsoft SQL Server的数据库(企业版2012、2014、2016、2017、2019、2022版本,标准版2016 SP2及以上版本、2017、2019、2022版本) RDS for SQL Server(企业版2012、2014、2016、2017、2019、2022版本,标准版2016 SP2及以上版本、2017、2019、2022版本) RDS for PostgreSQL(9.5、9.6、10、11、12、13、14、15版本) 目前仅支持白名单用户使用。
  • 数据库账号权限要求 在使用DRS进行同步时,连接源库和目标库的数据库账号需要满足以下权限要求,才能启动实时同步任务。不同类型的同步任务,需要的账号权限也不同,详细可参考表3进行赋权。DRS会在“预检查”阶段对数据库账号权限进行自动检查,并给出处理建议。 表3 数据库账号权限 类型名称 全量同步 增量、全量+增量同步 源数据库连接账号 需要具备sysadmin权限,或者待同步数据库的db_datareader或db_owner权限。 最少需要具备sysadmin权限,或者view server state权限以及待同步数据库的db_datareader或db_owner权限。 目标数据库连接账号 目标数据库账号必须具有每张表的如下权限:INSERT、SELECT、UPDATE、DELETE、CONNECT、CREATE、REFEREN CES 。 RDS for PostgreSQ L实例 的账号默认已具有以上权限。
  • 对数据库影响 对象对比:会查询源库及目标库的系统表,占用10个左右的session的连接数,正常情况不会对数据库产生影响。但是如果对象数量巨大(比如几十万张表),可能会对数据库产生一定的查询压力。 行数对比:会查询源库及目标库的表行数,占用10个左右的session的连接数,正常的select count语句基本不会对数据库产生影响。但是如果表数据量巨大(亿级)会对数据库产生一定的查询压力,返回查询结果会比较慢。 内容对比:会查询源库及目标库的全部数据,涉及每个字段都会对比,所以会对数据库产生一定的查询压力,主要体现在IO上,查询速度受限于源库和目标库的IO和网络带宽。占用1-2个CPU,占用10个左右的session的连接数。 用户对比:会查询源库及目标库的账户和权限,基本不会对数据库产生影响。
  • 添加标签 在“实时同步管理”页面,选择指定的同步任务,单击任务名称进入“基本信息”页签。 在左侧导航栏,单击“标签”。 在“标签”页签单击“编辑标签”,在“编辑标签”弹出框中,单击“添加新标签”,输入标签的键和值,,然后单击“确定”。 输入标签的键和值时,系统会自动联想当前用户的所有实例(除当前实例外)的所有关联的预定义标签。 标签的键不能为空且必须唯一,长度为1~128个字符,可以包含任意语种的字母、数字和空格,以及_.:=+-@字符,但首尾不能包含空格,且不能以_sys_开头。 标签的值可以为空字符串,长度为0~255个字符,可以包含任意语种的字母、数字和空格,以及_.:=+-@字符,但首尾不能包含空格。 添加成功后,您可在当前任务的所有关联的标签集合中,查询并管理自己的标签。
  • 操作场景 标签管理服务(Tag Management Service,TMS)用于用户在云平台,通过统一的tag标签管理各种资源。TMS服务与各服务共同实现标签管理能力,TMS提供全局标签管理能力,各服务维护自身标签管理 。当用户资源较多时,可通过不同的标签标识和查找任务。 建议您先在TMS系统中设置预定义标签。 标签由“键”和“值”组成,每个标签中的一个“键”只能对应一个“值”。 每个实例最多支持20个标签配额。
  • 使用建议 DRS任务启动和全量数据同步阶段,请不要在源数据库执行DDL操作,否则可能导致任务异常。 为保证同步前后数据一致性,确保同步期间目标数据库无业务写入。 数据库同步与环境多样性和人为操作均有密切关系,为了确保同步的平顺,建议您在进行正式的数据库同步之前进行一次演练,可以帮助您提前发现问题并解决问题。 建议您在启动任务时选择“稍后启动”功能,将启动时间设置在业务低峰期,避免同步对业务造成性能影响。如果同步不可避免业务高峰期,推荐使用同步限速功能,即“流速模式”选择“限速”。 在网络无瓶颈的情况下,全量同步会对源数据库增加约50MB/s的查询压力,以及占用2~4个CPU。 同步无主键表时,会存在3s以内的单表级锁定。 DRS并发读取数据库,会占用大约6-10个session连接数,需要考虑该连接数对业务的影响。 全量阶段读取表数据时,特别是大表的读取,可能会阻塞业务上对大表的独占锁操作。 更多DRS对数据库的影响,可参考DRS对源数据库和目标数据库有什么影响。
  • JSON-C格式 JSON-C格式与JSON格式类似,区别是对于删除操作,JSON数据放在old上,JSON-C放在data上。对于timestamp类型数据转换成yyyy-mm-dd hh:mm:ss的字符串。 JSON-C定义详情参考表5: 表5 JSON-C参数说明 参数名称 说明 mysqlType 源端表字段名称和类型。 id DRS内部定义的事件操作的序列号,单调递增。 es 源库产生这一条记录的时间,13位Unix时间戳,单位为毫秒。 ts 写入到目标kafka的时间,13位Unix时间戳,单位为毫秒。 database 数据库名称(Oracle数据库填写schema)。 table 表名。 type 操作类型,比如DELETE,UPDATE,INSERT,DDL。 isDdl 是否是DDL操作。 sql DDL的SQL语句,在DML操作中,取值为""。 sqlType 源端表字段的jdbc类型。 data 最新的数据,为JSON数组,如果type参数是插入则表示最新插入的数据,如果是更新,则表示更新后的最新数据;如果是删除,则表示被删除的数据。 old 旧数据,如果type参数是更新,则表示更新前的数据;如果是插入,取值为null。 pkNames 主键名称。
  • JSON格式 MySQL、 GaussDB (MySQL)到Kafka的JSON格式定义详情参考表2,DDS到Kafka的JSON格式定义详情参考表3,Oracle、PostgreSQL、GaussDB、Microsoft SQL Server到Kafka的JSON格式定义详情参考表4。 表2 MySQL到Kafka的参数说明 参数名称 说明 mysqlType 源端表字段名称和类型。 id DRS内部定义的事件操作的序列号,单调递增。 es 源库产生这一条记录的时间,13位Unix时间戳,单位为毫秒。 ts 写入到目标kafka的时间,13位Unix时间戳,单位为毫秒。 database 数据库名称。 table 表名。 type 操作类型,比如DELETE,UPDATE,INSERT,DDL,全量同步为INIT和INIT_DDL。 isDdl 是否是DDL操作。 sql DDL的SQL语句,在DML操作中,取值为""。 sqlType 源端表字段的jdbc类型。 data 最新的数据,为JSON数组,如果type参数是插入则表示最新插入的数据,如果是更新,则表示更新后的最新数据。 old 旧数据,如果type参数是更新,则表示更新前的数据;如果是删除,则表示被删除的数据;如果是插入,取值为null。 pkNames 主键名称。 { "mysqlType":{ "c11":"binary", "c10":"varchar", "c13":"text", "c12":"varbinary", "c14":"blob", "c1":"varchar", "c2":"varbinary", "c3":"int", "c4":"datetime", "c5":"timestamp", "c6":"char", "c7":"float", "c8":"double", "c9":"decimal", "id":"int" }, "id":27677, "es":1624614713000, "ts":1625058726990, "database":"test01", "table":"test ", "type":"UPDATE", "isDdl":false, "sql":"", "sqlType":{ "c11":-2, "c10":12, "c13":-1, "c12":-3, "c14":2004, "c1":12, "c2":-3, "c3":4, "c4":94, "c5":93, "c6":1, "c7":6, "c8":8, "c9":3, "id":4 }, "data":[ { "c11":"[]", "c10":"华为云huaweicloud", "c13":"asfiajhfiaf939-0239uoituqorjoqirfoidjfqrniowejoiwqjroqwjrowqjojoiqgoiegnkjgoi23roiugouofdug9u90weurtg103", "c12":"[106, 103, 111, 106, 103, 111, 105, 100, 115, 106, 103, 111, 106, 111, 115, 111, 103, 57, 51, 52, 48, 57, 52, 51, 48, 57, 116, 106, 104, 114, 103, 106, 101, 119, 57, 116, 117, 48, 57, 51, 52, 48, 116, 101, 114, 111, 101, 106, 103, 57, 56, 51, 48, 52, 105, 101, 117, 114, 103, 57, 101, 119, 117, 114, 103, 48, 119, 101, 117, 116, 57, 114, 48, 52, 117, 48, 57, 53, 116, 117, 51, 48, 57, 50, 117, 116, 48, 57, 51, 117, 116, 48, 119, 57, 101]", "c14":"[106, 103, 111, 106, 103, 111, 105, 100, 115, 106, 103, 111, 106, 111, 115, 111, 103, 57, 51, 52, 48, 57, 52, 51, 48, 57, 116, 106, 104, 114, 103, 106, 101, 119, 57, 116, 117, 48, 57, 51, 52, 48, 116, 101, 114, 111, 101, 106, 103, 57, 56, 51, 48, 52, 105, 55, 57, 56, 52, 54, 53, 52, 54, 54, 54, 49, 52, 54, 53, 33, 64, 35, 36, 37, 94, 42, 40, 41, 95, 41, 43, 95, 43, 124, 125, 34, 63, 62, 58, 58, 101, 117, 114, 103, 57, 101, 119, 117, 114, 103, 48, 119, 101, 117, 116, 57, 114, 48, 52, 117, 48, 57, 53, 116, 117, 51, 48, 57, 50, 117, 116, 48, 57, 51, 117, 116, 48, 119, 57, 101]", "c1":"cf3f70a7-7565-44b0-ae3c-83bec549ea8e:104", "c2":"[]", "c3":"103", "c4":"2021-06-25 17:51:53", "c5":"1624614713.201", "c6":"!@#$%90weurtg103", "c7":"10357.0", "c8":"1.2510357E7", "c9":"9874510357", "id":"104" } ], "old":[ { "c11":"[]", "c10":"华为云huaweicloud", "c13":"asfiajhfiaf939-0239", "c12":"[106, 103, 111, 106, 103, 111, 105, 100, 115, 106, 103, 111, 106, 111, 115, 111, 103, 57, 51, 52, 48, 57, 52, 51, 48, 57, 116, 106, 104, 114, 103, 106, 101, 119, 57, 116, 117, 48, 57, 51, 52, 48, 116, 101, 114, 111, 101, 106, 103, 57, 56, 51, 48, 52, 105, 101, 117, 114, 103, 57, 101, 119, 117, 114, 103, 48, 119, 101, 117, 116, 57, 114, 48, 52, 117, 48, 57, 53, 116, 117, 51, 48, 57, 50, 117, 116, 48, 57, 51, 117, 116, 48, 119, 57, 101]", "c14":"[106, 103, 111, 106, 103, 111, 105, 100, 115, 106, 103, 111, 106, 111, 115, 111, 103, 57, 51, 52, 48, 57, 52, 51, 48, 57, 116, 106, 104, 114, 103, 106, 101, 119, 57, 116, 117, 48, 57, 51, 52, 48, 116, 101, 114, 111, 101, 106, 103, 57, 56, 51, 48, 52, 105, 55, 57, 56, 52, 54, 53, 52, 54, 54, 54, 49, 52, 54, 53, 33, 64, 35, 36, 37, 94, 42, 40, 41, 95, 41, 43, 95, 43, 124, 125, 34, 63, 62, 58, 58, 101, 117, 114, 103, 57, 101, 119, 117, 114, 103, 48, 119, 101, 117, 116, 57, 114, 48, 52, 117, 48, 57, 53, 116, 117, 51, 48, 57, 50, 117, 116, 48, 57, 51, 117, 116, 48, 119, 57, 101]", "c1":"cf3f70a7-7565-44b0-ae3c-83bec549ea8e:104", "c2":"[]", "c3":"103", "c4":"2021-06-25 17:51:53", "c5":"1624614713.201", "c6":"!@#$%90weurtg103", "c7":"10357.0", "c8":"1.2510357E7", "c9":"9874510357", "id":"103" } ], "pkNames":[ "id" ] } 表3 DDS到Kafka的参数说明 参数名称 说明 id DRS内部定义的事件操作的序列号,单调递增。 op 操作类型,比如DELETE,UPDATE,INSERT,DDL。 dbType 源库类型:Mongo。 db 数据库名称。 coll 集合名称。 value 这一条记录的变更值。 where 这一条记录的变更条件。 recordType 具体的记录类型,比如insert、update、replace、doc。其中,update和replace表示op中的UPDATE具体操作。doc表示op中的DELETE删除的是文档数据而非视图数据。 extra 拓展字段,一般和recordType保持一致,作为扩展oplog记录使用。 es 这一条记录的commit时间,13位Unix时间戳,单位为毫秒。 ts 写入到目标kafka的时间,13位Unix时间戳,单位为毫秒。 clusterTime 与事件关联的oplog条目的时间戳,格式为timestamp:incre(timestamp是10位unix时间戳,单位为秒;incre代表当前命令在同一秒内执行的次序)。 // insert操作 { "id": 256, "op": "INSERT", "dbType": "MongoDB", "db": "ljx", "coll": "ljx", "value": "{\"_id\": ObjectId(\"64650cf67dc36a464e76e583\"), \"c1\": \"baz\", \"tags\": [\"mongodb\", \"database\", \"NoSQL\"]}", "where": null, "recordType": "insert", "extra": "insert", "es": 1684315111439, "ts": 1684315111576, "clusterTime": "1684344064:1" } // replace操作 { "id": 340, "op": "UPDATE", "dbType": "MongoDB", "db": "ljx", "coll": "ljx", "value": "{\"_id\": ObjectId(\"64650cf67dc36a464e76e583\"), \"c1\": \"sss\"}", "where": "{\"_id\": ObjectId(\"64650cf67dc36a464e76e583\")}", "recordType": "replace", "extra": "replace", "es": 1684315951831, "ts": 1684315951961, "clusterTime": "1684344904:9" } // update 更新值操作 { "id": 386, "op": "UPDATE", "dbType": "MongoDB", "db": "ljx", "coll": "ljx", "value": "{\"$set\": {\"c1\": \"aaa\"}}", "where": "{\"_id\": ObjectId(\"64650cf67dc36a464e76e583\")}", "recordType": "update", "extra": "update", "es": 1684316412008, "ts": 1684316412146, "clusterTime": "1684345365:1" } // update 更新键操作 { "id": 414, "op": "UPDATE", "dbType": "MongoDB", "db": "ljx", "coll": "ljx", "value": "{\"$unset\": {\"c1\": true}, \"$set\": {\"column1\": \"aaa\"}}", "where": "{\"_id\": ObjectId(\"64650cf67dc36a464e76e583\")}", "recordType": "update", "extra": "update", "es": 1684316692054, "ts": 1684316692184, "clusterTime": "1684345648:1" } // remove 操作 { "id": 471, "op": "DELETE", "dbType": "MongoDB", "db": "ljx", "coll": "ljx", "value": "{\"_id\": ObjectId(\"64650cf67dc36a464e76e583\")}", "where": null, "recordType": "doc", "extra": "doc", "es": 1684317252747, "ts": 1684317252869, "clusterTime": "1684346209:1" } 表4 其他数据库到Kafka的参数说明 参数名称 说明 columnType 源端表字段名称和数据类型。 说明: 数据类型不带长度、精度等。 dbType为Oracle、Microsoft SQL Server时暂为空。 dbType 源库类型。 schema schema名称。 opType 操作类型,比如DELETE,UPDATE,INSERT,DDL。 id DRS内部定义的事件操作的序列号,单调递增。 es 源库不同引擎对应类型如下: GaussDB主备版:当前事务的commit时间,13位Unix时间戳,单位为毫秒。 GaussDB分布式:当前事务的commit时间,13位Unix时间戳,单位为毫秒。 PostgreSQL:这一条记录上一个事务的commit时间,13位Unix时间戳,单位为毫秒。 Oracle:这一条记录的commit时间,13位Unix时间戳,单位为毫秒。 Microsoft SQL Server:这一条记录的commit时间,13位Unix时间戳,单位为毫秒。 ts 写入到目标kafka的时间,13位Unix时间戳,单位为毫秒。 database 数据库名称,dbType为Oracle时暂时为空。 table 表名。 type 操作类型,比如DELETE,UPDATE,INSERT,DDL。 isDdl 是否是DDL操作。 sql DDL的SQL语句,在DML操作中,取值为""。 sqlType 源端表字段的jdbc类型。 data 最新的数据,为JSON数组,如果type参数是插入则表示最新插入的数据,如果是更新,则表示更新后的最新数据。 old 旧数据,如果type参数是更新,则表示更新前的数据;如果是删除,则表示被删除的数据;如果是插入,取值为null。 pkNames 主键名称。 { "columnType": { "timestamp_column": "timestamp without time zone", "tstzrange_column": "tstzrange", "int4range_column": "int4range", "char_column": "character", "jsonb_column": "json", "boolean_column": "boolean", "bit_column": "bit", "smallint_column": "smallint", "bytea_column": "bytea" }, "dbType": "GaussDB Primary/Standby", "schema": "schema01", "opType": "UPDATE", "id": 332, "es": 1639626187000, "ts": 1639629261915, "database": "database01", "table": "table01", "type": "UPDATE", "isDdl": false, "sql": "", "sqlType": { "timestamp_column": 16, "tstzrange_column": 46, "int4range_column": 42, "char_column": 9, "jsonb_column": 22, "boolean_column": 8, "bit_column": 20, "smallint_column": 2, "bytea_column": 15 }, "data": [ { "timestamp_column": "2021-12-16 12:31:49.344365", "tstzrange_column": "(\"2010-01-01 14:30:00+08\",\"2010-01-01 15:30:00+08\")", "int4range_column": "[11,20)", "char_column": "g", "jsonb_column": "{\"key1\": \"value1\", \"key2\": \"value2\"}", "boolean_column": "false", "bit_column": "1", "smallint_column": "12", "bytea_column": "62797465615f64617461" } ], "old": [ { "timestamp_column": "2014-07-02 06:14:00.742", "tstzrange_column": "(\"2010-01-01 14:30:00+08\",\"2010-01-01 15:30:00+08\")", "int4range_column": "[11,20)", "char_column": "g", "jsonb_column": "{\"key1\": \"value1\", \"key2\": \"value2\"}", "boolean_column": "true", "bit_column": "1", "smallint_column": "12", "bytea_column": "62797465615f64617461" } ], "pkNames": null }
  • 源为其他云同步方案概览 DRS支持将其他云数据库(例如AWS的RDS for MySQL、Aurora for MySQL)中的数据同步至华为云数据库(例如云数据库RDS for MySQL)中。 表2 同步方案 源数据库云厂商 源数据库类型 目标数据库(华为云) 方案 AWS RDS for MySQL RDS for MySQL 将MySQL同步到MySQL AWS RDS for MySQL GaussDB(for MySQL) 将MySQL同步到GaussDB(for MySQL) AWS Aurora for MySQL RDS for MySQL 将MySQL同步到MySQL AWS Aurora for MySQL GaussDB(for MySQL) 将MySQL同步到GaussDB(for MySQL) AWS RDS for MariaDB RDS for MariaDB 将MariaDB同步到MariaDB AWS RDS for PostgreSQL RDS for PostgreSQL 将PostgreSQL同步到PostgreSQL AWS Aurora for PostgreSQL(非Serverless) RDS for PostgreSQL 将PostgreSQL同步到PostgreSQL AWS RDS for Oracle GaussDB主备版 将Oracle同步到GaussDB主备版 AWS RDS for Oracle GaussDB分布式版 将Oracle同步到GaussDB分布式版 AWS RDS for Microsoft SQL Server RDS for SQL Server 将Microsoft SQL Server同步到Microsoft SQL Server AWS RDS for Microsoft SQL Server GaussDB主备版 5.3.31 将Microsoft SQL Server同步到GaussDB主备版 AWS RDS for Microsoft SQL Server GaussDB分布式版 5.3.32 将Microsoft SQL Server同步到GaussDB分布式版 Azure Database for MySQL RDS for MySQL 将MySQL同步到MySQL Azure Database for MySQL GaussDB(for MySQL) 将MySQL同步到GaussDB(for MySQL) Azure Database for MariaDB RDS for MariaDB 将MariaDB同步到MariaDB Azure Database for PostgreSQL RDS for PostgreSQL 将PostgreSQL同步到PostgreSQL Azure SQL Server on Azure VMs RDS for SQL Server 将Microsoft SQL Server同步到Microsoft SQL Server Azure Azure SQL Database(DB) RDS for SQL Server 将Microsoft SQL Server同步到Microsoft SQL Server Azure Azure SQL Managed Insatnce(MI) RDS for SQL Server 将Microsoft SQL Server同步到Microsoft SQL Server Azure SQL Server on Azure VMs GaussDB主备版 5.3.31 将Microsoft SQL Server同步到GaussDB主备版 Azure Azure SQL Database(DB) GaussDB主备版 5.3.31 将Microsoft SQL Server同步到GaussDB主备版 Azure Azure SQL Managed Insatnce(MI) GaussDB主备版 5.3.31 将Microsoft SQL Server同步到GaussDB主备版 Azure SQL Server on Azure VMs GaussDB分布式版 5.3.32 将Microsoft SQL Server同步到GaussDB分布式版 Azure Azure SQL Database(DB) GaussDB分布式版 5.3.32 将Microsoft SQL Server同步到GaussDB分布式版 Azure Azure SQL Managed Insatnce(MI) GaussDB分布式版 5.3.32 将Microsoft SQL Server同步到GaussDB分布式版 Google Cloud SQL for MySQL RDS for MySQL 将MySQL同步到MySQL Google Cloud SQL for MySQL GaussDB(for MySQL) 将MySQL同步到GaussDB(for MySQL) Google Cloud SQL for PostgreSQL RDS for PostgreSQL 将PostgreSQL同步到PostgreSQL 阿里云 RDS MySQL RDS for MySQL 将MySQL同步到MySQL 阿里云 RDS MySQL GaussDB(for MySQL) 将MySQL同步到GaussDB(for MySQL) 阿里云 PolarDB MySQL RDS for MySQL 将MySQL同步到MySQL 阿里云 PolarDB MySQL GaussDB(for MySQL) 将MySQL同步到GaussDB(for MySQL) 阿里云 RDS MariaDB RDS for MariaDB 将MariaDB同步到MariaDB 阿里云 RDS PostgreSQL RDS for PostgreSQL 将PostgreSQL同步到PostgreSQL 阿里云 PolarDB PostgreSQL标准版和企业版 RDS for PostgreSQL 将PostgreSQL同步到PostgreSQL 腾讯云 TencentDB for MySQL RDS for MySQL 将MySQL同步到MySQL 腾讯云 TencentDB for MySQL GaussDB(for MySQL) 将MySQL同步到GaussDB(for MySQL) 腾讯云 TDSQL-C MySQL RDS for MySQL 将MySQL同步到MySQL 腾讯云 TDSQL-C MySQL GaussDB(for MySQL) 将MySQL同步到GaussDB(for MySQL) 腾讯云 TencentDB for PostgreSQL RDS for PostgreSQL 将PostgreSQL同步到PostgreSQL
  • 支持的数据库类型 目前,DRS实时同步支持的源数据库和目标数据库类型,如下表所示。 表1 同步方案 源数据库类型 目标数据库类型 同步模式 相关文档 本地自建MySQL数据库 ECS自建MySQL数据库 其他云上MySQL数据库 RDS for MySQL RDS for MySQL 增量数据同步 全量数据同步 全量+增量数据同步 将MySQL同步到MySQL(入云) GaussDB(for MySQL) 增量数据同步 全量+增量数据同步 将MySQL同步到GaussDB(for MySQL) RDS for PostgreSQL 全量数据同步 全量+增量数据同步 将MySQL同步到PostgreSQL GaussDB分布式版 增量数据同步 全量数据同步 全量+增量数据同步 将MySQL同步到GaussDB分布式版(入云) 将MySQL同步到GaussDB分布式版(自建) GaussDB主备版 增量数据同步 全量数据同步 全量+增量数据同步 将MySQL同步到GaussDB主备版(入云) 将MySQL同步到GaussDB主备版(自建) GaussDB(DWS) 说明: 本服务目前已不支持,请使用 数据治理中心 进行同步。 增量数据同步 全量数据同步 全量+增量数据同步 将MySQL同步到GaussDB(DWS) 数据治理 中心 RDS for MariaDB 增量数据同步 全量数据同步 全量+增量数据同步 将MySQL同步到MariaDB(入云) RDS for MySQL 本地自建MySQL数据库 ECS自建MySQL数据库 其他云上MySQL数据库 增量数据同步 全量+增量数据同步 将MySQL同步到MySQL(出云) Kafka 增量数据同步 全量+增量数据同步 将MySQL同步到Kafka(出云) CSS /ES 全量+增量数据同步 将MySQL同步到CSS/ES(出云) 本地自建Oracle数据库 ECS自建Oracle数据库 全量+增量数据同步 将MySQL同步到Oracle 本地自建MariaDB数据库 ECS自建MariaDB数据库 其他云上MariaDB数据库 增量数据同步 全量数据同步 全量+增量数据同步 将MySQL同步到MariaDB(出云) 本地自建MySQL数据库 ECS自建MySQL数据库 Kafka 增量数据同步 全量+增量数据同步 将MySQL同步到Kafka(自建-自建) CSS/ES 全量+增量数据同步 将MySQL同步到CSS/ES(自建-自建) 本地自建PostgreSQL数据库 ECS自建PostgreSQL数据库 其他云上PostgreSQL数据库 RDS for PostgreSQL RDS for PostgreSQL 增量数据同步 全量数据同步 全量+增量数据同步 将PostgreSQL同步到PostgreSQL GaussDB(DWS) 说明: 目前仅支持白名单用户使用。 全量+增量数据同步 将PostgreSQL同步到GaussDB(DWS) GaussDB主备版 增量数据同步 全量数据同步 全量+增量数据同步 说明: 目前单增量数据同步仅支持白名单用户使用。 将PostgreSQL同步到GaussDB主备版 GaussDB分布式版 增量数据同步 全量数据同步 全量+增量数据同步 说明: 目前单增量数据同步仅支持白名单用户使用。 将PostgreSQL同步到GaussDB分布式版 本地自建PostgreSQL数据库 ECS自建PostgreSQL数据库 Kafka 增量数据同步 将PostgreSQL同步到Kafka(自建-自建) RDS for PostgreSQL 本地自建PostgreSQL数据库 ECS自建PostgreSQL数据库 增量数据同步 全量数据同步 全量+增量数据同步 将PostgreSQL同步到PostgreSQL(出云) Kafka 增量数据同步 将PostgreSQL同步到Kafka(出云) DDM RDS for MySQL 增量数据同步 全量数据同步 全量+增量数据同步 将DDM同步到MySQL(入云) 本地自建MySQL数据库 ECS自建MySQL数据库 其他云上MySQL数据库 增量数据同步 全量数据同步 全量+增量数据同步 将DDM同步到MySQL(出云) DDM 全量+增量数据同步 将DDM同步到DDM GaussDB(DWS) 说明: 本服务目前已不支持,请使用数据治理中心进行同步。 全量+增量数据同步 将DDM同步到GaussDB(DWS) 数据治理中心 本地自建Oracle数据库 ECS自建Oracle数据库 增量数据同步 全量数据同步 全量+增量数据同步 将DDM同步到Oracle Kafka 增量数据同步 将DDM同步到Kafka 本地自建Oracle数据库 ECS自建Oracle数据库 RDS for MySQL 增量数据同步 全量数据同步 全量+增量数据同步 将Oracle同步到MySQL GaussDB(for MySQL) 全量数据同步 全量+增量数据同步 将Oracle同步到GaussDB(for MySQL) RDS for PostgreSQL 全量数据同步 全量+增量数据同步 将Oracle同步到PostgreSQL GaussDB主备版 增量数据同步 全量数据同步 全量+增量数据同步 将Oracle同步到GaussDB主备版(入云) 将Oracle同步到GaussDB主备版(自建-自建) GaussDB分布式版 增量数据同步 全量数据同步 全量+增量数据同步 将Oracle同步到GaussDB分布式版(入云) 将Oracle同步到GaussDB分布式版(自建-自建) DDM 全量数据同步 全量+增量数据同步 将Oracle同步到DDM GaussDB(DWS) 说明: 目前仅支持白名单用户使用。 增量数据同步 全量数据同步 全量+增量数据同步 将Oracle同步到GaussDB(DWS) Kafka 增量数据同步 将Oracle同步到Kafka GaussDB分布式版 本地自建MySQL数据库 ECS自建MySQL数据库 其他云上MySQL数据库 RDS for MySQL 全量数据同步 增量数据同步 全量+增量数据同步 将GaussDB分布式版同步到MySQL(出云) 将GaussDB分布式版同步到MySQL(自建-自建) 本地自建Oracle数据库 ECS自建Oracle数据库 全量数据同步 增量数据同步 全量+增量数据同步 将GaussDB分布式版同步到Oracle(出云) 将GaussDB分布式版同步到Oracle(自建-自建) GaussDB(DWS) 说明: 目前仅支持白名单用户使用。 全量数据同步 增量数据同步 全量+增量数据同步 将GaussDB分布式版同步到GaussDB(DWS) Kafka 增量数据同步 将GaussDB分布式版同步到Kafka(出云) 将GaussDB分布式版同步到Kafka(自建-自建) GaussDB分布式版 全量数据同步 增量数据同步 全量+增量数据同步 将GaussDB分布式版同步到GaussDB分布式版(出云) 将GaussDB分布式版同步到GaussDB分布式版(自建-自建) GaussDB主备版 全量数据同步 增量数据同步 全量+增量数据同步 将GaussDB分布式版同步到GaussDB主备版(出云) 将GaussDB分布式版同步到GaussDB主备版(自建-自建) GaussDB主备版 本地自建MySQL数据库 ECS自建MySQL数据库 其他云上MySQL数据库 RDS for MySQL 全量数据同步 增量数据同步 全量+增量数据同步 将GaussDB主备版同步到MySQL(出云) 将GaussDB主备版同步到MySQL(自建-自建) 本地自建Oracle数据库 ECS自建Oracle数据库 全量数据同步 增量数据同步 全量+增量数据同步 将GaussDB主备版同步到Oracle(出云) 将GaussDB主备版同步到Oracle(自建-自建) Kafka 增量数据同步 将GaussDB主备版同步到Kafka(出云) 将GaussDB主备版同步到Kafka(自建-自建) GaussDB(DWS) 说明: 目前仅支持白名单用户使用。 全量数据同步 增量数据同步 全量+增量数据同步 将GaussDB主备版同步到GaussDB(DWS) GaussDB分布式版 全量数据同步 增量数据同步 全量+增量数据同步 将GaussDB主备版同步到GaussDB分布式版(出云) 将GaussDB主备版同步到GaussDB分布式版(自建-自建) GaussDB主备版 全量数据同步 增量数据同步 全量+增量数据同步 将GaussDB主备版同步到GaussDB主备版(出云) 将GaussDB主备版同步到GaussDB主备版(自建-自建) GaussDB(for MySQL) GaussDB(for MySQL) 增量数据同步 全量+增量数据同步 将GaussDB(for MySQL)同步到GaussDB(for MySQL) 本地自建MySQL数据库 ECS自建MySQL数据库 其他云上MySQL数据库 RDS for MySQL 增量数据同步 全量+增量数据同步 将GaussDB(for MySQL)同步到MySQL GaussDB(DWS) 说明: 本服务目前已不支持,请使用数据治理中心进行同步。 全量+增量数据同步 数据治理中心 Kafka 增量数据同步 全量+增量数据同步 将GaussDB(for MySQL)同步到Kafka CSS/ES 全量+增量数据同步 将GaussDB(for MySQL)同步到CSS/ES 本地自建Oracle数据库 ECS自建Oracle数据库 全量+增量数据同步 将GaussDB(for MySQL)同步到Oracle DDS 自建MongoDB 其他云上MongoDB 增量数据同步支持以下方式: 副本集到副本集 集群到集群(源数据库集群版本不小于4.0) 将DDS同步到MongoDB Kafka 增量数据同步 将DDS同步到Kafka DB2 for LUW GaussDB分布式版 全量数据同步 全量+增量数据同步 将DB2 for LUW同步到GaussDB主备版(入云) 将DB2 for LUW同步到GaussDB主备版(自建) GaussDB主备版 全量数据同步 全量+增量数据同步 将DB2 for LUW同步到GaussDB分布式版(入云) 将DB2 for LUW同步到GaussDB分布式版 自建) TiDB GaussDB(for MySQL) 全量+增量数据同步 将TiDB同步到GaussDB(for MySQL) 本地自建Microsoft SQL Server数据库 ECS自建Microsoft SQL Server数据库 其他云上完全兼容Microsoft SQL Server的数据库 RDS for SQL Server GaussDB(DWS) 说明: 目前仅支持白名单用户使用。 全量+增量数据同步 将Microsoft SQL Server同步到GaussDB(DWS) GaussDB主备版 增量数据同步 全量数据同步 全量+增量数据同步 将Microsoft SQL Server同步到GaussDB主备版 GaussDB分布式版 增量数据同步 全量数据同步 全量+增量数据同步 将Microsoft SQL Server同步到GaussDB分布式版 Microsoft SQL Server 全量+增量数据同步 将Microsoft SQL Server同步到Microsoft SQL Server RDS for MySQL 说明: 目前仅支持白名单用户使用。 增量数据同步 全量数据同步 全量+增量数据同步 将Microsoft SQL Server同步到MySQL GaussDB(for MySQL) 说明: 目前仅支持白名单用户使用。 增量数据同步 全量数据同步 全量+增量数据同步 将Microsoft SQL Server同步到GaussDB(for MySQL) PostgreSQL 说明: 目前仅支持白名单用户使用。 增量数据同步 全量数据同步 全量+增量数据同步 将Microsoft SQL Server同步到PostgreSQL RDS for SQL Server Kafka 说明: 目前仅支持白名单用户使用。 增量数据同步 将Microsoft SQL Server同步到Kafka(出云) 本地自建Microsoft SQL Server数据库 ECS自建Microsoft SQL Server数据库 其他云上完全兼容Microsoft SQL Server的数据库 Kafka 说明: 目前仅支持白名单用户使用。 增量数据同步 将Microsoft SQL Server同步到Kafka(自建-自建) 本地自建Mongo数据库 ECS自建Mongo数据库 其他云上Mongo数据库 DDS DDS 全量+增量数据同步支持以下方式: 副本集到副本集 将MongoDB同步到DDS 本地自建MariaDB数据库 ECS自建MariaDB数据库 其他云上MariaDB数据库 RDS for MariaDB 全量+增量数据同步 将MariaDB同步到MariaDB 本地自建MariaDB数据库 ECS自建MariaDB数据库 其他云上MariaDB数据库 RDS for MySQL 增量数据同步 全量+增量数据同步 将MariaDB同步到MySQL GaussDB(for MySQL) 增量数据同步 全量+增量数据同步 将MariaDB同步到GaussDB(for MySQL) RDS for MariaDB 本地自建MariaDB数据库 ECS自建MariaDB数据库 其他云上MariaDB数据库 全量+增量数据同步 将MariaDB同步到MariaDB Cassandra GeminiDB Cassandra 全量数据同步 将Cassandra同步到GeminiDB Cassandra 其他云上DynamoDB(Web服务) GeminiDB Dynamo 说明: 目前仅支持白名单用户使用。 全量数据同步 全量+增量数据同步 将Dynamo同步到GeminiDB Dynamo 本地自建官方开源单机或主备Redis数据库 ECS自建官方开源单机或主备Redis数据库 GeminiDB Redis 说明: 目前仅支持白名单用户使用。 全量数据同步 全量+增量数据同步 将Redis 同步到GeminiDB Redis 本地自建官方Redis开源集群 ECS自建官方Redis开源集群 GeminiDB Redis 说明: 目前仅支持白名单用户使用。 全量+增量数据同步 将Redis集群同步到GeminiDB Redis GeminiDB Redis 本地自建开源Codis ECS自建开源Codis 本地自建Redis单机/主备 ECS自建Redis单机/主备 GeminiDB Redis 说明: 目前仅支持白名单用户使用。 全量+增量数据同步 将GeminiDB Redis同步到Redis 本地自建Redis集群 ECS自建Redis集群 说明: 目前仅支持白名单用户使用。 全量+增量数据同步 将GeminiDB Redis同步到Redis集群
  • 支持的同步对象范围 在使用DRS进行同步时,不同类型的同步任务,支持的同步对象范围不同,详细情况可参考表3。DRS会根据用户选择,在“预检查”阶段对同步对象进行自动检查。 表3 支持的同步对象 类型名称 使用须知 同步对象范围 全量同步支持数据、表结构和索引的同步。 源数据库不允许存在拆分键为timestamp类型的表。 源表的分库分表键要加到目标表的主键和唯一键中(也就是目标表的主键和唯一键中的列应该包含源表的分片列),避免数据冲突出现数据不一致问题。
  • 数据库账号权限要求 在使用DRS进行同步时,连接源库和目标库的数据库账号需要满足以下权限要求,才能启动实时同步任务。不同类型的同步任务,需要的账号权限也不同,详细可参考表2进行赋权。DRS会在“预检查”阶段对数据库账号权限进行自动检查,并给出处理建议。 表2 数据库账号权限 类型名称 全量同步、全量+增量同步、增量同步 源数据库连接账号 源数据库DDM账户至少需要具备一个权限,例如:SELECT。 DDM物理分片数据库账号需要具备如下权限:SELECT、SHOW VIEW、EVENT、LOCK TABLES、REPLICATION SLAVE、REPLICATION CLIENT。 目标数据库连接账号 需要具备如下权限:SELECT、CREATE、ALTER、DROP、DELETE、INSERT、UPDATE。 RDS for MySQL实例的root账户默认已具备上述权限。 建议创建单独用于DRS任务连接的数据库账号,避免因为数据库账号密码修改,导致的任务连接失败。 连接源和目标数据库的账号密码修改后,请参考修改连接信息章节修改DRS任务的连接信息,避免任务连接失败后自动重试,导致数据库账号被锁定影响使用。
  • 数据库用户权限要求 在使用DRS进行同步时,连接源库和目标库的数据库用户需要满足以下权限要求,才能启动实时同步任务。不同类型的同步任务,需要的用户权限也不同,详细可参考表3进行赋权。DRS会在“预检查”阶段对数据库用户权限进行自动检查,并给出处理建议。 建议创建单独用于DRS任务连接的数据库用户,避免因为数据库用户密码修改,导致的任务连接失败。 连接源或目标数据库的用户密码修改后,请尽快修改DRS任务中的连接信息,避免任务连接失败后自动重试,导致数据库用户被锁定影响使用。 由于 分布式数据库 为源链路需要检查每个DN的连通性,建议使用非root数据库用户进行同步,避免因为密码填写错误在连接DN过程中导致用户被锁定。 表3 数据库用户权限 类型名称 全量同步 增量同步 全量+增量同步 源数据库连接用户 具备sysadmin角色或者以下最小权限: 需要DATABASE的CONNECT权限、SCHEMA的USAGE权限、表的SELECT或UPDATE权限(无主键表锁表需要UPDATE权限)、SEQUENCE的SELECT权限。 需要具备远程连接权限,添加方法可参考GaussDB远程连接配置方法。 具备sysadmin角色或者以下最小权限: 需要REPLICATION权限或继承了内置角色gs_role_replication的权限、DATABASE的CONNECT权限、SCHEMA的USAGE权限、表的SELECT权限。 需要具备远程连接权限,添加方法可参考GaussDB远程连接配置方法。 需要保证安全组和防火墙策略放开对应连接端口,详细说明可参考GaussDB为源链路增量同步连接及端口说明。 具备sysadmin角色或者以下最小权限: 需要REPLICATION权限或继承了内置角色gs_role_replication的权限、DATABASE的CONNECT权限、SCHEMA的USAGE权限、表的SELECT或UPDATE权限(无主键表锁表需要UPDATE权限)、SEQUENCE的SELECT权限。 需要具备远程连接权限,添加方法可参考GaussDB远程连接配置方法。 需要保证安全组和防火墙策略放开对应连接端口,详细说明可参考GaussDB为源链路增量同步连接及端口说明。 目标数据库连接用户 具备sysadmin角色或者以下最小权限: 需要DATABASE的CONNECT和CREATE权限、SCHEMA的USAGE和CREATE权限、表的INSERT、UPDATE、DELETE、SELECT、ALTER、INDEX、COMMENT权限。 目标库使用gsloader等工具创建相关系统表(如 public.pgxc_copy_error_log,public.gs_copy_summary)时,DRS访问相关系统表需要有系统表的all privilege权限,详细信息可参考《GaussDB工具参考》。
  • 支持的同步对象范围 在使用DRS进行同步时,不同类型的同步任务,支持的同步对象范围不同,详细情况可参考表3。DRS会根据用户选择,在“预检查”阶段对同步对象进行自动检查。 表3 支持的同步对象 类型名称 使用须知 同步对象范围 支持表、主键索引、唯一索引、普通索引、存储过程、视图、函数的同步。 仅支持MyISAM和InnoDB表的同步。 不支持事件、触发器的同步。 视图、存储过程、函数依赖的表不支持做表名映射。 任务做表名映射时,不支持该表的外键约束同步。
  • 支持的源和目标数据库 表1 支持的数据库 源数据库 目标数据库 本地自建MariaDB数据库 10.0、10.1、10.2、10.3、10.4、10.5版本 ECS自建MariaDB数据库 10.0、10.1、10.2、10.3、10.4、10.5版本 其他云上MariaDB数据库 10.0、10.1、10.2、10.3、10.4、10.5版本 RDS for MySQL 5.5、5.6、5.7、8.0版本 说明: 源库为MariaDB 10.0、10.1版本时,建议同步到目标库MySQL 5.6及以上的版本。 源库为MariaDB 10.2、10.3、10.4版本时,建议同步到目标库MySQL 5.7及以上的版本。 源库为MariaDB 10.5版本时,建议同步到目标库MySQL 8.0版本。
  • 数据库账号权限要求 在使用DRS进行同步时,连接源库和目标库的数据库账号需要满足以下权限要求,才能启动实时同步任务。不同类型的同步任务,需要的账号权限也不同,详细可参考表2进行赋权。DRS会在“预检查”阶段对数据库账号权限进行自动检查,并给出处理建议。 建议创建单独用于DRS任务连接的数据库账号,避免因为数据库账号密码修改,导致的任务连接失败。 连接源和目标数据库的账号密码修改后,请参考修改连接信息章节修改DRS任务的连接信息,避免任务连接失败后自动重试,导致数据库账号被锁定影响使用。 表2 数据库账号权限 类型名称 增量、全量+增量同步 源数据库连接账号 SELECT、SHOW VIEW、EVENT、LOCK TABLES、RELOAD、REPLICATION SLAVE、REPLICATION CLIENT(或BIN LOG MONIOTOR,MariaDB 10.5及以上版本更改为此权限)。 目标数据库连接账号 SELECT、CREATE、DROP、DELETE、INSERT、UPDATE、ALTER、CREATE VIEW、CREATE ROUTINE、REFERENCES,RDS for MySQL实例的root账户默认已具备上述权限。当目标库为8.0.14-8.0.18版本时,还需要有SESSION_VARIABLES_ADMIN权限。
  • 数据库用户权限要求 在使用DRS进行同步时,连接源库和目标库的数据库用户需要满足以下权限要求,才能启动实时同步任务。不同类型的同步任务,需要的用户权限也不同,详细可参考表3进行赋权。DRS会在“预检查”阶段对数据库用户权限进行自动检查,并给出处理建议。 建议创建单独用于DRS任务连接的数据库用户,避免因为数据库用户密码修改,导致的任务连接失败。 连接源或目标数据库的用户密码修改后,请尽快修改DRS任务中的连接信息,避免任务连接失败后自动重试,导致数据库用户被锁定影响使用。 由于分布式数据库为源链路需要检查每个DN的连通性,建议使用非root数据库用户进行同步,避免因为密码填写错误在连接DN过程中导致用户被锁定。 表3 数据库用户权限 类型名称 全量同步 增量同步 全量+增量同步 源数据库连接用户 具备sysadmin角色或者以下最小权限: 需要DATABASE的CONNECT权限、SCHEMA的USAGE权限、表的SELECT或UPDATE权限(无主键表锁表需要UPDATE权限)、SEQUENCE的SELECT权限。 需要具备远程连接权限,添加方法可参考GaussDB远程连接配置方法。 具备sysadmin角色或者以下最小权限: 需要REPLICATION权限或继承了内置角色gs_role_replication的权限、DATABASE的CONNECT权限、SCHEMA的USAGE权限、表的SELECT权限。 需要具备远程连接权限,添加方法可参考GaussDB远程连接配置方法。 需要保证安全组和防火墙策略放开对应连接端口,详细说明可参考GaussDB为源链路增量同步连接及端口说明。 具备sysadmin角色或者以下最小权限: 需要REPLICATION权限或继承了内置角色gs_role_replication的权限、DATABASE的CONNECT权限、SCHEMA的USAGE权限、表的SELECT或UPDATE权限(无主键表锁表需要UPDATE权限)、SEQUENCE的SELECT权限。 需要具备远程连接权限,添加方法可参考GaussDB远程连接配置方法。 需要保证安全组和防火墙策略放开对应连接端口,详细说明可参考GaussDB为源链路增量同步连接及端口说明。 目标数据库连接用户 具备sysadmin角色或者以下最小权限: 需要DATABASE的CONNECT和CREATE权限、SCHEMA的USAGE和CREATE权限、表的INSERT、UPDATE、DELETE、SELECT、ALTER、INDEX、COMMENT权限。 目标库使用gsloader等工具创建相关系统表(如 public.pgxc_copy_error_log,public.gs_copy_summary)时,DRS访问相关系统表需要有系统表的all privilege权限,详细信息可参考《GaussDB工具参考》。
  • 数据库用户权限要求 在使用DRS进行同步时,连接源库和目标库的数据库用户需要满足以下权限要求,才能启动实时同步任务。不同类型的同步任务,需要的用户权限也不同,详细可参考表3进行赋权。DRS会在“预检查”阶段对数据库用户权限进行自动检查,并给出处理建议。 建议创建单独用于DRS任务连接的数据库用户,避免因为数据库用户密码修改,导致的任务连接失败。 连接源或目标数据库的用户密码修改后,请尽快修改DRS任务中的连接信息,避免任务连接失败后自动重试,导致数据库用户被锁定影响使用。 由于分布式数据库为源链路需要检查每个DN的连通性,建议使用非root数据库用户进行同步,避免因为密码填写错误在连接DN过程中导致用户被锁定。 表3 数据库用户权限 类型名称 全量同步 增量同步 全量+增量同步 源数据库连接用户 用户具备sysadmin角色或以下最小权限: DATABASE的CONNECT权限、SCHEMA的USAGE权限、表的SELECT或UPDATE权限(无主键表锁表需要UPDATE权限)、SEQUENCE的SELECT权限。 需要具备远程连接权限,添加方法可参考GaussDB远程连接配置方法。 用户具备sysadmin角色或以下最小权限: REPLICATION权限或继承了内置角色gs_role_replication的权限、DATABASE的CONNECT权限、SCHEMA的USAGE权限、表的SELECT权限。 需要具备远程连接权限,添加方法可参考GaussDB远程连接配置方法。 需要保证安全组和防火墙策略放开对应连接端口,详细说明可参考GaussDB为源链路增量同步连接及端口说明。 用户具备sysadmin角色或以下最小权限: REPLICATION权限或继承了内置角色gs_role_replication的权限、DATABASE的CONNECT权限、SCHEMA的USAGE权限、表的SELECT或UPDATE权限(无主键表锁表需要UPDATE权限)、SEQUENCE的SELECT权限。 需要具备远程连接权限,添加方法可参考GaussDB远程连接配置方法。 需要保证安全组和防火墙策略放开对应连接端口,详细说明可参考GaussDB为源链路增量同步连接及端口说明。 目标数据库连接用户 用户需要具备DBA角色或者以下最小权限: CREATE SESSION权限,表的SELECT、INSERT权限,或者具备RESOURCE角色。 用户需要具备DBA角色或者以下最小权限: CREATE SESSION权限,表的SELECT、INSERT、UPDATE、DELETE权限,或者具备RESOURCE角色 用户需要具备DBA角色或者以下最小权限: CREATE SESSION权限,表的SELECT、INSERT、UPDATE、DELETE权限,或者具备RESOURCE角色。
  • 支持的同步对象范围 在使用DRS进行同步时,不同类型的同步任务,支持的同步对象范围不同,详细情况可参考表2。DRS会根据用户选择,在“预检查”阶段对同步对象进行自动检查。 表2 支持的同步对象 类型名称 使用须知 同步对象范围 支持的字段类型: TINYINT、SMALLINT、INT、BIGINT、DECIMAL、NUMERIC、FLOAT、REAL、SMALLMONEY、MONEY、BIT、DATE、DATETIME、DATETIME2、DATETIMEOFFSET、TIME、TIMESTAMP、XML、CHAR、VARCHAR、NCHAR、NVARCHAR、BINARY、VARBINARY、IMAGE、HIERARCHYID、NTEXT、TEXT、UNIQUEIDENTIFIER。 不支持的字段类型:SQL_VARIANT、GEOMETRY、GEOGRAPHY。 增量同步的范围: 支持DML(Data Manipulation Language):包括INSERT、UPDATE、DELETE。 不支持DDL(Data Definition Language)。
  • 数据库账号权限要求 在使用DRS进行同步时,连接源库和目标库的数据库账号需要满足以下权限要求,才能启动实时同步任务。不同类型的同步任务,需要的账号权限也不同,详细可参考表3进行赋权。DRS会在“预检查”阶段对数据库账号权限进行自动检查,并给出处理建议。 表3 数据库账号权限 类型名称 增量同步 源数据库连接账号 需要具备sysadmin权限,或者view server state权限以及待同步数据库的db_datareader或db_owner权限。
  • 使用须知 DRS增量同步过程一般包含三个阶段:任务启动阶段、增量阶段、结束任务阶段。为了确保同步各个阶段的平顺,在创建同步任务前,请务必阅读以下使用须知。 表4 使用须知 类型名称 使用和操作约定 任务启动前须知 源数据库参数要求: 源数据库模式必须设置为FULL模式。 源数据库必须开启SQL Server Agent代理服务。 源数据库若开启客户端配置中的“强制协议加密(Force Protocol Encrypton)”,必须同时开启“信任服务器证书(trust server certificate)”,如下图1所示: 图1 查看客户端属性 源数据库对象要求: 源库中不允许存在被禁用的表的聚簇索引,否则会导致同步失败。 源库中不允许存在名称为cdc的用户名或schema。 源库待同步对象的库名、schema名、表名只能包含如下字符:字母、数字、下划线和中划线,库名长度不能超过64个字符。 源库待同步对象的表中列名不能包含如下字符:[]?。 目标数据库参数要求: 目标库为社区Kafka。 Kafka的auto.create.topics.enable参数建议为false。 其他使用须知: 不支持源数据库主备切换,源数据库主备切换会导致同步任务失败。 不支持源数据库Microsoft SQL Server为TLS 1.0、TLS 1.1协议的同步,如果需要同步,建议源库升级到TLS 1.2及以上版本。 SQL Server为源的增量同步基于SQL Server提供的CDC能力,如果SQL Server源库的CDC功能出现异常(如被关闭、事务日志满等情况),则增量同步就会受到影响。 增量同步过程须知 请勿修改源库和目标库的端口号,请勿修改、删除源库和目标库连接用户的密码、权限,否则可能导致任务失败。 请勿在目标库做写入操作,否则可能导致数据不一致。 为保证同步任务正常和数据的一致性,如有以上诉求,建议在业务低峰期时重新创建DRS任务。 请勿在Kafka上删除接收DRS数据的topic,否则可能导致任务失败。 不支持DDL操作,源数据库进行的DDL操作不会同步到目标数据库。 不支持大数据类型IMAGE、TEXT、NTEXT的删除操作。 支持任务再编辑追加同步对象。
  • 支持的源和目标数据库 表1 支持的数据库 源数据库 目标数据库 本地自建MySQL数据库(MySQL 5.5、5.6、5.7、8.0版本) ECS自建MySQL数据库(MySQL 5.5、5.6、5.7、8.0版本) 其他云上MySQL数据库(MySQL 5.5、5.6、5.7、8.0版本) RDS for MySQL(5.5、5.6、5.7、8.0版本) GaussDB分布式版(MySQL兼容模式)(1.0.0及以上版本)
  • 支持的同步对象范围 在使用DRS进行同步时,不同类型的同步任务,支持的同步对象范围不同,详细情况可参考表3。DRS会根据用户选择,在“预检查”阶段对同步对象进行自动检查。 表3 支持的同步对象 类型名称 使用须知 同步对象范围 全量同步时支持表、普通索引、主键与唯一约束、数据的同步。增量同步时支持表的实时同步。 全量阶段不支持bfile、sdo_geometry、urowid和自定义类型。增量阶段不支持bfile、sdo_geometry、urowid、interval year to month、interval day to second和自定义类型。 timestamp和interval day to second类型支持的最大精度是6。 全量同步结构不支持位图索引、倒排索引、函数索引。 增量同步LOB类型仅支持BasicFiles属性,不支持SecureFiles属性,支持的LOB类型大小限10M以内。 对于TIMESTAMP WITH TIME ZONE类型,根据目标库时区做转换后不得大于“9999-12-31 23:59:59.999999”。 不支持默认值含有表达式的函数的表的同步。 不支持同步源库中的临时表。 不支持同步源库中有虚拟列的表。 不支持同步既是无主键表,又是分区表的自建表,可能会导致任务失败。
  • 数据库账号权限要求 在使用DRS进行同步时,连接源库和目标库的数据库账号需要满足以下权限要求,才能启动实时同步任务。不同类型的同步任务,需要的账号权限也不同,详细可参考表2进行赋权。DRS会在“预检查”阶段对数据库账号权限进行自动检查,并给出处理建议。 表2 数据库账号权限 类型名称 全量+增量同步 源数据库连接账号 源数据库DDM账户至少需要具备一个权限,例如:SELECT。 DDM物理分片数据库账号需要具备如下权限:SELECT、SHOW VIEW、EVENT、LOCK TABLES、REPLICATION SLAVE、REPLICATION CLIENT。 目标数据库连接账号 需要具备如下基本权限:CREATE、DROP、ALTER、INDEX、INSERT、DELETE、UPDATE、SELECT, 同时必须具备扩展权限:全表SELECT权限。目标中间件账户必须具备对所同步数据库的权限。 建议创建单独用于DRS任务连接的数据库账号,避免因为数据库账号密码修改,导致的任务连接失败。 连接源和目标数据库的账号密码修改后,请参考修改连接信息章节修改DRS任务的连接信息,避免任务连接失败后自动重试,导致数据库账号被锁定影响使用。
共100000条