云服务器内容精选

  • 数据库账号权限要求 在使用DRS进行同步时,连接源库和目标库的数据库账号需要满足以下权限要求,才能启动实时同步任务。不同类型的同步任务,需要的账号权限也不同,详细可参考表3进行赋权。DRS会在“预检查”阶段对数据库账号权限进行自动检查,并给出处理建议。 建议创建单独用于DRS任务连接的数据库账号,避免因为数据库账号密码修改,导致的任务连接失败。 连接源和目标数据库的账号密码修改后,请参考修改连接信息章节修改DRS任务的连接信息,避免任务连接失败后自动重试,导致数据库账号被锁定影响使用。 表3 数据库账号权限 类型名称 增量同步 源数据库连接账号 数据库的CONNECT权限,模式的USAGE权限,表的SELECT权限,REPLICATION连接权限。
  • 使用须知 DRS增量同步任务一般包含三个阶段:任务启动阶段、增量阶段、结束任务阶段。为了确保同步各个阶段的平顺,在创建同步任务前,请务必阅读以下使用须知。 表4 使用须知 类型名称 使用和操作约定 任务启动前须知 源数据库要求: 源数据库参数wal_level必须配置为logical; 源数据库需提前安装test_decoding插件; 源数据库中无主键表的replica identity属性必须为full; 源数据库的max_replication_slots参数值必须大于当前已使用的复制槽数量; 源数据库的max_wal_senders参数值必须等于或大于max_replication_slots参数值。 源数据库中表的主键列toast属性为main、external、extended时,其replica identity属性必须为full。 目标数据库要求: 目标库为社区Kafka。 Kafka的auto.create.topics.enable参数建议为false。 其他使用须知: 若专属计算集群不支持4vCPU/8G或以上规格实例,则无法创建同步任务。 库级同步时,增量同步中的任务,不支持“编辑”操作。 表级同步时,增量同步中的任务,支持“编辑”操作,但是不支持更换数据库。 在启动任务前,请确保源库中未启动长事务,源库启动长事务会阻塞逻辑复制槽的创建,进而引发任务失败。 在任务启动后,仅支持以下版本的源库发生主备倒换:源库为RDS for PostgreSQL 12.6及以上的小版本、RDS for PostgreSQL 13及以上版本的所有小版本。 由于长事务导致的创建逻辑复制槽失败或逻辑复制槽不存在的问题,需要通过重置任务来重新启动。 增量同步过程须知 请勿修改源库和目标库的端口号,请勿修改、删除源库和目标库连接用户的密码、权限,否则可能导致任务失败。 请勿删除源数据库表的主键,否则可能导致增量数据缺失或任务失败。 请勿修改源数据库中表的replica identity属性,否则可能导致增量数据缺失或任务失败。 请勿在Kafka上删除接收DRS数据的topic,否则可能导致任务失败。 库级同步时,源库新增无主键表时,请务必同时将该无主键表的replica identity属性设置为full,然后再写入数据,否则可能导致增量数据缺失或任务失败。 库级同步时,源库新增主键表时,如果主键列toast属性为main、external、extended时,请务必同时将该表的replica identity属性设置为full,然后再写入数据,否则可能导致数据不一致或任务失败。 增量同步过程中暂停、任务异常续传,目标Kafka中可能会出现重复数据,请使用Kafka数据中的id字段进行去重。 结束任务须知 正常结束任务: 全量+增量实时同步任务正常结束时,将自动删除任务在源库创建的流复制槽。 强制结束任务: 强制结束全量+增量实时同步任务,需要手动删除源库可能残留的复制槽,可参考PostgreSQL为源强制结束任务章节的指导进行操作。 逻辑复制槽命名规则为“drs_唯一性标识”,其中唯一性标识需要将任务node id中的“-”替换为“_”获取。node id可在DRS任务同步日志页面查看task node id is ***日志找到。
  • 注意事项 为保证任务的正常运行,DRS提供了自动化的检查方法,在您启动DRS任务前,会针对源数据库和目标数据库的相关配置、条件进行检查。主要的检查项和对应的处理建议请参考预检查项。除了预检查项目之外,您还需要注意的事情参见表4。 表4 注意事项 类型名称 使用和操作限制 源数据库限制 不支持reset master或reset master to命令,可能会导致DRS任务失败或者数据不一致。 如果源数据库MySQL不支持TLS1.2协议,或者为版本较低的自建库(低于5.6.46或在5.7.0-5.7.28之间),需提交运维申请才能使用SSL测试连接。 使用限制 通用: 不允许源数据库进行恢复操作。 任务启动、任务全量同步阶段,不建议做删除类型的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类型有CREATE_TABLE,RENAME_TABLE,ADD_COLUMN,RENAME_COLUMN,MODIFY_COLUMN,CHANGE_COLUMN,ALTER_COLUMN,DROP_INDEX,RENAME_INDEX,客户可以根据自身需求,在对象选择页面选择需要同步的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。 源库表同步至目标库后分布方式为哈希分布,暂不支持复制分布。 源库为RDS for MySQ L实例 时,不支持带有TDE特性并建立具有加密功能表。 在创建DRS任务之前,如果源数据库实例开启并设置了SQL限流规则,可能会导致DRS任务失败。 网络中断在30秒内恢复的,不影响实时同步,如果超过30秒,则会导致同步任务失败。 支持目标数据库中的表比源数据库多列场景,但是需要避免以下场景可能导致的任务失败。 目标数据库多的列要求非空且没有默认值,源库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")内置的处理方式不同,当进行内容对比时,如果源、目标数据库存在零时间,对比结果会显示数据不一致。 源数据库MySQL的表中存如果在定长的binary字段,MySQL驱动会在数据末尾按照长度补齐\0,可能导致同步到目标库GaussDB后出现数据不一致的情况。 源数据库如果存在非标浮点类型,且非标浮点类型存在宽松模式可以写入但严格模式下无法写入的数据,同步过程可能会有数据不一致的风险。 不支持两阶段事务。 源数据库同步的表如果有AUTO_INCREMENT属性,结束任务时,DRS会自动刷新同步表的序列整型列所对应的GaussDB自增列(sequence)起始值,刷新值为该列的最大值+10000。