Percona 小箱里的pt-archiver
在管理线上数据库,时常要做一些数据归档操作,在没有了解 Percona toolkit
之前,第一个想到的是在夜深人静的时候使用 MySqlDump
来完成这件事情。但它不是我们的优质选择,理由有:
MySqlDump
只能备份在本机,不能直接做远端备份- 导出数据量太大的时候会锁表, 即使它的速度很快,但是在线上服务这是很危险的操作
- 它仅仅只能导出,无法做到同时删除(可能不是太有必要)
面对上述的场景,Percona Toolkit
让DBA 有了更好地选择,pt-archiver 应时而生。
pt-archiver 介绍:
根据官方文档的说法,几乎不会对线上的OTLP操作有影响:
The goal is a low-impact, forward-only job to nibble old data out of the table without impacting OLTP queries much
它可以帮助我们将数据归档到文件, 另一个数据库,或者同一个数据库的另一个表, 亦或是用于合并两个表的内容。
用法介绍:
1 | pt-archiver [OPTION...] --source DSN --where WHERE |
归档的文件方便使用 load data infile 命令导入数据。另外你还可以用它来执行 delete 操作。这个工具默认的会删除源中的数据,使用的时候请注意。
假如我们将数据库里符合条件的记录归档到文件,并不做删除操作。
1 | pt-archiver --ask-pass --progress 100000 --no-delete --no-check-charset --source h=localhost,u=root,D=blog,t=comment--file /home/ubuntu/tmp/comment--where 'time < "2013-12-31h"' |
注意的选项参数:
1 | --ask-pass 提示要求输密码 |
小总结
通过开启 mysql 的 general log
, 可以发现pt-archiver 执行时,是分批commit 的事务,因此执行效率会慢,在8核16G 内存的生产环境机器备份 1kw 条记录, 耗时150 分钟。 但基本不对服务造成影响,而且可以不用深夜进行, 值得一用。
最近攒了好多好工具和经验,要好好整理搬上来和大家分享才是。