选择同步对象

选择同步对象用于确定当前作业的同步范围。Teleport 会按照数据源的对象层级展示 Database、Schema、Table 等对象,并将选择结果保存为 includesexcludes 规则。源端新增表后,只要表名仍在这些规则定义的范围内,就会自动同步。

选择页面

页面以树形结构展示源端对象。不同数据源的层级可能不同,例如:

  • MySQL:Database → TABLES → Table
  • PostgreSQL / ProtonBase:Database → Schema → TABLES → Table
  • MongoDB:Database → COLLECTIONS → Collection

页面顶部提供以下操作:

  • 全选:选中当前页面中可选择的对象。
  • 全不选:取消选中当前页面中可选择的对象。
  • 预览:按照当前配置重新展示最终同步名单。进入下一步前,建议通过预览确认实际选中的对象。

选择同步对象界面示意

对于需要预先分析消息结构的部分 Kafka 协议,页面还会显示“重新分析 Schema”和“增量分析 Schema”,具体说明参见Kafka Schema 分析

includesexcludes

同一对象层级使用 includesexcludes 表达同步范围:

规则含义新增表的行为
includes白名单,只同步精确名称或正则命中的对象精确名称以外的新表不进入范围;命中正则的新表自动进入范围
excludes黑名单,同步未被排除的对象未命中排除项的新表自动进入范围

例如:

  • includes = [orders, users]:只同步 ordersusers
  • includes = [regexp_match(SOURCE_OBJECT, '^order_[0-9]+$')]:同步当前及以后新增的所有 order_数字 表。
  • excludes = [tmp_orders]:除了 tmp_orders 之外,当前及以后新增的其他表都在同步范围内。

页面上的勾选、排除和正则挑选会自动生成这些规则,不需要手工编辑配置。判断新增表是否会同步时,需要从 Database、Schema 到 Table 逐级检查其是否在同步范围内。

精确选择对象

逐级选择

展开对象树,通过对象名称前的复选框选择或排除 Database、Schema 和 Table。

  • 取消选择上级对象后,其下级对象不会进入同步名单。
  • TABLES 等分组节点支持一次选择或排除该节点下的全部对象。
  • 分组节点处于半选状态时,表示其下只有部分对象被选中。

对象范围较小且长期固定时,建议逐表明确选择,避免临时表、历史表或其他无关对象进入同步名单。

搜索后选择

在对象分组节点上点击“搜索”,可以按照名称关键字过滤当前显示的对象。搜索不区分大小写,只改变页面显示,不会修改已有选择状态。

搜索后可以勾选所需对象,也可以使用页面顶部的“全选”或“全不选”批量操作当前显示的对象。关闭搜索后,未显示对象原有的选择状态仍会保留。

框选

需要连续调整多项时,可以在对象树中拖动框选。框选会切换命中对象的选择状态:原来已选中的对象会被取消,原来未选中的对象会被选中。

使用正则批量挑选表

正则挑选适合表数量较多、并且表名具有稳定规律的场景,例如分表、按日期建表或使用统一业务前缀的表。

正则的作用范围

正则入口位于每个 TABLES 节点旁边。点击“正则挑选”后,规则只匹配当前路径下的表:

  • MySQL 中,规则只作用于当前 Database 下的表。
  • PostgreSQL / ProtonBase 中,规则只作用于当前 Database 和 Schema 下的表。

新版界面不再分别填写 Database 正则和 Table 正则。如果多个 Database 或 Schema 都需要相同规则,需要分别在对应的 TABLES 节点下配置。

填写规则

输入框中只需要填写裸正则,界面会自动将其保存为:

regexp_match(SOURCE_OBJECT, '${正则表达式}')

例如:

需求输入的正则
匹配 order_20260801 这类日期表^order_[0-9]{8}$
匹配所有 order_ 前缀表^order_.*$
只匹配 ordersrefunds^(orders|refunds)$
匹配以数字结尾的分表^sale_[0-9]+$

匹配采用全表名匹配,并按照数据源的对象名称规则处理大小写。建议使用 ^$ 明确匹配边界,使规则意图更容易阅读。

查看实时预览

输入规则后,弹窗会实时显示:

  • 每条规则的命中数量和命中的表。
  • 所有规则合计命中的表数。
  • 未被任何规则命中的表。
  • 同时被多条规则命中的冲突表。

