根据官方文档-,选择常用的参数,做了说明.
- 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
-
从线上服务器把数据归档到线下服务器和本地文件
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
-
只做清理
pt-archiver --source h=host,D=db,t=child --purge \ --where 'NOT EXISTS(SELECT * FROM parent WHERE col=child.col)'
-
每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正如这篇文章锁说的
该工具的目标是把线上的老数据转移,在转移过程中,不会对服务器产生任何冲击,同时也不会影响写入和查询.你可以把这些数据写入到另外一台MySQL,或者写到一个文件里面(该可以使用LOAD DATA INFILE语句导入),或者也可以直接做清理.
一些重要的选项,例如--limit, --retries, 和--txn-size
策略:
- 找到数据行,顺着索引,找到更多的数据
- 以后的每次查询,都不会进行全表扫描;它应该是通过索引,找到所有需要归档的数据.
--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
注意:
- 至少指定--dest, --file 或者 --purge三个参数中的一个
- --ignore and --replace 不能同时指定
- --txn-size and --commit-each 不能同时指定
- --low-priority-insert and --delayed-insert 不能同时指定
- --share-lock and --for-update 不能同时指定
- --analyze and --optimize 不能同时指定
- --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
打印退出的原因,归档数据正常完成的除外.
如何读取配置文件
-
参数
--dry-run 只打印命令,不执行 --file 归档到文件 --limit和--commit-each配合使用,多少行执行一次commit --purge 清理
-
/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
-
命令
pt-archiver --config /etc/percona-toolkit/pt-archiver.conf