云服务器内容精选

  • 可能原因 报错信息中包含detail:Read timed out:DRS启动任务后,DRS增量抓取在源端数据库创建逻辑复制槽时由于长事务阻塞,或者创建逻辑复制槽的过程中数据库未找到一致性位点,等待创建超时。 报错信息中包含slot [***] is active: DRS启动任务后,DRS增量抓取在源端数据库创建逻辑复制槽时由于长事务阻塞,复制槽未创建成功,此时状态会显示被占用(active),DRS自动重试时会出现此类报错。
  • 可能原因 报错信息中包含detail:Read timed out:DRS启动任务后,DRS增量抓取在源端数据库创建逻辑复制槽时由于长事务阻塞,或者创建逻辑复制槽的过程中数据库未找到一致性位点,等待创建超时。 报错信息中包含slot [***] is active: DRS启动任务后,DRS增量抓取在源端数据库创建逻辑复制槽时由于长事务阻塞,复制槽未创建成功,此时状态会显示被占用(active),DRS自动重试时会出现此类报错。
  • 同步到GaussDB(DWS)的方案选型 同步性能是搭建同步链路时重点关注因素之一,同步性能涉及数据模型、源库负载、目标库负载、带宽延迟、DRS能力上限等,各局点的情况无法统一。 表1是DRS常见规格的性能上限参考,创建链路时需要结合客户数据模型和场景选择合适的DRS规格。 表1 规格性能上限 规格名称 性能上限(行/秒)参考 极小 300 小 3000 中 7500 大 10000 超大 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.
  • 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支持多表对一的数据聚合场景,最佳实践是推荐只选择同步加列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约束是类似的。
  • 接口约束 任务创建成功之后,任务状态为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" } ] }
  • 请求示例 批量设置同步任务策略,其中增量冲突策略为忽略,同步增量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" }] }
  • URI PUT /v3/{project_id}/job/{job_id}/tuning-params/modify-params 表1 路径参数 参数 是否必选 参数类型 描述 project_id 是 String 租户在某一Region下的Project ID。 获取方法请参见获取项目ID。 job_id 是 String 租户在某一Region下的Job ID,如果是主备任务,使用父任务ID。 获取方法请参见获取任务ID。
  • 响应参数 状态码: 200 表4 响应Body参数 参数 参数类型 描述 full_sync Array of objects 全量调优参数。 详情请参见表5。 incre_capture Array of objects 增量抓取调优参数。 详情请参见表5 TuningParameterfull_sync、incre_capture、incre_apply和incre_relay字段数据结构说明。 incre_apply Array of objects 增量回放调优参数。 详情请参见表5 TuningParameterfull_sync、incre_capture、incre_apply和incre_relay字段数据结构说明。 incre_relay Array of objects 增量日志拉取调优参数。 详情请参见表5 TuningParameterfull_sync、incre_capture、incre_apply和incre_relay字段数据结构说明。 modify_result String 参数修改是否成功。 表5 full_sync、incre_capture、incre_apply和incre_relay字段数据结构说明 参数 参数类型 描述 param_name String 参数名称 param_value String 参数取值 availability String 是否可用
  • 响应示例 状态码: 200 OK { "full_sync" : [ ], "incre_capture" : [ ], "incre_apply" : [ ], "incre_relay" : [ { "param_name" : "slotAdvanceInterval", "param_value" : "5" } ], "modify_result" : "success"}
  • 请求示例 GaussDB主备版到kafka任务设置指定源库逻辑复制槽推进间隔 https://{endpoint}/v3/054c06d8aa00d39e2f6cc00176952b8b/job/1e3f710f-4df3-4fc9-8a29-0ec72c5jb2b3/tuning-params/modify-params{ "incre_relay" : { "slotAdvanceInterval" : "5" }} 初始化高级参数 https://{endpoint}/v3/054c06d8aa00d39e2f6cc00176952b8b/job/1e3f710f-4df3-4fc9-8a29-0ec72c5jb2b3/tuning-params/modify-params{ "recovery" : true}
  • 源库Oracle为RAC集群时,为什么建议使用SCAN IP连接 源库Oracle为RAC集群时,建议使用SCAN IP+ SERVICE_NAMES方式创建任务,因为SCAN IP具有更强的容错性,更好的负载能力,更快的同步体验。 如果需要使用SCAN IP,需要保证SCAN IP与源库的所有VIP互通,否则无法通过测试连接检查。 若不使用SCAN IP,可以使用某一节点的VIP,其他节点异常不影响同步。 关于SCAN IP的说明,可参考Oracle官网文档。 父主题: 实时同步