Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1348367
  • 博文数量: 117
  • 博客积分: 2559
  • 博客等级: 少校
  • 技术积分: 4385
  • 用 户 组: 普通用户
  • 注册时间: 2010-08-13 20:08
个人简介

作为初学者,要想取得进步,成为高手,首先应该了解自己的不足之处.

文章分类

全部博文(117)

文章存档

2014年(1)

2013年(25)

2012年(13)

2011年(77)

2010年(1)

分类: Mysql/postgreSQL

2013-11-27 19:04:00

根据官方文档-http://www.percona.com/doc/percona-toolkit/2.2/pt-archiver.html,选择常用的参数,做了说明.

  • NAME
  • SYNOPSIS
    • Usage
    • Examples
  • RISKS
  • DESCRIPTION
  • Percona XtraDB Cluster
  • OUTPUT
  • ERROR-HANDLING
  • OPTIONS
  • 如何读取配置文件

NAME

pt-archiver 数据归档到表或者文件

SYNOPSIS

Usage

pt-archiver [OPTIONS] --source DSN --where WHERE

Examples

  1. 从线上服务器把数据归档到线下服务器和本地文件
    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)'
    
    
  3. 每1000行提交一次,每2000行打印一个标题显示进度,不删除源表数据,在归档完成后,打印统计信息.
    pt-archiver --source h=127.0.0.1,P=3306,u='xxxx',p='xxxx',D=db,t=tbl \
    --file '/tmp/%D.%t_%Y%m%d%H%i%s.txt' --charset 'utf8' \
    --where "oderTime < '2012-01-01 00:00:00'" --limit 1000 --commit-each \
    --progress 2000 --statistics --no-delete
    

RISKS

在实际应用中,已经证明Percona Toolkit是成熟的工具,但是所有的数据库工具都会给系统带来风险,所以,在使用前,请:

  • 认真读工具文档
  • 了解已知BUG
  • 在非线上环境测试
  • 备份数据并校验备份的数据

DESCRIPTION

pt-archiver正如这篇文章锁说的http://tinyurl.com/mysql-archiving.
该工具的目标是把线上的老数据转移,在转移过程中,不会对服务器产生任何冲击,同时也不会影响写入和查询.你可以把这些数据写入到另外一台MySQL,或者写到一个文件里面(该可以使用LOAD DATA INFILE语句导入),或者也可以直接做清理.

一些重要的选项,例如--limit, --retries, 和--txn-size

策略:

  1. 找到数据行,顺着索引,找到更多的数据
  2. 以后的每次查询,都不会进行全表扫描;它应该是通过索引,找到所有需要归档的数据.

--source参数,指定数据源
--dry-run参数, 试运行,可以打印出查询计划,看看是否为最坏的查询-全表扫描.

Percona XtraDB Cluster

暂无

OUTPUT

--progress int 后面需要加一个整数,意思是每处理多少行,输出一个标题行.包括当前日期和时间,pt-archiver运行了多少秒,已经归档了多少数据.
--statstics, 显示计时器,以预估所需要的执行时间.

ERROR-HANDLING

pt-archiver工具会尽可能的捕捉信息,并友好的退出.例如:发出一个SIGTERM信号(Ctrl-C),该工具将会捕捉到,并打印一条消息,然后退出.它不会执行-analyze或者-optimize参数,因为这些操作会相当耗时.它会正常执行其他代码,包括after_finish()函数

总而言之,如果pt-archiver遇到错误,它会跳过分析和优化.

OPTIONS

注意:

  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. 参数
    --dry-run 只打印命令,不执行
    --file 归档到文件
    --limit和--commit-each配合使用,多少行执行一次commit
    --purge 清理
    
  2. /etc/percona-toolkit/pt-archiver.conf
    purge
    limit  = 10
    commit-each
    source = A=utf8,D=test,P=3306,h=127.0.0.1,p=...,t=t1,u=username
    where  = id<515
    
  3. 命令
    pt-archiver --config /etc/percona-toolkit/pt-archiver.conf
阅读(5287) | 评论(0) | 转发(1) |
给主人留下些什么吧!~~
评论热议
请登录后评论。

登录 注册