一 介绍
pt-archiver的原理主要是根据定义的时间间隔(sleep参数),扫描要清理的数据表。它按照指定的规则分批(limit参数)将查询到的记录转移到其他表或文件中,发现它是按主键去删除的表数据,对数据库影响很小。
二 语法
/bin/pt-archiver --source S=socket文件路径,D=库名,t=表名,u=root,p=密码 --charset=utf8mb4 --dest S=socket文件路径,D=库名,t=表名,u=root,p=密码 --charset=utf8mb4 --where "where条件" --no-delete --limit 3000 --commit-each --progress 3000 --sleep 1 --statistics
--no-delete表示只是将source端的数据复制到目标表里,但不删除source端的表数据。
如果需要清理归档数据,需要去掉命令行中 --no-delete 参数。一般归档的话,去掉--no-delete的比较多,相当于剪切。
三 示例
3.1、把baidd.t1部分表数据(id>10)复制到baidd.t1_bak_240417里。
3.1.1 先提前建好空表表结构
create table baidd.t1_bak_240417 like baidd.t1;
3.1.2 归档
pt-archiver --source S=/data/mysql/data/mysql.sock,D=baidd,t=t1,u=root,p=密码 --charset=utf8mb4 --dest S=/data/mysql/data/mysql.sock,D=baidd,t=t1_bak_240417,u=root,p=密码 --charset=utf8mb4 --where "id>10" --no-delete --limit 3000 --commit-each --progress 3000 --sleep 1 --statistics
3.2、把baidd.t1部分表数据(id>10)剪切到baidd.t1_bak_24041714里
去掉--no-delete参数
3.2.1 先提前建好空表表结构
create table baidd.t1_bak_24041714 like baidd.t1;
3.2.2 归档
pt-archiver --source S=/data/mysql/data/mysql.sock,D=baidd,t=t1,u=root,p=密码 --charset=utf8mb4 --dest S=/data/mysql/data/mysql.sock,D=baidd,t=t1_bak_24041714,u=root,p=密码 --charset=utf8mb4 --where "id>10" --limit 3000 --commit-each --progress 3000 --sleep 1 --statistics
示例: