Chinaunix首页 | 论坛 | 博客
  • 博客访问: 781027
  • 博文数量: 99
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 1163
  • 用 户 组: 普通用户
  • 注册时间: 2016-09-22 09:50
个人简介

一个守望数据库的老菜鸟

文章分类

全部博文(99)

文章存档

2019年(21)

2018年(17)

2017年(37)

2016年(24)

我的朋友

分类: Mysql/postgreSQL

2017-07-31 12:06:57

博客文章除注明转载外,均为原创。转载请注明出处。
本文链接地址: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
阅读(3358) | 评论(1) | 转发(0) |
给主人留下些什么吧!~~

dbwatcher2019-01-25 17:39:33

pt-archiver Bug不会迁移max(id)那条数据的解决方法
编辑修改/usr/bin/pt-archiver
修改前:  $first_sql .= \" AND ($col <  \" . $q->quote_val($val) . \")\";
修改后:  $first_sql .= \" AND ($col <= \" . $q->quote_val($val) . \")\";