beebol
(Beebol)
1
为提高效率,提问时请提供以下信息,问题描述清晰可优先响应。
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)
不懂就问
(zhouyueyue)
2
beebol
(Beebol)
3
异常后,dm自动恢复了,但是最终有数据丢失。
#200212 8:43:25 @13=1
#200212 8:43:28 @13=3
如上两具binlog并没有同步过去
不懂就问
(zhouyueyue)
4
出现 invalid connection 报错时可能会丢数据(发送一部分数据到下游,然后链接中断),具体原因可以看上面文档,如果错误中仅包含 invalid connection
类型的错误且当前处于增量复制阶段,则 DM 会自动进行重试。在 DM 恢复正常之后,是不会再产生丢数据问题。在报错阶段出现的数据问题可能需要手动补。
beebol
(Beebol)
5
连接也是dm自动重连恢复的,还是存在了丢失数据。报错阶段出现的那几个异常的sql,我确认了是正常同步了,异常sql之后的两个update确实是没有同步到tidb,不知道是什么导致的。日志中也没有说明跳过了。我看异常后,rollback到checkpoint的点,是在丢失的数据之前的, 不知道为什么还丢失更新了。
不懂就问
(zhouyueyue)
6
这个版本不太稳定,可能会遇到一些问题,推荐使用 DM ga 版本。
beebol
(Beebol)
9
现在使用就有风险了,扫了下之前的日志,有很多次报了invalid connection 异常的,基本上都是自己恢复的。不确认是否有丢失数据的情况。
beebol
(Beebol)
16
mysql没有使用gtid的情况下,如果上游发生变化 ,重启后会从新的上游最老的binlog开始同步?这个不能中之前的checkpoint的binlog 点同步吗?
beebol
(Beebol)
17
再问一个问题,没有gtid的情况下,如何安全切换上游mysql。
改dm_meta里表的为global的mysqlbin位置点吗?
relay_log目前变化规则否是start-task后,会自动生成: 上游uuid.当前序号+1 是吗?
beebol
(Beebol)
19
更新后,还是发现有数据丢失了。
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”}}"]
不懂就问
(zhouyueyue)
20
这个时间段对应的 tidb.log 信息有异常吗?