pt archiver挂起最后剩下的行

icomxhvb  于 2021-06-21  发布在  Mysql
关注(0)|答案(3)|浏览(451)

我试图用pt archiver清除mysql表,但遇到了一个奇怪的问题。
假设下面的查询返回60789行。

SELECT COUNT(*) FROM abc WHERE created_at BETWEEN '2008-09-01 00:00:00' AND '2008-09-05 23:59:59';

我使用以下pt archiver语法来清除行。

/usr/local/bin/pt-archiver --source h=localhost,u=root,p=abcdef,D=cbs_production,t=abc \
--where "created_at >= '2008-09-01 00:00:00' AND created_at <= '2008-09-05 23:59:59'" \
--purge --sleep-coef 1.0 --txn-size 1000 --progress=1000 --statistics

因此,它开始在每次迭代中删除1000行,但当它完成61000行时,它将永远挂起,并且不会删除剩余的789行。
我尝试了以下版本的percona工具包。pt archiver 3.0.9和pt archiver 3.0.10
我也参考了以下帖子,但没有任何效果。
https://bugs.launchpad.net/percona-toolkit/+bug/1096274
https://bugs.launchpad.net/percona-toolkit/+bug/1583498
https://bugs.launchpad.net/percona-toolkit/+bug/1193474

fquxozlt

fquxozlt1#

我不知道一个人能有多容易搞清楚主键 id 要传递给 pt-archiver 脚本。
更合适的解决方案是更新 pt-archiver 此线程中描述的脚本:https://bugs.launchpad.net/percona-toolkit/+bug/1193474/comments/4

rkttyhzu

rkttyhzu2#

我无法重现你面临的问题:

$ pt-archiver --version
pt-archiver 3.0.9

是否可以发送您的mysql版本和表结构?

SHOW CREATE TABLE <table_name>\G
SELECT @@version;
omtl5h9j

omtl5h9j3#

谢谢@vinicius。我发现了问题所在。
我使用了--where语句,如下所示。

--where "created_at >= '2008-09-01 00:00:00' AND created_at <= '2008-09-05 23:59:59'"

当我使用“created\u at”时,pt archiver在最后一个事务中永远卡住了。然后我决定在--where语句中使用表的主键“id”,如下所示。

--where "id>=18689121 AND id<=19998441"

所以有了“身份证”,阿奇弗的工作就完美无瑕了。
我不知道为什么它不能与时间戳一起工作,但当使用“id”时问题就解决了。

相关问题