dm同步时丢失更新

为提高效率,提问时请提供以下信息,问题描述清晰可优先响应。

  • 【TiDB 版本】:v3.0.5
    dm版本
Release Version: v1.0.0-alpha-69-g5134ad1
Git Commit Hash: 5134ad19fbf6c57da0c7af548f5ca2a890bddbe4
Git Branch: master
UTC Build Time: 2019-04-29 09:36:59
Go Version: go version go1.12 linux/amd64
  • 【问题描述】:
    通过使用DM,从mysql同步数据到tidb,期间tidb应该是发生了异常,导致有两具update丢失更新:

dm日志异常执行抛出来的sql已经正常执行,就是payment_system.pay_order的id为676880002,但是这个id insert后有update语句,没有正常执行。导致tidb最终数据与上游mysql数据不一致。
676880002 这条记录变更时间点:

#200212  8:42:06

update
#200212  8:43:25   @13=1
#200212  8:43:28   @13=3

dm日志如下:
dm.log (45.2 KB)

查看 dm.log 日志看到涉及到 id 为 676880002 的语句在更新时出现了 error,具体报错信息为:invalid connection。可以参考文档 https://pingcap.com/docs-cn/stable/reference/tools/data-migration/troubleshoot/error-handling/#同步任务中断并包含-invalid-connection-错误 来处理。

异常后,dm自动恢复了,但是最终有数据丢失。

#200212  8:43:25   @13=1
#200212  8:43:28   @13=3

如上两具binlog并没有同步过去

出现 invalid connection 报错时可能会丢数据(发送一部分数据到下游,然后链接中断),具体原因可以看上面文档,如果错误中仅包含 invalid connection 类型的错误且当前处于增量复制阶段,则 DM 会自动进行重试。在 DM 恢复正常之后,是不会再产生丢数据问题。在报错阶段出现的数据问题可能需要手动补。

连接也是dm自动重连恢复的,还是存在了丢失数据。报错阶段出现的那几个异常的sql,我确认了是正常同步了,异常sql之后的两个update确实是没有同步到tidb,不知道是什么导致的。日志中也没有说明跳过了。我看异常后,rollback到checkpoint的点,是在丢失的数据之前的, 不知道为什么还丢失更新了。

这个版本不太稳定,可能会遇到一些问题,推荐使用 DM ga 版本。

好的,那我尝试升级下

先升级在同步看下是否有同样问题,欢迎提问。

现在使用就有风险了,扫了下之前的日志,有很多次报了invalid connection 异常的,基本上都是自己恢复的。不确认是否有丢失数据的情况。:sweat_smile:

换稳定的 GA 版本:grinning:

目前稳定版本是: v1.0.3吧

GA 之后相对都稳定些,可以用 1.0.3 。

好的,感谢

:+1:

已经升级了

mysql没有使用gtid的情况下,如果上游发生变化 ,重启后会从新的上游最老的binlog开始同步?这个不能中之前的checkpoint的binlog 点同步吗?

再问一个问题,没有gtid的情况下,如何安全切换上游mysql。 改dm_meta里表的为global的mysqlbin位置点吗?

relay_log目前变化规则否是start-task后,会自动生成: 上游uuid.当前序号+1 是吗?

新问题建议重新开个帖子 ,辛苦。

更新后,还是发现有数据丢失了。

200219 8:00:15 这个时间对insert的,

200219 8:00:26 一次update,status改为1

200219 8:00:28 一次update ,status必为3

当前数据只有第一次insert的数据,后面两次update在tidb中没有生效。

dm-work日志:

[2020/02/19 08:04:58.871 +08:00] [ERROR] [db.go:272] 这个时间报[error="[code=10006:class=database:scope=not-set:level=high] execute statement failed: commit: invalid connection"] [2020/02/19 08:04:58.918 +08:00] [ERROR] [subtask.go:255] [“unit process error”] [subtask=task_payment] [unit=Sync] [“error information”="{“Type”:1,“msg”:"[code=10006:class=database:scope=not-set:level=high] execute statement failed: commit: invalid connection\ngithub.com/pingcap/dm/pkg/terror.(*Error).Delegate\ \t/home/jenkins/agent/workspace/build_dm_master/go/src/github.com/pingcap/dm/pkg/terror/terror.go:267\ngithub.com/pingcap/dm/pkg/conn.(*BaseConn).ExecuteSQLWithIgnoreError\ \t/home/jenkins/agent/workspace/build_dm_master/go/src/github.com/pingcap/dm/pkg/conn/baseconn.go:187\ngithub.com/pingcap/dm/syncer.(*DBConn).executeSQLWithIgnore.func2\ \t/home/jenkins/agent/workspace/build_dm_master/go/src/github.com/pingcap/dm/syncer/db.go:260\ngithub.com/pingcap/dm/pkg/retry.(*FiniteRetryStrategy).Apply\ \t/home/jenkins/agent/workspace/build_dm_master/go/src/github.com/pingcap/dm/pkg/retry/strategy.go:71\ngithub.com/pingcap/dm/pkg/conn.(*BaseConn).ApplyRetryStrategy\ \t/home/jenkins/agent/workspace/build_dm_master/go/src/github.com/pingcap/dm/pkg/conn/baseconn.go:203\ngithub.com/pingcap/dm/syncer.(*DBConn).executeSQLWithIgnore\ \t/home/jenkins/agent/workspace/build_dm_master/go/src/github.com/pingcap/dm/syncer/db.go:255\ngithub.com/pingcap/dm/syncer.(*DBConn).executeSQL\ \t/home/jenkins/agent/workspace/build_dm_master/go/src/github.com/pingcap/dm/syncer/db.go:282\ngithub.com/pingcap/dm/syncer.(*Syncer).sync.func3\ \t/home/jenkins/agent/workspace/build_dm_master/go/src/github.com/pingcap/dm/syncer/syncer.go:979\ngithub.com/pingcap/dm/syncer.(*Syncer).sync\ \t/home/jenkins/agent/workspace/build_dm_master/go/src/github.com/pingcap/dm/syncer/syncer.go:1021\ngithub.com/pingcap/dm/syncer.(*Syncer).Run.func2\ \t/home/jenkins/agent/workspace/build_dm_master/go/src/github.com/pingcap/dm/syncer/syncer.go:1092\ runtime.goexit\ \t/usr/local/go/src/runtime/asm_amd64.s:1357",“error”:{“ErrCode”:10006,“ErrClass”:1,“ErrLevel”:3,“Message”:“execute statement failed: commit: invalid connection”,“RawCause”:“invalid connection”}}"]

这个时间段对应的 tidb.log 信息有异常吗?