背景:
工作上需要删除或则归档一张大表,这时候用pt-archiver可以很好的满足要求,其不仅可以归档数据,还有删除、导出到文件等功能。并且在主从架构当中,可以兼顾从库(一个或则多个)进行归档,避免归档、删除数据时候压力太大,造成从库的延迟。该工具的目标是一个低影响,从表中剔除旧数据,而不会影响OLTP查询。也可以将数据插入到另一个表中,该表不必位于同一服务器上。
使用方法:
pt-archiver [OPTIONS] --source DSN --where WHERE
1)将所有行从oltp_server归档到olap_server并归档到文件:
pt-archiver --source h=oltp_server,D=test,t=tbl --dest h=olap_server \ --file '/var/log/archive/%Y-%m-%d-%D.%t' \ --where "1=1" --limit 1000 --commit-each
2)从子表中删除行:
pt-archiver --source h=host,D=db,t=child --purge \ --where 'NOT EXISTS(SELECT * FROM parent WHERE col=child.col)'
参数说明:注意:至少需要指定--dest,--file,--purge 其中的一个。
1:--source :指定要归档表的信息,兼容DSN选项。
a:执行查询时要使用的数据库。 b:如果为true,则使用SQL_LOG_BIN禁用binlog。 h:连接的MySQL主机名或IP地址。 D:连接时使用的默认数据库,可以在运行时使用不同的数据库。 t:要被归档、删除、导出的表。 i:进行归档、删除、导出时,被指定使用的索引。 p:连接时使用的MySQL密码。 P:连接时使用的MySQL端口。 S:用于连接的MySQL套接字文件(在Unix系统上)。 u:连接时使用的MySQL用户名。 L:启用LOAD DATA LOCAL INFILE。 A:连接MySQL的默认字符集(SET NAMES)。 F:通过配置文件读取用户名和密码,如配置了〜/ .my.cnf,就会自动连接工具而无需用户名或密码。格式为: [client] user=your_user_name pass=secret
此项指定一个表,pt-archiver将在其中插入从--source归档的行。 它使用与--source相同的参数格式。 大多数缺失值默认为与--source相同的值,因此不必重复--source和--dest中相同的选项。如果--source和--dest的用户名密码不一样,需要单独各自指定,并且注意F和S参数。
3:--analyze:在--source或--dest上运行ANALYZE TABLE。字母's',将分析来源。 如果它包含'd',则将分析目的地。 您可以指定其中一个或两个
--analyze=ds
4:--ascend-first:升序索引优化,提供最左索引(多列主键)的升序。
5:--no-ascend: 不要使用升序索引优化。注意多列主键索引。
6:--ask-pass:连接MySQL时提示输入密码。
7:--buffer:缓冲区输出到--file并在提交时刷新,每次事务提交禁止刷写到磁盘,有操作系统决定刷写。该参数可以提高刷写到文件的性能,但崩溃可能会有数据丢失。
8:--commit-each:控制事务大小,每次提取、归档就提交。禁用--txn-size。

