actiontech/dtle

mysql to mysql最新数据未同步

lenovore opened this issue · 7 comments

Description

使用docker部署,拉取的镜像 actiontech/dtle:4.23.04.1。
阿里云RDS5.6同步到RDS5.7,全量同步完,增量同步追上master后,部分源表最新的一些数据(几条-几十条不等)一直都没有同步到目的表。在这期间,源表无写入操作,但就是不同步了。

比如:s_track.track_work_0全量+增量完后,最新的11条记录未同步到t_track.track_work_0表,然后过了几分钟s_track.track_work_0表写入了一些数据,那11条未同步的数据又同步过去了。但是后续s_track.track_work_0表有新数据写入,又出现部分最新数据未同步。

按照默认配置,不应该是实时全部同步的嘛。
image

之前拉取的actiontech/dtle:4.23.04.0镜像没出现过这样的问题。

Job配置

{
	"Job": {
		"ID": "dtle-track",
		"Datacenters": [
			"dc1"
		],
		"TaskGroups": [
			{
				"Name": "src",
				"Tasks": [
					{
						"Name": "src",
						"Driver": "dtle",
						"Config": {
							"Gtid": "",
							"ChunkSize": 5000,                                                    
							"ReplicateDoDb": [
								{
									"TableSchema": "s_track",
									"TableSchemaRename": "t_track",
									"Tables": [
										{
											"TableName": "track_work_0"
										},
										{
											"TableName": "track_work_1"
										},
										{
											"TableName": "track_work_2"
										},
										{
											"TableName": "track_work_3"
										},
										{
											"TableName": "track_work_4"
										},
										{
											"TableName": "track_work_5"
										},
										{
											"TableName": "track_work_6"
										},
										{
											"TableName": "track_work_7"
										},
										{
											"TableName": "track_record"
										}
									]
								}
							],
							"SrcConnectionConfig": {
								...
							},
							"DestConnectionConfig": {
								...
							}
						}
					}
				]
			},
			{
				"Name": "dest",
				"Tasks": [
					{
						"Name": "dest",
						"Driver": "dtle",
						"Config": {
							"DestType": "mysql"
						}
					}
				]
			}
		]
	}
}

需要设置log_level=debug,复现,并提供日志。

dtle.log
开启debug,看日志没发现啥异常的。

这个日志是我换了镜像版本(actiontech/dtle:4.22.11.0)后的debug日志,结果也是一样,最新的数据就是不到目的表。

我之前是整库同步的,是没问题的,这次就是有重命名库并只同步部分表。

使用4.23.04.2版本,查看日志一直有警告信息
[WARN] reader: mysql.reader: QueryEvent is not recognized. will still execute: job=dtle-track query=COMMIT gno=89248399

增量阶段最新数据还是没同步

猜测原因是rds5.6实例从库不支持复制

暂不考虑MySQL 5.6方面的修复.

但query event COMMIT是如何发生的, 以及代码上的支持需要考虑.

[WARN] reader: mysql.reader: QueryEvent is not recognized. will still execute: job=dtle-track query=COMMIT gno=89248399

理论上MyISAM表会出现query event COMMIT, 但aliRDS应该不支持MyISAM.

  • 开通ali "RDS 5.6常规实例 (高可用版)".
    • 未开通读写分离.
  • 只给了一个连接地址&端口.
  • 连上后show slave status显示Running: Yes. 同时可执行写语句.
    • 所以不清楚连接的是RDS主实例还是从实例. 抑或是其并未使用MySQL原生复制.
  • 使用dtle复制到本地MySQL 8.0, 一切正常