zoukankan      html  css  js  c++  java
  • pt-archiver使用

    pt-archiver工具其实就是用来清理,归档数据用的

    一.归档前的准备
    需要配置client字符集为utf-8,如果你用了utf-8的编码,防止归档数据为乱码
    [client]
    default-character-set=utf8

    二.使用场景
    1、清理线上过期数据
    2、清理过期数据,并把数据归档到本地归档表中,或者远端归档服务器
    3、两张表之间的数据不完全相同,希望合并。此时加上–ignore或–replace选项,可以轻松实现
    4、导出线上数据,到线下数据作处理

    三.参数

    1. 至少指定–dest, –file 或者 –purge三个参数中的一个
    2. –ignore and –replace 不能同时指定
    3. –txn-size and –commit-each 不能同时指定
    4. –low-priority-insert and –delayed-insert 不能同时指定
    5. –share-lock and –for-update 不能同时指定
    6. –analyze and –optimize 不能同时指定
    7. –no-ascend and –no-delete 不能同时指定

    默认情况下,–dest从–source中复制DSN字符串.即,在同一个MySQL Server上面把数据归档到另外一个表.

    • –analyze
      在数据归档完成后,执行ANALYZE TABLE命令.d是在目的端执行,s是在源端执行.
      --analyze=ds
      
    • –ascend-first
      只使用第一列为升序的索引.
    • –ask-pass
      交互模式输入密码
    • –buffer
      指定–file参数时,提供缓冲功能.性能可能会提高(5-15)%
      风险: 在归档大事务的时候,如果发生宕机,可能会造成数据丢失.
    • –bulk-delete
      用单独的sql语句,每次删除一个块的数据.可以加快删除的速度.不推荐使用.
      正常情况下,是根据主键,一行一行的删除.
    • –[no]bulk-delete-limit
      为–bulk-delete参数添加limit选项
    • –bulk-insert
      使用”LOAD DATA INFILE”方式代替INSERT方式写入.
    • –charset
      指定字符集,例如
      --charset 'utf8'
      
    • –[no]check-charset
      默认开启,检查连接的字符集与表的字符集是否一致.
    • –[no]check-columns
      检查source和dest是否具有相同的列(不减查列的顺序,数据类型等).如果不同,则报错退出.
    • –check-interval
      默认1s
      如果指定了–check-slave-lag 参数,那么每秒都会检查从库的延迟情况(帐号要有权限连接从库).
    • –check-slave-lag
      指定一个从库的DSN串,检查复制延迟的情况,如果大于–max-lag,就会暂停归档.
    • –columns
      指定归档的列(用逗号分割),写入文件和目的库表.
      注意: 没有指定列,在原表也会被删除.也就说,未选择列的数据,就会丢失.
    • –commit-each
      配合–limit参数,一组一组的归档数据
    • –config
      参考下面的”如何读取配置文件”
    • –delayed-insert
      增加DELAYED属性
    • –dry-run
      不做任何操作,只打印要执行的查询语句.
    • –file
      归档到文件,文件内容相当于是SELECT INTO OUTFILE语法导出的数据,文件名可以增加时间戳和库名:
      %d    Day of the month, numeric (01..31)
      %H    Hour (00..23)
      %i    Minutes, numeric (00..59)
      %m    Month, numeric (01..12)
      %s    Seconds (00..59)
      %Y    Year, numeric, four digits
      
      %D    Database name
      %t    Table name
      

      例如

      --file '/var/log/archive/%Y-%m-%d-%D.%t'
      
    • –for-update
      为SELECT语句增加FOR UPDATE属性
    • –header
      在归档文件的第一行加入列名.注意,在LOAD DATA INFILE时,别写入多余的数据.
    • –high-priority-select
      增加HIGH_PRIORITY 修饰符
      See http://dev.mysql.com/doc/en/select.html for details.
    • –limit
      默认值1
      指定每次归档多少行.
    • –local
      执行OPTIMZE或者ANALYZE语句时,不写binlog,只在本地执行.
    • –low-priority-delete
      Adds the LOW_PRIORITY modifier to DELETE statements.
      See http://dev.mysql.com/doc/en/delete.html for details.
    • –low-priority-insert
      Adds the LOW_PRIORITY modifier to INSERT or REPLACE statements.
      See http://dev.mysql.com/doc/en/insert.html for details.
    • –max-lag
      默认是1s, 从库延迟超过这个设置值就会自动暂停.
    • –no-ascend
      不使用顺序索引优化
    • –no-delete
      不在source上面删除归档数据
    • –optimize
      归档完成后,执行 OPTIMIZE TABLE
    • –pid
      指定pid文件
    • –progress
      每隔多少行,打印一次信息.
    • –purge
      只删除,不做归档.可以省略–file和–dest选项
    • –quiet
      不打印任何输出
    • –replace
      在dest端,使用REPLACE INSERT语句
    • –retries
      遇到超时或死锁时,重试的次数.默认是1次
    • –run-time
      运行多长时间后退出.
      可以指定如下后缀,如果没有后缀,默认是秒
      s=seconds, m=minutes, h=hours, d=days
      
    • –sentinel
      默认路径: /tmp/pt-archiver-sentinel
      如果这个文件存在,则直接退出.
    • –set-vars
      可以设置mysql的变量,多个变量用逗号分割.
      --set-vars wait_timeout=500
      
    • –skip-foreign-key-checks
      禁用外键检查,相当于执行了 SET FOREIGN_KEY_CHECKS=0
    • –sleep
      指定两次SELECT语句的sleep时间.默认是没有sleep的.
      如果指定commit-each参数,commit和flush会在sleep之前发生.
    • –stop
      创建一个哨兵文件,停止正在运行的pt-archiver进程.例如session1正在执行归档操作,然后我用session2创建一个哨兵文件,那么session1的操作会立刻停止.
    • –txn-size
      指定每个事务的行数.
    • –where (重要)
      指定归档数据的过滤条件.
    • –why-quit
      打印退出的原因,归档数据正常完成的除外.


    四.示例

    1.归档到数据库

    pt-archiver --source h=127.0.0.1,D=test,t=table1,u=root,p=123456 --dest h=127.0.0.1,D=test,t=table2,u=root,p=123456 --where 'id<10000' --no-check-charset --no-delete --limit=1000 --commit-each --progress 2000 --statistics

    2.只清理数据

    pt-archiver --source h=127.0.0.1,D=test,t=table1,u=root,p=123456 --where 'id<10000' --purge --limit=1 --no-check-charset

    3.只把数据导出到外部文件,但是不删除源表里的数据
    pt-archiver --source h=127.0.0.1,D=test,t=table1,u=root,p=123456 --where '1=1' --no-check-charset --no-delete --file="/tmp/archiver.dat"

  • 相关阅读:
    SQL中使用WITH AS提高性能
    电子邮件原理
    DirectoryEntry 活动目录的使用
    Entity Framework 教程(转)
    用sp_addlinkedserver建立链接服务器(sql server2008中通过测试)
    SQL2008和SQL2000可以跨服务器连接查询的测试实例
    Linq快速入门——扩展方法
    easyui 很好很强大
    【转】Jmeter内存溢出处理方式记录
    【转】Jmeter安装成功后的目录介绍
  • 原文地址:https://www.cnblogs.com/itfenqing/p/6148094.html
Copyright © 2011-2022 走看看