1.问题描述
tidb在使用pt-archive工具进行归档过程中,删除数据和插入数据问题不对等,
2.测试验证:
测试场景一:--bulk-insert --bulk-delete && i=created_date_channel
归档前数据:
需要归档的数据为:1076706 条
归当前目标端数据清空
归档脚本
pt-archiver --no-version-check --source h=
xxxx,P=xxxx,u=xxxx,D=test,t=order,A=utf8mb4,i=created_date_channel,p='xxxx' --dest h=xxxx,P= xxx,u=xxxxx,D=test,t=mytest20220629,A=utf8mb4,p='xxxxx' --charset=UTF8 --where "created_date<'2022-02-01 00:00:00'" --progress 10000 --limit=10000 --txn-size=10000 --run-time=5h --bulk-insert --bulk-delete –statistics
归档后,目标端数据:1076672
源端数据:任然有34条数据没有归档完成
在源端查询这34条数据中取一条在目标端比对,发现在目标端已经存在
再次手动执行归档脚本
发现这次只delete没有insert操作
最终结果是源端删除了1076706条数据,目标端插入了1076672,最终归档结果是归档数据丢失了34条数据。
另外:测试2次,第一次少34条数据,第二次少44条数据
另外还有一个问题
加bulk-insert 的时候 如果插入有重复值 不会抛出异常,而是直接进行数据删除
测试场景二 不带索引
归档前,数据和场景一一致
pt-archiver --no-version-check --source h=xxxxx,P= xxx,u=xxx,D=xxxx,t=order,A=utf8mb4 ,p='xxxx' --dest h=xxxx,P=xxxx,u=xxxxx,D=test,t=mytest20220629,A=utf8mb4,p='xxxx' --charset=UTF8 --where "created_date<'2022-02-01 00:00:00'" --progress 10000 --limit=10000 --txn-size=10000 --bulk-insert --bulk-delete --statistics
测试结果:插入和删除数据一致,2次测试结果都一样。
3.解决办法
修改pt-archive 工具代码,在指定index归档的前提条件下,强制使delete sql走索引
如下所示,红色方框为要添加的内容