云服务器内容精选

  • MySQL或MariaDB不同版本之间的语法差异 对于源数据库和目标数据库的版本有差异的迁移和同步链路,由于不同版本之间的部分特性差异,可能会出现语法兼容性问题。 DRS接收到的源数据库Binlog日志中里保存的是原始的执行SQL语句,这些SQL语句将会直接在目标数据库中执行,如果目标数据库对于源数据库中执行SQL中有不支持的语法约束,那么DRS任务将会报错并失败。 例如以下几种源数据库和目标数据库的语法不兼容的场景(非全部场景): 源数据库MySQL 5.7.34版本中执行create table t1 (id int, c1 varchar(16), FULLTEXT INDEX (c1 ASC)) ENGINE = INNODB创建表结构的DDL,该DDL在源数据库Binlog保存的为以上原生SQL,增量过程中在目标数据库MySQL 8.0.27版本中执行会报错,错误信息为“1221 - Incorrect usage of spatial/fulltext/hash index and explicit index order”, 错误原因为目标数据库MySQL 8.0.27版本不支持在全文索引上加排序语法规则。 源数据库MariaDB 10.5.8版本执行create table t1(id INT, c1 VARCHAR(32)) ENGINE = INNODB DEFAULT CHARSET = utf8mb4 COLLATE = utf8mb4_nopad_bin创建表结构的DDL,该DDL在源数据库Binlog保存的为以上原生SQL,增量过程中在目标数据库MySQL 8.0.27版本中执行会报错,错误信息为“1273 - Unknown collation: 'utf8mb4_nopad_bin'”,错误原因为目标数据库MySQL 8.0.27版本不支持utf8mb4_nopad_bin排序字符集。 源数据库MariaDB 10.5.8版本执行 create table t1(c1 INT, c2 VARCHAR(32) NOT NULL DEFAULT UUID()) ENGINE = INNODB创建表结构的DDL,该DDL在源数据库Binlog保存的为以上原生SQL,增量过程中在目标数据库MySQL 8.0.27版本中执行会报错,错误信息为“1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near UUID()”,错误原因为目标数据库MySQL 8.0.27版本不支持默认值为UUID()函数。 源数据库MariaDB 10.5.8版本执行 create table t1(c1 int, c2 inet6) ENGINE = INNODB 创建表结构的DDL,该DDL在源数据库Binlog保存的为以上原生SQL,增量过程中在目标数据库MySQL 8.0.27版本中执行会报错,错误信息为“1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near inet6”,错误原因为目标数据库MySQL 8.0.27版本不支持inet6类型。 父主题: 实时同步
  • 场景描述 全量同步期间DRS任务报错,同步日志界面提示:service DATAMOVE failed, cause by: apply event=[type=table_data, batch_index_in_shard=%s, table_schema=%s, table_name=%s, record_num=%s] occur error, msg=apply table %s data failed: %s: ERROR: column '%s' of relation '%s' does not exist Position: 1043 Call getNextException to see other errors in the batch.
  • 可能原因 报错信息中包含detail:Read timed out:DRS启动任务后,DRS增量抓取在源端数据库创建逻辑复制槽时由于长事务阻塞,或者创建逻辑复制槽的过程中数据库未找到一致性位点,等待创建超时。 报错信息中包含slot [***] is active: DRS启动任务后,DRS增量抓取在源端数据库创建逻辑复制槽时由于长事务阻塞,复制槽未创建成功,此时状态会显示被占用(active),DRS自动重试时会出现此类报错。
  • 解决方案 修改位于$ORACLE_HOME/network/admin目录的sqlnet.ora文件,允许DRS任务IP访问。 如果使用白名单,则TCP.INVITED_NODES配置项中需要包含DRS的任务IP。 如果使用黑名单,则TCP.EXCLUDED_NODES中不能包含DRS的任务IP。 查看源数据库信息(例如IP,端口,或者service name/sid)是否发生修改,如果源库信息发生改变,可选择以下操作: 恢复修改的源数据库信息,DRS任务会自动重试继续同步任务。 重新创建任务进行同步。 执行以下命令查看源数据库连接数,连接数已经达到上限。 查看当前连接数: select count(*) from v$process; 查看最大连接数: select value from v$parameter where name ='processes'; 如果源数据库连接已达到上限,执行以下命令修改数据库允许的最大连接数: alter system set processes = 300 scope = spfile; 然后重启数据库生效。
  • 场景描述 Oracle为源全量或增量同步期间DRS任务报错,同步日志界面提示:service LOG MANAGER failed, cause by: Unable to connect to DBMS: url=jdbc:oracle:thin:@(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=*.*.*.*)(PORT=1521))(CONNECT_DATA=*)) user=*, Caused by: IO Error: Got minus one from a read call.
  • 可能原因 报错信息中包含detail:Read timed out:DRS启动任务后,DRS增量抓取在源端数据库创建逻辑复制槽时由于长事务阻塞,或者创建逻辑复制槽的过程中数据库未找到一致性位点,等待创建超时。 报错信息中包含slot [***] is active: DRS启动任务后,DRS增量抓取在源端数据库创建逻辑复制槽时由于长事务阻塞,复制槽未创建成功,此时状态会显示被占用(active),DRS自动重试时会出现此类报错。
  • 接口约束 任务创建成功之后,任务状态为CONFIGURATION,并且与源库和目标库测试连接通过、修改任务接口调用成功后才能调用。 支持设置Kafka同步策略的有:PostgreSQL-Kafka同步,Oracle-Kafka同步, GaussDB -Kafka同步,GaussDB(for MySQL)-Kafka,MySQL-Kafka。 GaussDB(for MySQL)-Kafka,MySQL-Kafka支持任务状态为INCRE_TRANSFER_STARTED时修改Kafka策略配置,修改配置后需等任务状态为INCRE_TRANSFER_STARTED时再进行编辑同步对象操作。
  • 响应参数 状态码: 200 表5 响应Body参数 参数 参数类型 描述 count Integer 总数。 results Array of objects 批量设置同步策略返回列表。 详情请参见表6。 表6 results字段数据结构说明 参数 参数类型 描述 id String 任务ID。 status String 状态。取值: success:成功。 failed:失败。 error_code String 错误码。 error_msg String 错误信息。
  • 请求示例 批量设置同步任务策略,其中增量冲突策略为忽略,同步增量DDL并过滤drop_database操作 https://{endpoint}/v3/054ba152d480d55b2f5dc0069e7ddef0/jobs/batch-sync-policy { "jobs": [{ "conflict_policy": "ignore", "ddl_trans": true, "filter_ddl_policy": "drop_database", "index_trans": true, "job_id": "19557d51-1ee6-4507-97a6-8f69164jb201" }] } 批量设置MySQL单增量同步任务策略示例: https://{endpoint}/v3/054ba152d480d55b2f5dc0069e7ddef0/jobs/batch-sync-policy { "jobs": [ { "conflict_policy": "ignore", "ddl_trans": true, "filter_ddl_policy": "drop_database", "index_trans": true, "job_id": "19557d51-1ee6-4507-97a6-8f69164jb201", "file_and_position": "mysql-bin.000019:197", "gtid_set":"e4979f26-4bc3-11ee-b279-fa163ef21d64:1-23" } ] }
  • 同步Topic和Partition策略说明 表3 Topic和Partition策略说明 Topic策略 对应可选的Partition策略 说明 集中投递到一个Topic: 对于源库业务量不大的场景,建议选择集中投递到一个Topic。 按库名.schema.表名的hash值投递到不同Partition 适用于单表的查询场景,可以提高单表读写性能,推荐使用此选项。 全部投递到Partition 0 适用于有事务要求的场景,写入性能比较差,如果没有强事务要求,不推荐使用此选项。 按表的主键值hash值投递到不同的Partition 适用于一个表一个Topic的场景,避免该表都写到同一个分区,消费者可以并行从各分区获取数据。 按库名.schema的hash值投递到不同Partition 适用于一个database一个topic的场景,避免多个schema下的数据都写到一个分区,消费者可以并行从各分区获取数据。 按表的非主键列值的hash值投递到不同的Partition 适用于一个表一个Topic的场景,避免该表都写到同一个分区,用户可以按照非主键列值的hash值自定义message key,消费者可以并行从各分区获取数据。 按库名-schema-表名自动生成Topic名字: 如果每张表数据量都非常大,建议选择自动生成Topic名字,按库名-schema-表名确定一个Topic。 全部投递到Partition 0 适用于有事务要求的场景,写入性能比较差,如果没有强事务要求,不推荐使用此选项。 按表的主键值hash值投递到不同的Partition 适用于一个表一个Topic的场景,避免该表都写到同一个分区,消费者可以并行从各分区获取数据。 按表的非主键列值的hash值投递到不同的Partition 适用于一个表一个Topic的场景,避免该表都写到同一个分区,用户可以按照非主键列值的hash值自定义message key,消费者可以并行从各分区获取数据。 按库名自动生成Topic名字: 对于源库数据量量不大的场景,可以选择一个database自动生成Topic名字,按库名确定一个Topic。 按库名.schema.表名的hash值投递到不同Partition 适用于单表的查询场景,可以提高单表读写性能,推荐使用此选项。 全部投递到Partition 0 适用于有事务要求的场景,写入性能比较差,如果没有强事务要求,不推荐使用此选项。 按库名.schema的hash值投递到不同Partition 适用于一个database一个topic的场景,避免多个schema下的数据写到一个分区,消费者可以并行从各分区获取数据。 按库名-schema自动生成Topic名字: 如果每个schema数据量都非常大,建议选择按库名-schema自动生成Topic名字,按库名-schema确定一个Topic。 按库名.schema.表名的hash值投递到不同Partition 适用于单表的查询场景,可以提高单表读写性能,推荐使用此选项。 全部投递到Partition 0 适用于有事务要求的场景,写入性能比较差,如果没有强事务要求,不推荐使用此选项。
  • 资源规划 表1 资源规划 类别 子类 规划 备注 VPC VPC名称 vpc-DRStest 自定义,易理解可识别。 子网网段 10.0.0.0/24 子网选择时建议预留足够网络资源 所属Region 华南-广州 选择和自己业务区最近的Region,减少网络时延。 子网名称 subnet-drs01 自定义,易理解可识别。 GaussDB(源库) 实例名 drs-gaussdb-src-1 自定义,易理解可识别。 数据库版本 GaussDB 8.1.0 - 实例类型 主备版 参考 GaussDB数据库 类型说明,选择适合自己业务的库类型。 存储 超高IO GaussDB支持“超高IO”存储类型,最大吞吐量为350MB/S。 规格 通用型 4 vCPUs | 16 GB 根据自己业务承载选择规格。 Kafka(目标端) Kafka实例名 kafka-drs 自定义,易理解可识别。 版本 2.3.0 - 可用区 可用区三 可选择1个或者3个及以上可用区。实际业务场景推荐选择创建在不同的可用区,提升业务可靠性。 规格 c6.2u4g.cluster - 代理个数 3 - 存储空间 高I/O,200GB 存储空间主要用于存储消息(包含副本,Kafka默认使用3副本),除了存储消息外还需要预留部分空间用于存储日志和元数据。 DRS同步任务 同步任务名 DRS-GaussDBToKafka 自定义。 源数据库引擎 GaussDB主备版 - 目标数据库引擎 Kafka 本示例中目标数据库为Kafka 网络类型 VPC网络 创建任务的时候选择“VPN、专线网络”。
  • 同步到GaussDB(DWS)的方案选型 同步性能是搭建同步链路时重点关注因素之一,同步性能涉及数据模型、源库负载、目标库负载、带宽延迟、DRS能力上限等,各局点的情况无法统一。 表1是DRS常见规格的性能上限参考,创建链路时需要结合客户数据模型和场景选择合适的DRS规格。 表1 规格性能上限 规格名称 增量性能上限(行/秒)参考 极小 300 小 3000 中 7500 大 10000 超大 20000 极大 大于20000 GaussDB(DWS)的规格说明可参考这里。 父主题: 实时同步
  • 场景描述 增量同步期间DRS任务报错,同步日志界面提示: service INCREMENT failed, cause by: Check whether dws supports the DDL. For support, please contact dws Services. DDL:alter table gltest01.t_pk4 add column a3 int after c1. failed by:ERROR: FIRST/AFTER is not yet supported.
  • 请求示例 批量设置同步任务策略,其中增量冲突策略为忽略,同步增量DDL并过滤drop_database操作 https://{endpoint}/v3/054ba152d480d55b2f5dc0069e7ddef0/jobs/batch-sync-policy { "jobs": [{ "conflict_policy": "ignore", "ddl_trans": true, "filter_ddl_policy": "drop_database", "index_trans": true, "job_id": "19557d51-1ee6-4507-97a6-8f69164jb201" }] }
  • 场景描述 全量同步期间DRS任务报错,同步日志界面提示:service DATAMOVE failed, cause by: apply event=[type=table_data, batch_index_in_shard=1, table_schema=%s, table_name=%s, record_num=%s] occur error, msg=Table %s.%s not found in database. Unable to generate a valid statement.