dmctl同步数据错误

【 TiDB 使用环境】
V5.1
dmctl v2.0.4

【概述】 场景 + 问题概述
使用dmctl进行的数据表同步,应该是有人修改了表结构,导致ddl语句报错。然后同步一直报错。

【备份和数据迁移策略逻辑】

使用dmctl进行的数据表同步

【背景】 做过哪些操作
不太确定

【问题】 当前遇到的问题
使用dmctl进行的数据表同步,应该是有人修改了表结构,导致ddl语句报错。然后同步一直报错。
防止错误扩散直接进行了如下操作:
1.tiup dmctl --master-addr 172.18.92.63:8261 stop-task taskName
2.TRUNCATE tableNames(把报错任务同步的表清空)
3.tiup dmctl --master-addr 172.18.92.63:8261 start-task taskName.yaml --remove-meta
就是删除任务,删除同步数据,重新同步

我同步的这几张表数据量比较小,可以这样紧急操作恢复,如果数据量大的话会影响大片的业务。
我想问一下除了这样操作来恢复任务,还有其它的方式吗?

【TiDB 版本】
V5.1

你好!

  1. 请问使用 DM 同步的上下游数据库具体类型是?比如 MySQL → DM → TiDB,这是 DM 工具官方推荐的使用场景,如果不是,建议使用其他工具代替。
  2. 同步报错,方便的话,可以贴下具体报错信息,以便分析。
    对于 DDL 语句,目前确实存在兼容性问题,这个可以参考: https://docs.pingcap.com/zh/tidb/v5.1/mysql-compatibility#ddl-的限制
  3. 同步中断,这个问题,其实和 MySQL 的主从复制类似,报错导致同步中断,只能具体问题具体分析。我这边实际生产中 DDL 兼容性问题导致同步中断出现最多,我们都是提前在非生产环境就解决了这个问题,这样上生产就不会有问题了。

我在同步的时候发现上游(MYSQL)DDL创建表的时候是utf32,TIDB不支持,我从上游修改了表结构。本质上TIDB是不支持ALTER的。但是我taks任务创建的时候已经指定同步的指定库下的所有了。也就是说alter 的表不在同步范围内,但是DM还是报错。集群是v5.2.2 ,DM也是最新的
Message信息如下
"Message": "startLocation: [position: (mysql-bin.000104, 663835581), gtid-set: ], endLocation: [position: (mysql-bin.000104, 663836285), gtid-set: ], origin SQL: [CREATE TABLEtb_sys_cron_task_out(idint(32) NOT NULL AUTO_INCREMENT,taskNamevarchar(255) CHARACTER SET utf32 DEFAULT NULL COMMENT '任务说明',cronvarchar(255) CHARACTER SET utf32 DEFAULT NULL COMMENT '定时任务时间',clazzvarchar(255) CHARACTER SET utf32 DEFAULT NULL COMMENT '定时任务执行类',enableint(1) DEFAULT '0' COMMENT '定时任务开关 0.关 1.开',daemonint(1) DEFAULT '1' COMMENT '表示调试线程是否设置为守护线程 0.false 1.true',entIdvarchar(64) DEFAULT NULL,PRIMARY KEY (id)) ENGINE=InnoDB AUTO_INCREMENT=137 DEFAULT CHARSET=utf8 COMMENT='定时任务表']: parse DDL: CREATE TABLEtb_sys_cron_task_out(idint(32) NOT NULL AUTO_INCREMENT,taskNamevarchar(255) CHARACTER SET utf32 DEFAULT NULL COMMENT '任务说明',cronvarchar(255) CHARACTER SET utf32 DEFAULT NULL COMMENT '定时任务时间',clazzvarchar(255) CHARACTER SET utf32 DEFAULT NULL COMMENT '定时任务执行类',enableint(1) DEFAULT '0' COMMENT '定时任务开关 0.关 1.开',daemonint(1) DEFAULT '1' COMMENT '表示调试线程是否设置为守护线程 0.false 1.true',entIdvarchar(64) DEFAULT NULL,PRIMARY KEY (id)) ENGINE=InnoDB AUTO_INCREMENT=137 DEFAULT CHARSET=utf8 COMMENT='定时任务表'", "RawCause": "[parser:1115]Unknown character set: 'utf32'", "Workaround": "Please confirm your DDL statement is correct and needed. For TiDB compatible DDL, see https://docs.pingcap.com/tidb/stable/mysql-compatibility#ddl. You can usehandle-errorcommand to skip or replace the DDL or add a binlog filter rule to ignore it if the DDL is not needed."

此话题已在最后回复的 1 分钟后被自动关闭。不再允许新回复。