为提高效率,请提供以下信息,问题描述清晰能够更快得到解决:
【TiDB 版本】
新TIDB版本:4.0.11(tiup安装)
老TIDB版本:3.0.3(ansible安装)
新的DM版本:2.0.1(tiup安装)
老的DM版本:1.0.6(ansible安装)
【环境描述】
4.0.11版本的TIDB通过DM2.0.1同步线上mysql数据
3.0.3版本的TIDB通过DM1.0.6同步线上mysql数据
数据源为同一套mysql
【问题描述】
现在新版本的DM在同步mysql数据时,偶尔会报Error 1062: Duplicate entry
报错内容如下:
[2021/05/14 15:38:32.750 +08:00] [ERROR] [db.go:274] [“execute statements failed after retry”] [task=online_auth_center] [unit=“binlog replication”] [queries=“[INSERT INTO auth_centerdb
.biz_user
(id
,global_id
,biz_id
,biz_user_id
,status
,ctime
,mtime
,creator
,modifier
) VALUES (?,?,?,?,?,?,?,?,?) DELETE FROM auth_centerdb
.biz_user
WHERE id
= ? LIMIT 1 INSERT INTO auth_centerdb
.user_update_record
(id
,global_id
,old_value
,new_value
,type
,client_id
,ctime
,creator
,creator_str
) VALUES (?,?,?,?,?,?,?,?,?)]”] [arguments=“[[133390683 7352147 6 57044843 0 1620969358041 1620977912711 0 0] [133370755] [2892313 7000000000008357128 7000000000008357128_6_57044843 7352147_6_57044843 12 iss_company 1620977912714 0 用户]]”] [error=“[code=10006:class=database:scope=not-set:level=high], Message: execute statement failed: commit, RawCause: Error 1062: Duplicate entry ‘57044843’ for key ‘uniq_biz_user_id’”]
这三条sql与研发沟通后,确认为包含在一个事务中,先delete掉一条数据,再insert两条数据。每天都会有执行,
DM2.0.1偶尔会报错:
“RawCause”: “Error 1062: Duplicate entry ‘57044843’ for key ‘uniq_biz_user_id’”
需要手动删除掉tidb中的duplicate数据,再resume才可以。
但是DM1.0.6却可以正常同步,dm-worker日志也没有任何ERROR和报警
奇怪的是在通过加了唯一索引的biz_user_id字段查询时,查不到该数据,通过id却可以查到。
如下:
(root@172.xx.xx.xx:)[xxxdb]> select * from biz_user where biz_user_id=57044843;
Empty set (0.00 sec)
(root@172.xx.xx.xx:)[xxxdb]> select * from biz_user where id=133390683;
±----------±----------±-------±------------±-------±--------------±--------------±--------±---------+
| id | global_id | biz_id | biz_user_id | status | ctime | mtime | creator | modifier |
±----------±----------±-------±------------±-------±--------------±--------------±--------±---------+
| 133390683 | 7352147 | 6 | 57044843 | 0 | 1620969358041 | 1620977912711 | 0 | 0 |
±----------±----------±-------±------------±-------±--------------±--------------±--------±---------+
1 row in set (0.00 sec)
表结构如下
CREATE TABLE biz_user
(
id
bigint(20) NOT NULL,
global_id
bigint(20) NOT NULL,
biz_id
bigint(20) NOT NULL ,
biz_user_id
bigint(20) NOT NULL DEFAULT ‘0’ ,
status
tinyint(2) NOT NULL DEFAULT ‘0’,
ctime
bigint(20) NOT NULL DEFAULT ‘0’ ,
mtime
bigint(20) NOT NULL DEFAULT ‘0’ ,
creator
bigint(20) NOT NULL DEFAULT ‘0’ ,
modifier
bigint(20) NOT NULL DEFAULT ‘0’ ,
PRIMARY KEY (id
),
UNIQUE KEY uniq_biz_user_id
(biz_user_id
),
KEY gid_biz
(global_id
,biz_id
)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin
若提问为性能优化、故障排查类问题,请下载脚本运行。终端输出的打印结果,请务必全选并复制粘贴上传。