推荐阅读: percona-toolkit 之 【pt-archiver】
官方网址: https://www.percona.com/doc/percona-toolkit/2.2/pt-archiver.html
安装
- ubuntu:
sudo apt-get install percona-toolki
- centOS:
yum install percona-toolkit
- mac:
brew install percona-toolki
安装成功验证: pt-archiver --help
使用方法
pt-archiver [OPTIONS] --source DSN --where WHERE
参数
--source
: 指定源数据表h:连接的MySQL主机名或IP地址 u:连接时使用的MySQL用户名 p:连接时使用的MySQL密码 P:连接时使用的MySQL端口 D:连接时使用的默认数据库,可以在运行时使用不同的数据库 t:要被归档、删除、导出的表 i:进行归档、删除、导出时,被指定使用的索引 S:用于连接的MySQL套接字文件(在Unix系统上) a:执行查询时要使用的数据库 b:如果为true,则使用SQL_LOG_BIN禁用binlog L:启用LOAD DATA LOCAL INFILE A:连接MySQL的默认字符集(SET NAMES) F:通过配置文件读取用户名和密码,格式为: [client] user=your_user_name pass=secret
--where
:指定WHERE子句以限制存档的行不需要WHERE子句,请使用 --where “1=1”
--dest
:目的库,兼容DSN选项,使用与 --source 相同格式不必重复与 --source 相同的选项
--file
: 要归档到的文件,使用与 SELECT INTO OUTFILE 相同的格式
如:--file '/var/log/archive/%Y-%m-%d-%D.%t'
%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
--buffer
: 指定 --file 参数时,先写到 buffer 中,再刷到文件中,提供缓冲功能,可以提高刷写到文件的性能,但崩溃可能会有数据丢失--purge
: 只删除,不做归档--no-delete
: 不在 source 上面删除归档数据
注意:
- 至少指定 --dest, --file, --purge 三个参数中的一个
- –ignore 和 --replace 不能同时指定
- –txn-size 和 --commit-each 不能同时指定
- –low-priority-insert 和 --delayed-insert 不能同时指定
- –share-lock 和 --for-update 不能同时指定
- –analyze 和 --optimize 不能同时指定
- –no-ascend 和 --no-delete 不能同时指定
--charset
: 指定字符集-
--[no]check-charset
: 默认开启,检查连接的字符集与表的字符集是否一致 -
--[no]check-columns
: 默认开启,检查 source 和 dest 是否具有相同的列(不检查列的顺序,数据类型等);如果不同,则报错退出
-
--progress
: 每多少行打印进度信息:打印当前时间,已用时间以及每X行存档的行数 -
--quiet
: 不打印任何输出 -
--limit
: 获取归档语句的行数,默认 1--commit-each
: 控制事务大小,每次归档完数据,提交事务,配合 --limit 参数,一组一组的归档数据,禁用 --txn-size -
--statistics
:收集并打印时间统计信息 -
--txn-size
: 指定每个事务的大小(行数),默认1,0完全禁用事务pt-archive处理多行后,若指定该参数,会提交 --source 和 --dest,并刷新 --file 给出的文件
-
--sleep
: 指定两次 SELECT 语句的 sleep 时间,默认没有 sleep--sleep-coef
: 根据上一次 select 的时间进行系数计算–sleep 时间 -
--why-quit
: 打印退出的原因,归档数据正常完成的除外
-
--check-interval
: 检查从库延迟的间隔时间,默认1s,每 100 行执行一次检查 -
--max-lag
: 默认1s,从库延迟超过这个设置值就会自动暂停 -
--check-slave-lag
: 指定一个从库的DSN串,检查复制延迟的情况,如果大于 --max-lag 就暂停归档可以多次指定此选项以检查多个从库,参数同 --source
-
--sentinel
: 指定的文件的存在将导致pt-archiver停止存档并退出 -
--set-vars
: 设置 mysql 变量,多个变量用逗号分割
-
--bulk-delete
: 每次删除一个块的数据,可以加快删除的速度这是在按主键删的情况下,碰到复合索引的情况,速度可能不会提高
-
--[no]bulk-delete-limit
: 为 --bulk-delete 参数添加 limit 选项 -
--bulk-insert
:使用"LOAD DATA INFILE"方式代替 INSERT 方式写入,批量插入数据到 dest 主机
-
--columns
: 指定归档的列(用逗号分割)、写入文件和目的库表注意: 没有指定列,在原表也会被删除,即: 未选择列的数据会丢失
-
--pid
: 指定 pid 文件 -
--primary-key-only
: 指定主键,你如果想清理历史数据,这个选项可以提高效率
-
--analyze=ds
: 数据归档完成后,执行 ANALYZE TABLE 命令优化表空间s
分析源库,d
分析目的库 -
--ascend-first
: 升序索引优化,提供最左索引(多列主键)的升序只使用第一列为升序的索引(如果是在复合索引扫描,该选项只扫描最左列的索引,不需要扫描全索引,提高性能)
-
--no-ascend
: 不要使用升序索引优化,注意多列主键索引 -
--local
: 执行 OPTIMZE 或 ANALYZE 语句时,不写 binlog,只在本地执行 -
--optimize
: 归档完成后,在–source或–dest上执行 OPTIMIZE TABLE命令
--ignore
: insert 语句加入 ignore 属性--quick-delete
: 为 delete 语句增加 quick 属性--delayed-insert
: 在 insert 后面添加 delayed,延迟写入--for-update
: 在 select 语句后面加入 for update--share-lock
: 为 select 语句增加 lock in share mode--high-priority-select
: 在每个 select 语句上加入 HIGH_PRIORITY 修饰符--low-priority-delete
: 为 delete 语句增加 LOW_PRIORITY 属性--low-priority-insert
: 为 INSERT 或 REPLACE 语句增加 low-priority-insert 属性
--slave-user
: 连接从库的用户,用户必须存在于所有从属服务器上--slave-password
: 连接从库的密码,用户的密码在所有从站上必须相同--database
: 连接时使用的默认数据库--ask-pass
: 连接MySQL时提示输入密码--host
: 连接的MySQL地址--port
: 连接MySQL时的端口--user
: 连接MySQL时的用户--password
: 连接MySQL时使用的密码,若密码包含逗号,则必须使用反斜杠进行转义
--config
: 从配置文件读取配置,配置文件列表以逗号分隔--dry-run
: 不做任何操作,只打印要执行的查询语句--header
: 使用 --file 时,在归档文件的第一行加入列名--replace
: 在 dest 端使用 REPLACE INSERT 语句,即 replace into 代替 insert into--retries
: 每次超时或死锁的重试次数,默认 1--run-time
: 运行多长时间后退出--[no]safe-auto-increment
: 默认值 yes,不会归档最大自增主键的行--skip-foreign-key-checks
: 禁用外键检查,相当于执行 SET FOREIGN_KEY_CHECKS=0--stop
: 创建一个哨兵文件,停止正在运行的 pt-archiver 进程