博客文章除注明转载外,均为原创。转载请注明出处。
本文链接地址:http://blog.chinaunix.net/uid-31396856-id-5768514.html
pt-archiver功能:可以在线进行以下业务场景:
1.归档历史数据;
2.在线删除大批量数据;
3.数据导出和备份;
4.数据远程归档;
5.数据清理;
基本原理:
通过“过滤条件”,得在此范围内的PK的最大值和最小值 , 然后通过PK索引, 过滤条件 + pk <此范围的最大值 + pk >(此范围内pk的最小值+每次增长limit指定的数) + limit. 这样直到处理完成。
如果想详细了解pt-archiver原理,可以通过跟踪process list或者操作日志(略)更清晰的说明pt-archiver的执行过程。
参数说明:
--where‘id<3000‘ 设置操作条件
--limit10000 每次取1000行数据用pt-archive处理,Number of rows to fetch and archive per statement.
--txn-size 1000 设置1000行为一个事务提交一次,Number of rows pertransaction.
--progress 5000 每处理5000行输出一次处理信息
--statistics 结束的时候给出统计信息:开始的时间点,结束的时间点,查询的行数,归档的行数,删除的行数,以及各个阶段消耗的总的时间和比例,便于以此进行优化。只要不加上--quiet,默认情况下pt-archive都会输出执行过程的
--charset=UTF8 指定字符集为UTF8
--no-delete :表示不删除原来的数据,注意:如果不指定此参数,所有处理完成后,都会清理原表中的数据。
--bulk-delete 批量删除source上的旧数据(例如每次1000行的批量删除操作)
--bulk-insert 批量插入数据到dest主机 (看dest的general log发现它是通过在dest主机上LOAD DATA LOCAL INFILE插入数据的)
--replace 将insert into 语句改成replace写入到dest库
--sleep120 每次归档了limit个行记录后的休眠120秒(单位为秒)
--file ‘/root/test.txt‘ 输出为文件
--purge 删除source数据库的相关匹配记录
--header 输入列名称到首行(和--file一起使用)
--no-check-charset 不指定字符集
--check-columns 检验dest和source的表结构是否一致,不一致自动拒绝执行(不加这个参数也行。默认就是执行检查的)
--no-check-columns 不检验dest和source的表结构是否一致,不一致也执行(会导致dest上的无法与source匹配的列值被置为null或者0)
--chekc-interval 默认1s检查一次
--local 不把optimize或analyze操作写入到binlog里面(防止造成主从延迟巨大)
--retries 超时或者出现死锁的话,pt-archiver进行重试的间隔(默认1s)
--no-version-check 目前为止,发现部分pt工具对阿里云RDS操作必须加这个参数
--analyze=ds 操作结束后,优化表空间(d表示dest,s表示source)
默认情况下,pt-archiver操作结束后,不会对source、dest表执行analyze或optimize操作,因为这种操作费时间,并且需要你提前预估有足够的磁盘空间用于拷贝表。一般建议也是pt-archiver操作结束后,在业务低谷手动执行analyze table用以回收表空间。
[root@gddb01 backup]# pt-archiver --source h=localhost,P=3006,u=sys,p=mysqlpwd1,D=crmdk1,t=crm_price_detail_info --no-check-charset --where 'create_time < 1498838400' --purge --progres 50000 -
-limit=5000 --txn-size=1000 --run-time=3600 --statistics
TIME ELAPSED COUNT
2017-07-29T20:35:17 0 0
2017-07-29T20:35:38 21 50000
2017-07-29T20:35:58 41 100000
2017-07-29T20:36:19 62 150000
2017-07-29T20:36:39 82 200000
2017-07-29T20:36:58 101 250000
2017-07-29T20:37:17 120 300000
2017-07-29T20:37:37 139 350000
2017-07-29T20:37:55 158 400000
2017-07-29T20:38:15 178 450000
2017-07-29T20:38:35 197 500000
2017-07-29T20:38:54 217 550000
2017-07-29T20:39:15 238 600000
2017-07-29T20:39:35 258 650000
2017-07-29T20:39:55 278 700000
2017-07-29T20:40:16 299 750000
2017-07-29T20:40:36 319 800000
2017-07-29T20:40:58 341 850000
2017-07-29T20:41:22 365 900000
....................................................
2017-07-29T21:33:45 3507 7400000
2017-07-29T21:34:10 3533 7450000
2017-07-29T21:34:36 3559 7500000
2017-07-29T21:35:00 3583 7550000
2017-07-29T21:35:17 3600 7585061
Started at 2017-07-29T20:35:17, ended at 2017-07-29T21:35:17
Source: D=crmdk1,P=3006,h=localhost,p=...,t=crm_price_detail_info,u=sys
SELECT 7590000
INSERT 0
DELETE 7585061
Action Count Time Pct
deleting 7585061 2701.2191 75.03
select 1518 32.9257 0.91
commit 7586 10.3862 0.29
other 0 855.4700 23.76
---The end