actiontech / dtle

Distributed Data Transfer Service for MySQL
https://actiontech.github.io/dtle-docs-cn
Mozilla Public License 2.0
551 stars 133 forks source link

mysql to mysql最新数据未同步 #1059

Closed lenovore closed 1 year ago

lenovore commented 1 year ago

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"
                        }
                    }
                ]
            }
        ]
    }
}
ghost commented 1 year ago

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

lenovore commented 1 year ago

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

lenovore commented 1 year ago

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

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

lenovore commented 1 year ago

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

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

lenovore commented 1 year ago

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

ghost commented 1 year ago

暂不考虑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.

ghost commented 1 year ago