界面还会根据当前表名提供最多若干条智能推荐,例如数字后缀、日期后缀或公共前缀规则。点击推荐项可将其加入规则列表,应用前仍应检查实际命中结果。

正则挑选与实时预览界面示意

避免规则冲突

同一张表最多只能被一条正则规则命中。多条规则同时命中同一张表时,该表应该继承哪一组表级属性和映射规则并不明确,作业会报错。

例如,以下两条规则都会命中 order_20260801,不能同时使用:

^order_.*$
^order_[0-9]{8}$

发生冲突时,应删除范围过大的规则,或调整规则使各自的命中集合互不重叠。

应用正则规则

点击确定后,当前 TABLES 节点会转为按同步名单选择:

  • 正则命中的表归入对应的正则节点。
  • 原来已选中但没有被正则命中的表仍会以精确表名保留,不会因为应用正则而丢失。
  • 未被正则命中且原来未选中的表,仍不会加入同步名单。
  • 保存后的正则会持续作为 includes 规则使用,以后新增且命中该正则的表也会自动进入同步范围。

正则节点会显示完整的 regexp_match(SOURCE_OBJECT, '...') 表达式,命中的表以只读子节点展示。可以在正则节点上统一设置同步属性和映射规则,让当前规则内的表继承相同配置。

删除一条正则规则时,该规则原先命中的表会恢复为精确表名并保持选中,不会直接从同步名单中删除;以后新增的同类表则不再受这条正则覆盖。如果不再需要当前这些表,还需要取消选择对应的表。

正则规则最佳实践

  • 先在具体的 Database 或 Schema 下缩小范围,再配置表名正则。
  • 优先使用能够表达完整命名约束的规则,例如 ^order_[0-9]{8}$,避免直接使用 .*
  • 每添加或修改一条规则,都检查命中数量、未命中列表和冲突提示。
  • 在正则节点上配置目标表映射时,普通同名同步应保留 SOURCE_OBJECT,不要把所有表映射到同一个固定表名。
  • 只有明确的分库分表合并场景才将多张源表映射到同一目标表,并提前检查表结构、主键和唯一索引是否兼容。
  • 保存后运行预检查,并在表映射列表中确认每张源表的最终目标位置。

映射规则的详细语法请参见设置映射规则。分表合并请参见数据同步分库分表最佳实践

新增表的匹配行为

对于包含增量同步的作业,源端新增表会使用作业中已经保存的对象规则进行匹配:

  1. 新表所在的 Database 和 Schema 必须在同步范围内。
  2. 表级使用 excludes 时,只要新表没有被排除,就会自动同步。
  3. 表级使用 includes 时,新表名必须命中其中一条正则规则;仅配置精确表名不会匹配其他新表。
  4. 命中正则的新表会继承正则节点上的同步属性和映射规则。

因此,如果业务会持续创建 order_日期 一类的表,建议使用范围准确的正则 includes,而不是逐张填写当前已有表名。开放范围同时要求同步账户具有读取未来新表的权限;预检查发现权限只覆盖当前表时会给出相应提示。

Kafka Schema 分析

对于 Canal JSON、Canal Protobuf、OGG JSON 等需要从消息中分析表结构的 Kafka 协议,“选择同步对象”页面提供:

  • 重新分析 Schema:清除已有分析结果,重新分析整个 Schema。
  • 增量分析 Schema:加入新发现的表、覆盖已有表的分析结果,并保留其他表。

这类协议的可同步表集合同时受 Schema 分析结果和 includes / excludes 约束。新增 Kafka 表时,应先执行“增量分析 Schema”,让系统获得完整字段结构;随后,只要新表命中已有对象规则,就会进入同步范围。

保存前检查

进入下一步前,点击“预览”并确认:

  • 需要同步的 Database、Schema 和 Table 都已出现。
  • 临时表、历史表和其他无关对象没有进入同步名单。
  • 正则规则没有冲突或意外扩大命中范围。
  • includes / excludes 对未来新增表的匹配范围符合预期。
  • 对象数量与预期一致。

保存对象范围后,如果继续修改连接、同步对象、属性或映射规则,应重新运行预检查。