下游数据库是TIDB 4.0版本,上游是mysql 5.6,之前使用dm-ansible部署的dm1.0上同步数据没有出现这个问题。12月3日后升级到2.0版本,并通过import将之前的任务和配置导入了tiup,随后发现,在开启事务后下游的TIDB数据库丢失了数据,详细情况如下:
1.上游数据库和下游数据库已在线,部署了dm-worker并通过start-task开启了同步任务,子任务状态为running,sync为true,显示已经追上,此时新建一个表:
CREATE TABLE `t_test_cycle_plan` (
`id` bigint(20) NOT NULL AUTO_INCREMENT,
`create_time` datetime DEFAULT NULL,
`modify_time` datetime DEFAULT NULL,
`memo` varchar(5000) DEFAULT NULL,
`planned_begin_time` date NOT NULL,
`planned_end_time` date NOT NULL,
`status` int(11) DEFAULT NULL,
`creator` bigint(20) DEFAULT NULL,
`modifier` bigint(20) DEFAULT NULL,
`test_cycle` bigint(20) DEFAULT NULL,
`tester` bigint(20) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=10000 DEFAULT CHARSET=utf8;
该DDL操作可以正常同步到下游的TIDB数据库,然后向上游表中插入数据,sql如下:
start transaction;
INSERT INTO t_test_cycle_plan (create_time,creator,modifier,modify_time,memo,planned_begin_time,planned_end_time,status,test_cycle_tester) VALUES ('2020-12-10 11:16:53', NULL,NULL,NULL,NULL,'2020-12-10','2020-12-11',1,59293,2098);
INSERT INTO t_test_cycle_plan (create_time,creator,modifier,modify_time,memo,planned_begin_time,planned_end_time,status,test_cycle_tester) VALUES ('2020-12-10 11:16:53', NULL,NULL,NULL,NULL,'2020-12-10','2020-12-11',1,59293,2098);
INSERT INTO t_test_cycle_plan (create_time,creator,modifier,modify_time,memo,planned_begin_time,planned_end_time,status,test_cycle_tester) VALUES ('2020-12-10 11:16:53', NULL,NULL,NULL,NULL,'2020-12-10','2020-12-11',1,59293,2098);
commit;
半小时后
在上游数据库查询:
SELECT * FROM t_test_cycle_plan WHERE test_cycle = 59293;
上游数据库显示:
id crewate_time modify_time memo planned_begin_time planned_end_time status creator modifier test_cycle tester
453165 2020-12-10 11:16:53 NULL NULL 2020-12-10 2020-12-11 1 NULL NULL 59293 2098
453166 2020-12-10 11:16:53 NULL NULL 2020-12-10 2020-12-11 1 NULL NULL 59293 2098
453167 2020-12-10 11:16:53 NULL NULL 2020-12-10 2020-12-11 1 NULL NULL 59293 2098
下游数据库显示:
id crewate_time modify_time memo planned_begin_time planned_end_time status creator modifier test_cycle tester
453165 2020-12-10 11:16:53 NULL NULL 2020-12-10 2020-12-11 1 NULL NULL 59293 2098
dm-worker开启了debug日志级别,且上游mysql的binlog可以看到三条INSERT INTO t_test_cycle_plan记录,但是dm-worker日志上只有第一条的INSERT INTO记录,从查询结果上看,同事务的后面两个sql没有同步,debug日志也没有报错。
这个任务在1.0版本上执行时没有出现这个问题,最近升级的2.0才出现,而且,尝试创建的新的任务,也会丢失同事务的后续操作,只有第一个sql会执行。