Dumpling 备份数据重复

【概述】
使用 dumpling 导出 sql文件后查看,存在重复的数据

【业务影响】
备份数据就不正确了!
【TiDB 版本】
v4.0.12

你说的唯一字段是设置了unique吗,用你搜索的这个字段值去数据库中查一下看看结果呢?

对的,这个字段是唯一的,而且数据库中只有一条数据!

执行导出的命令麻烦再发一下

./dumpling -h 192.168.0.123 -P 5002 -u abc -p abc123 -B table_name -t 4 -o /data/tidb-backup/backup_data_test/backup_tablename/

【注】 -h 192.168.0.123 是一台 haproxy 服务器,用来做负载均衡,端口是 5002

sql文件里面值相同的那两句SQL是否完全一致呢

是的,我比对过,数据是一模一样的,因为我要把这个备份的数据导入到mysql中,导入过程中出现了唯一键重复的问题,我才查看了一下这个备份的文件,发现了这个问题

辛苦在 dumpling 命令行中加上 --where 以及开启 debug 指定导出这个 PK 的数据。看看是否备份出来两行数据?
https://docs.pingcap.com/zh/tidb/stable/dumpling-overview#筛选导出的数据

1赞

您好,我使用 --where 条件之后,的确只有一条数据,而且数据与数据库中的一致!
1.下面是备份的日志
image
2.下面是导出的sql文件中的内容

  • 再全量 dumpling 导出这个表的数据能复现重复的问题嘛?如果可以的话麻烦 grep 一下看看两行重复的数据有没有字段差异?

感谢您的指导,我刚才又操作了一遍,发现这个字段其中有一个 后面多了一个空格,在导出的时候,dumpling把空格去掉了,所以导致存在重复的问题。感谢您的指导,这个问题应该就解决了

2赞

您好我本地尝试复现了下这个问题发现无法复现,dumpling 也没有 trim 空格类似的逻辑。请问方便发一下脱敏后的表结构帮助我们调查一下这个问题吗?

您好,出现问题的是 cust_taxcode 这个栏位
CREATE TABLE base_enterprise123 (
id varchar(64) NOT NULL COMMENT ‘数据id’,
cust_taxcode varchar(20) NOT NULL,
cust_name varchar(250) NOT NULL,
cust_type varchar(1) NOT NULL ,
disktype varchar(1) NOT NULL ,
szsf_id varchar(64) NOT NULL ,
szcs_id varchar(64) NOT NULL ,
szqx_id varchar(64) NOT NULL,
szsf_mc varchar(100) DEFAULT NULL,
szcs_mc varchar(100) DEFAULT NULL,
szqx_mc varchar(100) DEFAULT NULL,
create_time datetime NOT NULL,
update_time datetime DEFAULT NULL,
update_remark varchar(200) DEFAULT NULL,
PRIMARY KEY (id),
UNIQUE KEY unique_taxcode (cust_taxcode)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin;

不对,应该是我描述有点问题:在使用dumpling导出的时候数据的空格仍然存在,但是在使用 loader 将数据导入到mysql中的时候,空格被trim 掉了

sql 文件中还是有空格的,但是导入的时候 loader 自动把空格 trim 了导致了报错,这个理解对吗?
能再方便问下导入工具使用的是 loader 还是 tidb-lightning 呢?感谢

对的对的,因为 我 cust_taxcode 设置的是唯一,在loader 执行过程中报出的这个唯一键冲突。

1赞

了解了,感谢!