操作场景
数据同步过程中,当用户勾选对象时,可以选择库对象、表对象的级别,也可以选择到列的级别,本文为您介绍列级别的数据同步。
适用范围
MySQL/MariaDB/Percona/TDSQL-C MySQL 相互之间的数据同步链路。
约束限制
1. 主键、唯一键的列不支持过滤。系统默认会将主键、唯一键的列同步到目标端。特殊情况下如果主键、唯一键被过滤,前置校验会报错。
2. 如果过滤的列是联合主键、外键、分区列,或者过滤列中包含索引,则源端不支持对该列进行 DML 操作,否则任务可能会报错。
3. 列过滤与视图的交互说明如下:
如果同步对象中勾选了视图,则视图相关列数据需要一并同步,不能过滤,否则任务会报错。
如果同步对象中勾选了视图,后续源库在创建视图时关联的是系统库表,则不能在同步任务中同时再使用列过滤,否则任务会报错。
4. Rename 操作与列过滤功能交互的特殊说明如下:
表 A 进行了列过滤,然后源端删除了表 A,又重新创建了一个结构完全相同的表 A,这种场景的同步结果,新创建的表 A 依然会进行列过滤。
表 A 进行了列过滤,然后源端删除了表 A,再将表 B Rename 为表 A,A 和 B 的表结构相同,这种场景,从源端解析的 DDL 仍是表 A,所以同步结果中,列过滤规则仍生效。
5. 配置列过滤后,不支持再修改同步配置;修改同步配置时,也不支持对列进行过滤。
6. 列过滤与 Where 条件过滤的交互说明如下:
如果一个表进行了列过滤,用户同时还对该表设置 Where 规则,需要用户自行保证输入 Where 规则中的列名,包含在待同步的表中,否则 Where 规则可以设置成功,但后续任务启动后会报错。
7. 如果对表 A 的 X 列进行了列过滤,用户在源端执行 CREATE TABLE table_B like table_A 语句,建议对表 B 的 X 列也进行过滤。在这种场景下 DTS 对表 B 的同步会按照表 A 列过滤后的表结构,如果未对表 B 的 X 列进行过滤,后续源端对表 B 的 X 列进行数据更新时,DTS 任务会报错。
8. 如果表对象中唯一键列包含函数,则同步对象勾选该表时,无法展开到列的维度,不能进行列过滤。
9. 仅选择同步数据,不同步表结构的场景,要求用户在 DTS 任务前,在目标端创建相同的表结构;如果任务还需要设置列过滤,则用户在目标端创建的表结构为列过滤后的表结构,否则同步到目标端可能会报错。
操作步骤
1. 登录 DTS 控制台,在左侧导航选择数据同步页,创建同步任务。
2. 在设置同步源和目标数据库步骤,左侧源库对象中,可以选择表级别、列级别的数据,勾选后单击
,右侧即可显示待同步的对象。