华为云用户手册

  • 注意事项 为保证任务的正常运行,DRS提供了自动化的检查方法,在您启动DRS任务前,会针对源数据库和目标数据库的相关配置、条件进行检查。主要的检查项和对应的处理建议请参考预检查项。除了预检查项目之外,您还需要注意的事情参见表4。 表4 注意事项 类型名称 使用和操作限制 源数据库限制 不支持reset master或reset master to命令,可能会导致DRS任务失败或者数据不一致。 如果源数据库MySQL不支持TLS1.2协议,或者为版本较低的自建库(低于5.6.46或在5.7.0-5.7.28之间),需提交运维申请才能使用SSL测试连接。 使用限制 通用: 不允许修改、删除连接源和目标数据库的用户的用户名、密码、权限,或修改源和目标数据库的端口号。 全量同步阶段: 对MyISAM表执行修改操作时,可能造成数据不一致。 不支持DDL操作。 增量同步阶段: 如果设置session变量character_set_client为binary,可能导致乱码。 支持部分DDL操作。 一对一的场景下,默认同步的DDL类型有CREATE_TABLE,RENAME_TABLE,ADD_COLUMN,MODIFY_COLUMN,CHANGE_COLUMN,DROP_COLUMN,DROP_INDEX,ADD_INDEX,CREATE_INDEX,RENAME_INDEX,DROP_TABLE,TRUNCATE_TABLE,DROP_PARTITION,RENAME_COLUMN,DROP_PRIMARY_KEY,ADD_PRIMARY_KEY,客户可以根据自身需求,在对象选择页面选择需要同步的DDL类型。 增量同步支持表的重命名,源表和目标表必须都在对象选择里。 常见故障排查: 在任务创建、启动、全量同步、增量同步、结束等过程中,如有遇到问题,可先参考“故障排查”章节进行排查。 其他限制 如果专属计算集群不支持4vCPU/8G或以上规格实例,则无法创建同步任务。 任务做表名映射时,不支持该表的外键约束同步。 任务做库名映射时,同步的对象中如果存在存储过程、视图、函数对象,全量阶段这些对象不会同步,会导致对象对比不一致。 已选择的表与未选择的表之间互相rename的DDL操作,在任务同步中会被过滤掉,可能会导致任务失败或数据不一致。 对于一个DDL中存在一个rename的情况(例如:rename A TO B),只支持rename前后库表都在已选择库表中的rename操作(A和B都在已选择库表中),其他情况的rename DDL会被过滤; 对于一个DDL中存在多个rename的情况(例如:rename A TO B, B TO C),只支持rename前后库表都在已选择库表中的部分rename操作 ,其他情况的rename DDL会被过滤(A和B在已选择库表中,C不在,仅执行rename A TO B)。 不建议在多对一同步场景下的进行rename操作,可能会导致任务失败或数据不一致。 对于表中的物理生成列,如果列是根据一个时间类型生成的,会存在此列数据不一致的可能性。 源库不允许存在与目标库同名的无主键表。 源库如果存在非标浮点类型,且非标浮点类型存在宽松模式可以写入但严格模式下无法写入的数据,同步过程可能会有数据不一致的风险。 源库为RDS for MySQL实例时,不支持带有TDE特性并建立具有加密功能表。 在创建DRS任务之前,如果源或者目标数据库实例开启并设置了SQL限流规则,可能会导致DRS任务失败。 支持断点续传功能,但是对于无主键的表可能会出现重复插入数据的情况。 支持目标数据库中的表比源数据库多列场景,但是需要避免以下场景可能导致的任务失败。 目标数据库多的列要求非空且没有默认值,源库insert数据,同步到目标数据库后多的列为null,不符合目标数据库要求。 目标数据库多的列设置固定默认值,且有唯一约束。源库insert多条数据后,同步到目标数据库后多的列为固定默认值,不符合目标数据库要求。 不支持源数据库恢复到之前时间点的操作(PITR)。 不支持目标数据库恢复到全量同步时间段范围内的PITR操作。 不支持外键级联操作。当外键是普通索引的时候,可能会导致表结构创建失败,建议改成唯一索引。 不支持强制清理binlog,否则会导致同步任务失败。 任务创建后,目标数据库不能设置为“只读”。 需要DRS任务同步索引的情况下,目标库对应表上不能存在同名但不同列信息的索引。全量阶段DRS会忽略对应表上已存在的同名索引,增量阶段DDL根据索引名操作索引时会触发错位问题。 使用了附加列功能,单表的列数超过500时,对该表添加附加列可能会超过列数上限,会导致任务失败。
  • 支持的源和目标数据库 表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(for MySQL) 主备实例(8.0版本)
  • 数据库账号权限要求 在使用DRS进行同步时,连接源库和目标库的数据库账号需要满足以下权限要求,才能启动实时同步任务。不同类型的同步任务,需要的账号权限也不同,详细可参考表2进行赋权。DRS会在“预检查”阶段对数据库账号权限进行自动检查,并给出处理建议。 表2 数据库账号权限 类型名称 全量+增量同步、增量同步 源数据库连接账号 SELECT、SHOW VIEW、EVENT、LOCK TABLES、REPLICATION SLAVE、REPLICATION CLIENT。 目标数据库连接账号 SELECT、CREATE、DROP、DELETE、INSERT、UPDATE、ALTER、CREATE VIEW、CREATE ROUTINE、REFERENCES,GaussDB(for MySQL)实例的root账户默认已具备上述权限。 当目标库为8.0.14-8.0.18版本时,还需要有SESSION_VARIABLES_ADMIN权限。 建议创建单独用于DRS任务连接的数据库账号,避免因为数据库账号密码修改,导致的任务连接失败。 连接源和目标数据库的账号密码修改后,请尽快修改DRS任务中的连接信息,避免任务连接失败后自动重试,导致数据库账号被锁定影响使用。
  • 支持的同步对象范围 在使用DRS进行同步时,不同类型的同步任务,支持的同步对象范围不同,详细情况可参考表3。DRS会根据用户选择,在“预检查”阶段对同步对象进行自动检查。 表3 支持的同步对象 类型名称 使用须知 同步对象范围 支持表、主键索引、唯一索引、普通索引、存储过程、视图、函数的同步。 仅支持MyISAM和InnoDB表的同步。 视图、存储过程、函数依赖的表不支持做表名映射。 不支持事件(EVENT)和触发器(TRIGGER)的同步。 全量和增量同步不支持隐藏列(INVISIBLE),隐藏列是MySQL 8.0.23开始支持的特性,例如: CREATE TABLE `test11` ( `id` int NOT NULL, `c1` int DEFAULT NULL /*!80023 INVISIBLE */, PRIMARY KEY (`id`));
  • 数据库用户权限要求 在使用DRS进行同步时,连接源库和目标库的数据库用户需要满足以下权限要求,才能启动实时同步任务。不同类型的同步任务,需要的用户权限也不同,详细可参考表3进行赋权。DRS会在“预检查”阶段对数据库用户权限进行自动检查,并给出处理建议。 建议创建单独用于DRS任务连接的数据库账号,避免因为数据库账号密码修改,导致的任务连接失败。 连接源和目标数据库的账号密码修改后,请尽快修改DRS任务中的连接信息,避免任务连接失败后自动重试,导致数据库账号被锁定影响使用。 表3 数据库用户权限 类型名称 全量同步 增量同步 全量+增量同步 源数据库连接用户 用户具备sysadmin角色或被授予以下权限: DATABASE的CONNECT权限、SCHEMA的USAGE权限、表的SELECT或UPDATE(仅无主键表需要)权限。 需要具备远程连接权限,添加方法可参考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、DELETE、 UPDATE、 SELECT。 通常需要具备sysadmin角色或以下基本权限: DATABASE上的权限:CONNECT。 SCHEMA上的权限:USAGE。 表上的权限:INSERT、DELETE、 UPDATE、 SELECT。 通常需要具备sysadmin角色或以下基本权限: DATABASE上的权限:CONNECT、CREATE。 SCHEMA上的权限:USAGE、CREATE。 表上的权限:INSERT、DELETE、 UPDATE、 SELECT。
  • 支持的源和目标数据库 表1 支持的数据库 源数据库 目标数据库 本地自建数据库(PostgreSQL 9.4、9.5、9.6、10、11、12、13、14版本) ECS自建数据库(PostgreSQL 9.4、9.5、9.6、10、11、12、13、14版本) 其他云上数据库(PostgreSQL 9.4、9.5、9.6、10、11、12、13、14版本) RDS for PostgreSQL(9.5、9.6、10、11、12、13、14版本) GaussDB主备版
  • 使用须知 DRS全量+增量同步过程一般包含四个阶段:任务启动阶段、全量阶段、增量阶段、结束任务阶段(单全量任务则包含三个阶段)。为了确保同步各个阶段的平顺,在创建同步任务前,请务必阅读以下使用须知。 表4 使用须知 类型名称 使用和操作约定 任务启动前须知 源数据库参数要求: 源数据库的分区表触发器不可以设置为disable。 全量同步支持源库备机状态,但需要设置hot_standby_feedback为on;增量同步不支持源库备机状态。 若要做增量同步: 源数据库的“pg_hba.conf” 文件中包含如下的配置: host replication all 0.0.0.0/0 md5 源数据库参数wal_level必须配置为logical。 源数据库需提前安装test_decoding插件。 源数据库中无主键表的replica identity属性必须为full。 源数据库的max_replication_slots参数值必须大于当前已使用的复制槽数量。 源数据库的max_wal_senders参数值必须等于或大于max_replication_slots参数值。 源数据库中表的主键列toast属性为main、external、extended时,其replica identity属性必须为full。 源数据库对象要求: 同步对象依赖和关联的对象也须一起同步,否则可能导致同步失败。 说明: 常见的关联关系:视图引用表、视图引用视图、主外键关联表、表继承子表引用父表、表分区子分区表引用分区表、表自增列引用序列等。 目标数据库参数要求: 目标数据库参数max_prepared_transactions须大于源数据库。 目标数据库参数max_worker_processes须大于源数据库。 目标数据库参数max_locks_per_transaction须大于源数据库。 目标数据库参数max_connections须大于源数据库。 目标数据库和源数据库的lc_monetary参数值必须一致。 目标数据库对象要求: 目标数据库的字符集必须与源数据库一致。 目标数据库的时区设置必须与源数据库一致。 同步的表要禁用外键,因为DRS并行回放会使得不同表之间的写入顺序和源库不一致,可能会触发外键约束限制,造成同步失败。 支持目标数据库中的表比源数据库多列场景,但是需要避免以下场景可能导致的任务失败。 目标端多的列要求非空且没有默认值,源端insert数据,同步到目标端后多的列为null,不符合目标端要求。 目标端多的列设置固定默认值,且有唯一约束。源端insert多条数据后,同步到目标端后多的列为固定默认值,不符合目标端要求。 其他使用须知: 若专属计算集群不支持4vCPU/8G或以上规格实例,则无法创建同步任务。 暂不支持级联单向同步,例如从实例A同步到实例B,再从实例B同步到实例C。 分区表只同步主表,转为普通表同步到目标库,分区表的数据将集中写入主表。 模式名或表名映射时,为防止索引和约束名冲突,同步后表上的原索引名称将变为此格式:i_+哈希值+原索引名(可能被截断)+_key。其中哈希值由“原模式名_原表名_原索引名”计算得到。同理,表上的原约束名将变为:c_+哈希值+原约束名(可能被截断)+_key。 对于全量+增量和增量任务,启动任务前,请确保源库中未启动长事务,源库启动长事务会阻塞逻辑复制槽的创建,进而引发任务失败。 对于全量+增量和增量任务,任务启动后,仅支持以下版本的源库发生主备倒换:源库为RDS for PostgreSQL 12.6及以上的小版本、RDS for PostgreSQL 13及以上版本的所有小版本。 DRS全量同步表结构时,源库中的character、character varying类型长度在目标库会按照字节长自动扩大(因为目标库为字节长),默认扩大4倍,最大长度为10485760。 DRS全量同步表结构时,目标库存在与某用户名称同名的schema,用其他用户进行同步表结构到schema时,需要使用grant [role] to [role]的方式为此用户赋权,否则可能因为无法创建表结构而导致同步失败。 对象名同步到目标库后不进行大小写转换。 全量同步过程须知 请勿修改源库和目标库的端口号,请勿修改、删除源库和目标库连接用户的密码、权限,否则可能导致任务失败。 请勿在源库执行任何DDL,否则可能导致数据不一致或任务失败。 请勿在目标库做写入操作,否则可能导致数据不一致。 增量同步过程须知 请勿修改源库和目标库的端口号,请勿修改、删除源库和目标库连接用户的密码、权限,否则可能导致任务失败。 请勿修改源数据库表的主键或者唯一键(主键不存在时),否则可能导致增量数据不一致或任务失败。 请勿修改源数据库中表的replica identity属性,否则可能导致增量数据不一致或任务失败。 请勿在目标库做写入操作,否则可能导致数据不一致。 库级同步时,源库新增无主键表时,请务必同时将该无主键表的replica identity属性设置为full,然后再写入数据,否则可能导致数据不一致或任务失败。 库级同步时,源库新增主键表时,如果主键列toast属性为main、external、extended时,请务必同时将该表的replica identity属性设置为full,然后再写入数据,否则可能导致数据不一致或任务失败。 同步对比使用须知 建议在源库的业务低峰期进行数据比对,防止误报不一致数据,以及减少对源库和DRS任务的冲击。 在增量同步过程中做对比时,源库若存在写入,则对比结果可能不一致。 不支持在全量同步过程中做对比。 不支持数据对比过程中做限速。 结束任务须知 正常结束任务: 全量+增量实时同步任务正常结束时,将自动删除任务在源库创建的流复制槽。 强制结束任务: 强制结束全量+增量实时同步任务,需要手动删除源库可能残留的复制槽,可参考PostgreSQL为源强制结束任务章节的指导进行操作。 逻辑复制槽命名规则为“drs_唯一性标识”,其中唯一性标识需要将任务node id中的“-”替换为“_”获取。node id可在DRS任务同步日志页面查看task node id is ***日志找到。
  • 支持的同步对象范围 在使用DRS进行同步时,不同类型的同步任务,支持的同步对象范围不同,详细情况可参考表3。DRS会根据用户选择,在“预检查”阶段对同步对象进行自动检查。 表3 支持的同步对象 类型名称 使用须知 同步对象范围 全量同步的范围: 库级同步支持:模式、表、索引、约束、视图、物化视图、序列、存储过程、规则、触发器、外键、排序规则、插件、编码转换信息、聚合函数、操作符、统计扩展、转换信息、文本搜索配置、函数、数据类型、类型转换、用户、事件触发器、文本搜索解析器、文本搜索模板的同步。 表级同步时,仅支持表、视图、物化视图、序列、用户、普通索引的同步。 文件导入时,支持表的同步。 不支持系统模式(“pg_”开头的任何模式、“information_schema”、“sys”、“utl_raw”、“dbms_lob”、“dbms_output”和“dbms_random”)、系统表、系统用户、表空间、外部数据包装器、外部服务器、用户映射、发布、订阅等其他对象。 不支持实例级同步:支持同步多个库(database),同步多个库时会创建多个DRS子任务。
  • 支持的源和目标数据库 表1 支持的数据库 源数据库 目标数据库 本地自建数据库(PostgreSQL 9.4、9.5、9.6、10、11、12、13、14、15版本) ECS自建数据库(PostgreSQL 9.4、9.5、9.6、10、11、12、13、14、15版本) 其他云上数据库(PostgreSQL 9.4、9.5、9.6、10、11、12、13、14、15版本) RDS for PostgreSQL(9.5、9.6、10、11、12、13、14、15版本) RDS for PostgreSQL(9.5、9.6、10、11、12、13、14、15版本) 说明: 仅支持目标库大版本等于或高于源库大版本。
  • 支持的源和目标数据库 表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版本) RDS for MariaDB 10.5版本
  • 数据库账号权限要求 在使用DRS进行同步时,连接源库和目标库的数据库账号需要满足以下权限要求,才能启动实时同步任务。不同类型的同步任务,需要的账号权限也不同,详细可参考表2进行赋权。DRS会在“预检查”阶段对数据库账号权限进行自动检查,并给出处理建议。 表2 数据库账号权限 类型名称 全量同步 全量+增量同步、增量同步 源数据库连接账号 需要具备如下最小权限: SELECT、SHOW VIEW、EVENT。 需要具备如下最小权限: SELECT、SHOW VIEW、EVENT、LOCK TABLES、REPLICATION SLAVE、REPLICATION CLIENT。 目标数据库连接账号 需要具备如下最小权限: SELECT、CREATE、DROP、DELETE、INSERT、UPDATE、ALTER、CREATE VIEW、CREATE ROUTINE、REFERENCES,RDS for MariaDB实例的root账户默认已具备上述权限。 建议创建单独用于DRS任务连接的数据库账号,避免因为数据库账号密码修改,导致的任务连接失败。 连接源和目标数据库的账号密码修改后,请尽快修改DRS任务中的连接信息,避免任务连接失败后自动重试,导致数据库账号被锁定影响使用。
  • 支持的同步对象范围 在使用DRS进行同步时,不同类型的同步任务,支持的同步对象范围不同,详细情况可参考表3。DRS会根据用户选择,在“预检查”阶段对同步对象进行自动检查。 表3 支持的同步对象 类型名称 使用须知 同步对象范围 支持表、主键索引、唯一索引、普通索引、存储过程、视图、函数的同步。 仅支持MyISAM和InnoDB表的同步。 不支持事件(EVENT)和触发器(TRIGGER)的同步。 不支持源库中同步对象的表结构中带加密表标识(ENCRYPTION)。 视图、存储过程、函数依赖的表不支持做表名映射。 全量和增量同步不支持隐藏列(INVISIBLE),隐藏列是MySQL 8.0.23开始支持的特性,例如: CREATE TABLE `test11` ( `id` int NOT NULL, `c1` int DEFAULT NULL /*!80023 INVISIBLE */, PRIMARY KEY (`id`));
  • 注意事项 为保证任务的正常运行,DRS提供了自动化的检查方法,在您启动DRS任务前,会针对源数据库和目标数据库的相关配置、条件进行检查。主要的检查项和对应的处理建议请参考预检查项。除了预检查项目之外,您还需要注意的事情参见表4。 表4 注意事项 类型名称 使用和操作限制 源数据库限制 不支持reset master或reset master to命令,可能会导致DRS任务失败或者数据不一致。 如果源数据库MySQL不支持TLS1.2协议,需提交运维申请才能使用SSL测试连接。 使用限制 通用: 实时同步过程中,如果修改了源库或者目标库的用户名、密码,会导致同步任务失败,需要在数据复制服务控制台将上述信息重新修改正确,然后重试任务可继续进行实时同步。一般情况下不建议在同步过程中修改上述信息。 为了保持数据一致性,不允许对正在同步中的目标数据库进行修改操作(包括但不限于DDL、DML操作)。 全量同步阶段: 不支持DDL操作。 对MyISAM表执行修改操作时,可能造成数据不一致。 增量同步阶段: 如果设置session变量character_set_client为binary,可能导致乱码。 支持部分DDL操作。 一对一的场景下,默认同步的DDL类型有CREATE_TABLE,RENAME_TABLE,ADD_COLUMN,MODIFY_COLUMN,CHANGE_COLUMN,DROP_COLUMN,DROP_INDEX,ADD_INDEX,CREATE_INDEX,RENAME_INDEX,DROP_TABLE,TRUNCATE_TABLE,DROP_PARTITION,RENAME_COLUMN,DROP_PRIMARY_KEY,ADD_PRIMARY_KEY,客户可以根据自身需求,在对象选择页面选择需要同步的DDL类型。 增量同步支持表的重命名,源表和目标表必须都在对象选择里。 表级同步时,增量同步过程支持使用Online DDL,可参考DRS实时同步支持使用Online DDL工具吗。 支持任务再编辑追加同步对象。 常见故障排查: 在任务创建、启动、全量同步、增量同步、结束等过程中,如有遇到问题,可先参考“故障排查”章节进行排查。 其他限制 对于目标库MariaDB的系统参数enforce_storage_engine,如果该参数值为InnoDB,那么DRS不支持同步存储引擎为MyISAM的表结构和数据到目标库MariaDB。如果需要同步存储引擎为MyISAM的表数据,请先在目标创建好表结构(由于enforce_storage_engine参数限制,存储引擎只能为InnoDB)。 如果专属计算集群不支持4vCPU/8G或以上规格实例,则无法创建同步任务。 对于源数据库和目标数据库的版本有差异的同步链路,由于不同版本之间的部分特性差异,可能会出现语法兼容性问题,详情可参考MySQL或MariaDB不同版本之间的语法差异。 对于表中的物理生成列,如果列是根据一个时间类型生成的,会存在此列数据不一致的可能性。 进行表级多对一同步时,源库不允许存在无主键表。 源库如果存在非标浮点类型,且非标浮点类型存在宽松模式可以写入但严格模式下无法写入的数据,同步过程可能会有数据不一致的风险。 在创建DRS任务之前,如果源数据库实例开启并设置了SQL限流规则,可能会导致DRS任务失败。 支持断点续传功能,但是对于无主键的表可能会出现重复插入数据的情况。 支持目标数据库中的表比源数据库多列场景,但是需要避免以下场景可能导致的任务失败。 目标数据库多的列要求非空且没有默认值,源数据库insert数据,同步到目标数据库后多的列为null,不符合目标数据库要求。 目标数据库多的列设置固定默认值,且有唯一约束。源库insert多条数据后,同步到目标数据库后多的列为固定默认值,不符合目标数据库要求。 不支持源数据库恢复到之前时间点的操作(PITR)。 不支持目标数据库恢复到全量同步时间段范围内的PITR操作。 不支持外键级联操作。当外键是普通索引的时候,可能会导致表结构创建失败,建议改成唯一索引。 不支持强制清理binlog,否则会导致同步任务失败。 不支持分区表的分区字段进行列映射。 任务创建后,目标库不能设置为只读。 表级同步中,对于多对一场景下的表在数据加工页面设置了附加列为来源列,如果目标库中已经存在多对一映射之后的表,请在目标库中删除这张表或者清除这张表的数据,否则将不会通过附加列来创建联合主键(这在同步过程中会导致数据冲突并忽略,从而到导致数据不一致)。 源库MySQL版本为8.0时,部分排序字符集(utf8mb4_0900_as_ci、utf8mb4_0900_as_cs、utf8mb4_0900_bin、utf8mb4_cs_0900_ai_ci等支持Unicode 9.0的排序字符集),在目标库不支持。 由于引擎和版本差异,部分MySQL中的函数在MariaDB中不支持,不支持的函数有:MBRCOVEREDBY、ST_BUFFER_STRATEGY、ST_GeoHash、ST_IsValid、ST_LatFromGeoHash、ST_LongFromGeoHash、ST_PointFromGeoHash、ST_SIMPLIFY、ST_VALIDATE、 (8.0)JSON_ARRAYAGG、JSON_OBJECTAGG、JSON_PRETTY、JSON_STORAGE_FREE、JSON_STORAGE_SIZE、JSON_TABLE。 目标数据库MariaDB执行分区交换的时候不支持VALIDATION语法验证,在源数据库MySQL执行分区交换SQL的时候不要带校验语法,例如: ALTER TABLE t1 EXCHANGE PARTITION p0 WITH TABLE t2 WITH VALIDATION; 增量过程中请不要在源库MySQL的json类型中写入\n、\t、\r等字符,否则会导致数据不一致。 需要DRS任务同步索引的情况下,目标库对应表上不能存在同名但不同列信息的索引。全量阶段DRS会忽略对应表上已存在的同名索引,增量阶段DDL根据索引名操作索引时会触发错位问题。
  • 使用建议 DRS任务启动和全量数据同步阶段,请不要在源数据库执行DDL操作,否则可能导致任务异常。 为保证同步前后数据一致性,确保同步期间目标数据库无业务写入。 数据库同步与环境多样性和人为操作均有密切关系,为了确保同步的平顺,建议您在进行正式的数据库同步之前进行一次演练,可以帮助您提前发现问题并解决问题。 基于以下原因,建议您在启动任务时选择“稍后启动”功能,将启动时间设置在业务低峰期,相对静止的数据可以有效提升一次性同步成功率,避免同步对业务造成性能影响。 在网络无瓶颈的情况下,全量同步会对源数据库增加约50MB/s的查询压力,以及占用2~4个CPU。 正在同步的数据被其他事务长时间锁死,可能导致读数据超时。 由于MySQL固有特点限制,CPU资源紧张时,存储引擎为Tokudb的表,读取速度可能下降至10%。 DRS并发读取数据库,会占用大约6-10个session连接数,需要考虑该连接数对业务的影响。 全量阶段读取表数据时,特别是大表的读取,可能会阻塞业务上对大表的独占锁操作。 更多DRS对数据库的影响,可参考DRS对源数据库和目标数据库有什么影响。 数据对比 建议您结合数据对比的“稍后启动”功能,选择业务低峰期进行数据对比,以便得到更为具有参考性的对比结果。由于同步具有轻微的时差,在数据持续操作过程中进行对比任务,可能会出现少量数据不一致对比结果,从而失去参考意义。
  • 注意事项 为保证任务的正常运行,DRS提供了自动化的检查方法,在您启动DRS任务前,会针对源数据库和目标数据库的相关配置、条件进行检查。主要的检查项和对应的处理建议请参考预检查项。除了预检查项目之外,您还需要注意的事情参见表2。 表2 注意事项 类型名称 使用和操作限制 源数据库限制 不支持reset master或reset master to命令,可能会导致DRS任务失败或者数据不一致。 如果源数据库MySQL不支持TLS1.2协议,或者为版本较低的自建库(低于5.6.46或在5.7.0-5.7.28之间),需提交运维申请才能使用SSL测试连接。 使用限制 通用: 任务启动、任务全量同步阶段,不建议做删除类型的DDL操作,可能会引起任务失败。 不支持源数据库进行恢复操作。 全量同步阶段: 任务启动和全量数据同步阶段,请不要在源数据库执行DDL操作,否则可能导致任务异常。 DRS全量同步表结构时,列名不能是CTID、XMIN、CMIN、XMAX、CMAX、TABLEOID、XC_NODE_ID、TID、OID、GS_TUPLE_UID、TABLEBUCKETID,这些GaussDB禁止的字段,否则会导致建表失败。 增量同步阶段: 不允许修改、删除连接源和目标数据库的用户的用户名、密码、权限,或修改源和目标数据库的端口号。 如果设置session变量character_set_client为binary,可能导致乱码。 不支持源库DDL的复制。 不支持同步DDL操作。 不支持DELETE和UPDATE目标数据库主键类型为tinyblob、blob、mediumblob、longblob、tinytext、text、mediumtext、longtext、clob、nclob、bytea、binary的表。 结束任务: 任务正常结束: 请确保任务结束前,不要断开源和目标数据库的网络连通性,并在结束任务时关注同步日志上报的状态,达到数据库完整同步效果。 任务强制结束: 强制结束将直接释放DRS资源。 常见故障排查: 在任务创建、启动、全量同步、增量同步、结束等过程中,如有遇到问题,可先参考“故障排查”章节进行排查。 其他限制 如果专属计算集群不支持4vCPU/8G或以上规格实例,则无法创建同步任务。 在MySQL中,同一个database(schema)下面的不同表可以存在相同的索引名或约束名。而目标数据库GaussDB中,同一个schema中索引和约束名是唯一的,且长度存在上限。为防止索引和约束名冲突,在全量同步中,DRS同步到目标表上的索引名称将变为此格式:哈希值+原索引名(可能被截断)+_key。其中哈希值由"原库名_原表名_原索引名"计算得到。同理,表上的原约束名将变为:哈希值+原约束名(可能被截断)+_key。 暂不支持级联单向同步,例如从实例A同步到实例B,再从实例B同步到实例C。 网络中断在30秒内恢复的,不影响实时同步,如果超过30秒,则会导致同步任务失败。 源库表同步至目标库后分布方式为哈希分布,暂不支持复制分布。 源库为RDS for MySQL实例时,不支持带有TDE特性并建立具有加密功能表。 在创建DRS任务之前,如果源数据库实例开启并设置了SQL限流规则,可能会导致DRS任务失败。 支持目标数据库中的表比源数据库多列场景,但是需要避免以下场景可能导致的任务失败。 目标数据库多的列要求非空且没有默认值,源库insert数据,同步到目标数据库后多的列为null,不符合目标数据库要求。 目标数据库多的列设置固定默认值,且有唯一约束。源库insert多条数据后,同步到目标数据库后多的列为固定默认值,不符合目标数据库要求。 源库和目标库均相同的任务不允许出现重复同步的情况,如:A任务和B任务同时将源库的同一张表的实时同步到目标库的同一张表中,可能导致数据不一致和同步失败。 GaussDB只能设置库级字符集,如果遇到MySQL中设置了表级、字段级字符集的场景,可能会因为字符长度问题导致创建表结构异常。 DRS全量同步表结构时,源库中char、varchar、nvarchar、enum、set字符类型长度在目标库会按照字节长自动扩大(因为目标库为字节长),扩大倍数和源库中列的字符集有关。如源库字符集为UTF8的按照字节长扩大3倍,为UTF8MB4的按照字节长扩大4倍。 不建议在数据库中使用非精确数值类型做主键,该特性影响DRS增量场景下对UPDATE、DELETE语句的同步,导致任务失败。 如果无主键表中包含大字段(tinyblob、blob、mediumblob、longblob、tinytext、text、mediumtext、longtext、clob、nclob、bytea、binary),增量同步阶段存在大字段数据不一致的可能性。 由于浮点型数据是采用近似值存储,而不是作为精确值存储,此外操作系统平台和底层实现也对浮点型数据有影响,因此FLOAT,DOUBLE类型的数据是不精确的,所以在MySQL和GaussDB同步浮点型数据,存在一定差异的可能性,可参考MySQL的官方文档。 不支持两阶段事务。 由于MySQL与GaussDB针对零时间("0000-00-00 00:00:00")内置的处理方式不同,当进行内容对比时,如果源、目标数据库存在零时间,对比结果会显示数据不一致。 源数据库同步的表如果有AUTO_INCREMENT属性,结束任务时,DRS会自动刷新同步表的序列整型列所对应的GaussDB自增列(sequence)起始值,刷新值为该列的最大值+10000。
  • 使用建议 DRS任务启动和全量数据同步阶段,请不要在源数据库执行DDL操作,否则可能导致任务异常。 为保证同步前后数据一致性,确保同步期间目标数据库无业务写入。 数据库同步与环境多样性和人为操作均有密切关系,为了确保同步的平顺,建议您在进行正式的数据库同步之前进行一次演练,可以帮助您提前发现问题并解决问题。 基于以下原因,建议您在启动任务时选择“稍后启动”功能,将启动时间设置在业务低峰期,相对静止的数据可以有效提升一次性同步成功率,避免同步对业务造成性能影响。 在网络无瓶颈的情况下,全量同步会对源数据库增加约50MB/s的查询压力,以及占用2~4个CPU。 正在同步的数据被其他事务长时间锁死,可能导致读数据超时。 DRS并发读取数据库,会占用大约6-10个session连接数,需要考虑该连接数对业务的影响。 全量阶段读取表数据时,特别是大表的读取,可能会阻塞业务上对大表的独占锁操作。 更多DRS对数据库的影响,可参考DRS对源数据库和目标数据库有什么影响。 数据对比 建议您结合数据对比的“稍后启动”功能,选择业务低峰期进行数据对比,以便得到更为具有参考性的对比结果。由于同步具有轻微的时差,在数据持续操作过程中进行对比任务,可能会出现少量数据不一致对比结果,从而失去参考意义。
  • 数据库用户权限要求 在使用DRS进行同步时,连接源库和目标库的数据库用户需要满足以下权限要求,才能启动实时同步任务。不同类型的同步任务,需要的用户权限也不同,详细可参考表3进行赋权。DRS会在“预检查”阶段对数据库用户权限进行自动检查,并给出处理建议。 建议创建单独用于DRS任务连接的数据库账号,避免因为数据库账号密码修改,导致的任务连接失败。 连接源和目标数据库的账号密码修改后,请尽快修改DRS任务中的连接信息,避免任务连接失败后自动重试,导致数据库账号被锁定影响使用。 表3 数据库用户权限 类型名称 增量同步 源数据库连接用户 用户具备sysadmin角色或以下最小权限: 需要REPLICATION权限或继承了内置角色gs_role_replication的权限、DATABASE的CONNECT权限、SCHEMA的USAGE权限、表的SELECT权限。 需要具备远程连接权限,添加方法可参考GaussDB远程连接配置方法。 需要保证安全组和防火墙策略放开对应连接端口,详细说明可参考GaussDB为源链路增量同步连接及端口说明。
  • 使用建议 DRS任务启动和全量数据同步阶段,请不要在源数据库执行DDL操作,否则可能导致任务异常。 为保证同步前后数据一致性,确保同步期间目标数据库无业务写入。 数据库同步与环境多样性和人为操作均有密切关系,为了确保同步的平顺,建议您在进行正式的数据库同步之前进行一次演练,可以帮助您提前发现问题并解决问题。 基于以下原因,建议您在启动任务时选择“稍后启动”功能,将启动时间设置在业务低峰期,相对静止的数据可以有效提升一次性同步成功率,避免同步对业务造成性能影响。 在网络无瓶颈的情况下,全量同步会对源数据库增加约50MB/s的查询压力,以及占用2~4个CPU。 同步无主键表时,为了确保数据一致性,会存在3s以内的单表级锁定。 正在同步的数据被其他事务长时间锁死,可能导致读数据超时。 由于MySQL固有特点限制,CPU资源紧张时,存储引擎为Tokudb的表,读取速度可能下降至10%。 DRS并发读取数据库,会占用大约6-10个session连接数,需要考虑该连接数对业务的影响。 全量阶段读取表数据时,特别是大表的读取,可能会阻塞业务上对大表的独占锁操作。 更多DRS对数据库的影响,可参考DRS对源数据库和目标数据库有什么影响。 数据对比 建议您结合数据对比的“稍后启动”功能,选择业务低峰期进行数据对比,以便得到更为具有参考性的对比结果。由于同步具有轻微的时差,在数据持续操作过程中进行对比任务,可能会出现少量数据不一致对比结果,从而失去参考意义。
  • 数据库账号权限要求 在使用DRS进行同步时,连接源库和目标库的数据库账号需要满足以下权限要求,才能启动实时同步任务。不同类型的同步任务,需要的账号权限也不同,详细可参考表2进行赋权。DRS会在“预检查”阶段对数据库账号权限进行自动检查,并给出处理建议。 表2 数据库账号权限 类型名称 全量+增量同步 源数据库连接账号 源数据库DDM账户至少需要具备一个权限,例如:SELECT。 DDM物理分片数据库账号需要具备如下权限:SELECT、SHOW VIEW、EVENT、LOCK TABLES、REPLICATION SLAVE、REPLICATION CLIENT。 目标数据库连接账号 提供的目标数据库账号必须具有每张表的如下权限:INSERT、SELECT、UPDATE、DELETE、CONNECT、CREATE。 建议创建单独用于DRS任务连接的数据库账号,避免因为数据库账号密码修改,导致的任务连接失败。 连接源和目标数据库的账号密码修改后,请尽快修改DRS任务中的连接信息,避免任务连接失败后自动重试,导致数据库账号被锁定影响使用。
  • 支持的同步对象范围 在使用DRS进行同步时,不同类型的同步任务,支持的同步对象范围不同,详细情况可参考表3。DRS会根据用户选择,在“预检查”阶段对同步对象进行自动检查。 表3 支持的同步对象 类型名称 使用须知 同步对象范围 全量同步支持数据、表结构和普通索引(B-Tree索引)的同步。 目标数据库不支持唯一键表,同步过程中将忽略源数据库中的唯一键表。 不支持同步无主键表,如果选择同步的表中存在无主键表,则同步失败。 不支持唯一约束、唯一索引的同步。 不支持同步既是无主键表,又是分区表的自建表,可能会导致任务失败。 同步对象列名不能为CTID、XMIN、CMIN、XMAX、CMAX、TABLEOID、XC_NODE_ID、TID等GaussDB(DWS)禁止的字段,否则会导致任务失败。
  • 注意事项 为保证任务的正常运行,DRS提供了自动化的检查方法,在您启动DRS任务前,会针对源数据库和目标数据库的相关配置、条件进行检查。主要的检查项和对应的处理建议请参考预检查项。除了预检查项目之外,您还需要注意的事情参见表4。 表4 注意事项 类型名称 使用和操作限制 源数据库限制 源物理分片数据库建议开启skip-name-resolve,减少连接超时的可能性。 源物理分片数据库不支持枚举类型和set集合类型的。 源库的timestamp列的默认值,需要在目标库的合理取值内,否则会导致同步失败。 使用限制 通用: 不允许源端DDM正在同步的表做改变拆分键的操作,也不允许将单表/广播表改为拆分表,拆分表改为单表/广播表。 全量同步阶段: 全量阶段基于索引实现上差异,只保留普通B-Tree索引,其他索引默认不同步。GaussDB(DWS)索引过多时会影响存储空间和入库性能,建议用户可根据业务需求按需建索引。 增量同步阶段: 不允许修改、删除连接源和目标数据库的用户的用户名、密码、权限,或修改源和目标数据库的端口号。 如果需要对源库需要同步的表结构进行修改,则用户必须在目标库同步修改表结构。 支持部分DDL语句,包括:ADD COLUMN、CREATE TABLE、MODIFY COLUMN、CREATE INDEX、DROP INDEX、RENAME INDEX。 对同一张表或列做DDL操作,需要在业务低峰期,并且时间间隔1分钟以上。 不支持源数据库进行恢复操作。 不支持DELETE和UPDATE目标数据库主键类型为binary,text,blob,clob的表。 常见故障排查: 在任务创建、启动、全量同步、增量同步、结束等过程中,如有遇到问题,可先参考“故障排查”章节进行排查。 其他限制 如果专属计算集群不支持4vCPU/8G或以上规格实例,则无法创建同步任务。 数据类型不兼容时,可能引起同步失败。 源数据库中存在主键重复的数据时,直接同步将导致目标库数据比源库少,请务必检查并订正数据后启动同步。 源库的表如果包含系统列_ddm_lock、_slot,该列下的数据在全量、增量同步过程中都会被过滤,导致数据丢失。 支持目标数据库中的表比源数据库多列场景,但是需要避免以下场景可能导致的任务失败。 目标端多的列要求非空且没有默认值,源端insert数据,同步到目标端后多的列为null,不符合目标端要求。 目标端多的列设置固定默认值,且有唯一约束。源端insert多条数据后,同步到目标端后多的列为固定默认值,不符合目标端要求。 在源端,同一个database(schema)下面的不同表可以存在相同的索引名或约束名。而目标端GaussDB(DWS)中,同一个schema中索引和约束名是唯一的,且长度存在上限。为防止索引和约束名冲突,DRS同步到目标表上的索引名称将变为此格式:哈希值+原索引名(可能被截断)+_key。其中哈希值由“原库名_原表名_原索引名”计算得到。同理,表上的原约束名将变为:哈希值+原约束名(可能被截断)+_key,或表名_原索引名。 任务创建后,源数据库不支持增加逻辑库或修改旧逻辑库关联新的RDS,否则会导致数据无法正常同步或任务失败。 任务再编辑时,对新添加的表,在再编辑变更过程中禁止大批量导数据,建议在业务低峰期进行再编辑操作。
  • 使用建议 DRS任务启动和全量数据同步阶段,请不要在源数据库执行DDL操作,否则可能导致任务异常。 为保证同步前后数据一致性,确保同步期间目标数据库无业务写入。 数据库同步与环境多样性和人为操作均有密切关系,为了确保同步的平顺,建议您在进行正式的数据库同步之前进行一次演练,可以帮助您提前发现问题并解决问题。 基于以下原因,建议您在启动任务时选择“稍后启动”功能,将启动时间设置在业务低峰期,相对静止的数据可以有效提升一次性同步成功率,避免同步对业务造成性能影响。 在网络无瓶颈的情况下,全量同步会对源数据库增加约50MB/s的查询压力,以及占用2~4个CPU。 正在同步的数据被其他事务长时间锁死,可能导致读数据超时。 DRS并发读取数据库,会占用大约6-10个session连接数,需要考虑该连接数对业务的影响。 全量阶段读取表数据时,特别是大表的读取,可能会阻塞业务上对大表的独占锁操作。 更多DRS对数据库的影响,可参考DRS对源数据库和目标数据库有什么影响。 数据对比 建议您结合数据对比的“稍后启动”功能,选择业务低峰期进行数据对比,以便得到更为具有参考性的对比结果。由于同步具有轻微的时差,在数据持续操作过程中进行对比任务,可能会出现少量数据不一致对比结果,从而失去参考意义。
  • 使用建议 DRS任务启动和全量数据同步阶段,请不要在源数据库执行DDL操作,否则可能导致任务异常。 为保证同步前后数据一致性,确保同步期间目标数据库无业务写入。 数据库同步与环境多样性和人为操作均有密切关系,为了确保同步的平顺,建议您在进行正式的数据库同步之前进行一次演练,可以帮助您提前发现问题并解决问题。 基于以下原因,建议您在启动任务时选择“稍后启动”功能,将启动时间设置在业务低峰期,相对静止的数据可以有效提升一次性同步成功率,避免同步对业务造成性能影响。 在网络无瓶颈的情况下,全量同步会对源数据库增加约50MB/s的查询压力,以及占用2~4个CPU。 正在同步的数据被其他事务长时间锁死,可能导致读数据超时。 DRS并发读取数据库,会占用大约6-10个session连接数,需要考虑该连接数对业务的影响。 全量阶段读取表数据时,特别是大表的读取,可能会阻塞业务上对大表的独占锁操作。 更多DRS对数据库的影响,可参考DRS对源数据库和目标数据库有什么影响。 数据对比 建议您结合数据对比的“稍后启动”功能,选择业务低峰期进行数据对比,以便得到更为具有参考性的对比结果。由于同步具有轻微的时差,在数据持续操作过程中进行对比任务,可能会出现少量数据不一致对比结果,从而失去参考意义。
  • 数据库用户权限要求 在使用DRS进行同步时,连接源库和目标库的数据库用户需要满足以下权限要求,才能启动实时同步任务。不同类型的同步任务,需要的用户权限也不同,详细可参考表3进行赋权。DRS会在“预检查”阶段对数据库用户权限进行自动检查,并给出处理建议。 建议创建单独用于DRS任务连接的数据库账号,避免因为数据库账号密码修改,导致的任务连接失败。 连接源和目标数据库的账号密码修改后,请尽快修改DRS任务中的连接信息,避免任务连接失败后自动重试,导致数据库账号被锁定影响使用。 表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工具参考》。
  • schema映射 schema指数据库对象的集合,这个集合包含了各种对象如:表、视图、存储过程、索引等。 实时同步过程中,如果待同步的schema在源数据库和目标数据库中的名称不同,可以使用实时同步提供的schema映射功能进行schema名映射。例如:将源数据库中的schemaA同步到目标数据库,变成目标数据库中的schemaB,此时就可以使用schema映射功能来实现。 在“设定同步”页面,同步对象右侧已选对象框中,选择需要进行映射的schema,单击“编辑”按钮。 图4 schema映射 修改schema名。 在“编辑schema名”的弹出框中,填写新的schema名,修改后的名称即为保存在目标数据库中的schema名。 图5 修改schema名 查看修改结果。 schema名修改成功后,您会看到修改前的schema名和修改后的新schema名,至此,表示完成schema映射的配置。 图6 查看schema修改结果
  • 表映射 实时同步过程中,如果待同步的表在源数据库和目标数据库中的名称不同,可以使用实时同步提供的表映射功能进行表名映射。例如:将源数据库中的A表同步到目标数据库,变成目标数据库中的B表,此时就可以使用表映射功能来实现。 在“设定同步”页面,同步对象右侧已选对象框中,选择需要进行映射的表,单击“编辑”按钮。 图7 表映射 修改表名。 在“编辑表名”的弹出框中,填写新的表名,修改后的名称即为保存在目标数据库中的表名。 图8 修改表名 查看修改结果。 表名修改成功后,您会看到修改前的表名和修改后的新表名,至此,表示完成表映射的配置。 图9 查看表名修改结果
  • 库映射 实时同步过程中,如果待同步的库在源数据库和目标数据库中存储名称不同,可以使用实时同步提供的库映射功能进行库名映射。例如:将源数据库中的A库同步到目标数据库,变成目标数据库中的B库,此时就可以使用库映射功能来实现。 在“设定同步”页面,同步对象右侧已选对象框中,选择需要进行映射的数据库,单击“编辑”按钮。 图1 库映射 修改库名。 在“编辑库名”的弹出框中,填写新的数据库名,修改后的名称即为保存在目标数据库中的库名。 图2 修改库名 查看修改结果。 库名修改成功后,您会看到修改前的库名和修改后的新数据库名,至此,表示完成库映射的配置。 图3 查看库名修改结果
  • 使用建议 DRS任务启动和全量数据同步阶段,请不要在源数据库执行DDL操作,否则可能导致任务异常。 为保证同步前后数据一致性,确保同步期间目标数据库无业务写入。 数据库同步与环境多样性和人为操作均有密切关系,为了确保同步的平顺,建议您在进行正式的数据库同步之前进行一次演练,可以帮助您提前发现问题并解决问题。 建议您在启动任务时选择“稍后启动”功能,将启动时间设置在业务低峰期,避免同步对业务造成性能影响。如果同步不可避免业务高峰期,推荐使用同步限速功能,即“流速模式”选择“限速”。 在网络无瓶颈的情况下,全量同步会对源数据库增加约50MB/s的查询压力,以及占用2~4个CPU。 同步无主键表时,会存在3s以内的单表级锁定。 DRS并发读取数据库,会占用大约6-10个session连接数,需要考虑该连接数对业务的影响。 全量阶段读取表数据时,特别是大表的读取,可能会阻塞业务上对大表的独占锁操作。 更多DRS对数据库的影响,可参考DRS对源数据库和目标数据库有什么影响。
  • 使用建议 DRS任务启动和全量数据同步阶段,请不要在源数据库执行DDL操作,否则可能导致任务异常。 为保证同步前后数据一致性,确保同步期间目标数据库无业务写入。 数据库同步与环境多样性和人为操作均有密切关系,为了确保同步的平顺,建议您在进行正式的数据库同步之前进行一次演练,可以帮助您提前发现问题并解决问题。 基于以下原因,建议您在启动任务时选择“稍后启动”功能,将启动时间设置在业务低峰期,相对静止的数据可以有效提升一次性同步成功率,避免同步对业务造成性能影响。 在网络无瓶颈的情况下,全量同步会对源数据库增加约50MB/s的查询压力,以及占用2~4个CPU。 正在同步的数据被其他事务长时间锁死,可能导致读数据超时。 DRS并发读取数据库,会占用大约6-10个session连接数,需要考虑该连接数对业务的影响。 全量阶段读取表数据时,特别是大表的读取,可能会阻塞业务上对大表的独占锁操作。 更多DRS对数据库的影响,可参考DRS对源数据库和目标数据库有什么影响。 数据对比 建议您结合数据对比的“稍后启动”功能,选择业务低峰期进行数据对比,以便得到更为具有参考性的对比结果。由于同步具有轻微的时差,在数据持续操作过程中进行对比任务,可能会出现少量数据不一致对比结果,从而失去参考意义。
  • 数据库账号权限要求 在使用DRS进行同步时,连接源库和目标库的数据库账号需要满足以下权限要求,才能启动实时同步任务。不同类型的同步任务,需要的账号权限也不同,详细可参考表3进行赋权。DRS会在“预检查”阶段对数据库账号权限进行自动检查,并给出处理建议。 建议创建单独用于DRS任务连接的数据库账号,避免因为数据库账号密码修改,导致的任务连接失败。 连接源和目标数据库的账号密码修改后,请尽快修改DRS任务中的连接信息,避免任务连接失败后自动重试,导致数据库账号被锁定影响使用。 表3 数据库账号权限 类型名称 全量+增量同步 源数据库连接账号 最少需要具备sysadmin权限,或者view server state权限以及待同步数据库的db_datareader或db_owner权限。 目标数据库连接账号 如果库不存在,需要对库级别开启create any database权限; 如果库存在需要库级别开启connect,create table,alter any schema 和select权限。
共100000条