一 简介:今天咱们来聊聊pt-archiver的使用
二 相关参数
相关参数1
--statistics 统计信息。
--progress 每处理progress指定的行数后,就打印一次信息
--no-delete :表示不删除原来的数据,注意:如果不指定此参数,所有处理完成后,都会清理原表中的数据。
--limit 每组一次删除多少条数据
--where 过滤的条件
--why-quit 打印退出的原因
--bulk-insert/delete 并发插入删除,能大幅度提高速度
--no-check-charset 不检测utf8mb4,因为pt工具不支持,建议加入
--txn-size 每组事务的大小(行数)
--source 源机器目标
--purge/--dest/--file 与source选项搭配,分别为删除 归档 和导入文件
--dry-run 只试运行,并不真正执行,会生成相关执行语句
–-run-time=time(单位是s) 运行多长时间后退出.可以指定如下后缀,如果没有后缀,默认是秒 主要为了限制某些时长的限制
三 表数据归档
1 手动创建备份表
2 信息统计
before=`mysql -h${Fromhost} -P${Port} -u${user} -p${pass} ${FromDB} -Ne "select count(*) from ${FromTable} where ${condition}"`
echo "${before} 行数据需要处理" >> ${logfile}
3 归档并删除源数据
condition=‘id<10000'->类似这样不要加分号
pt-archiver --source h=${Fromhost},D=${FromDB},P=${Port},t=${FromTable} --user=${user} --password=${pass}
--dest h=${Desthost},P=${Port},D=${ToDB},t=${ToTable} --where "${condition}"
-A utf8 --limit 10000 --txn-size 10000 --no-version-check --no-check-charset --statistics --progress=100000 --run-time 16h --nosafe-auto-increment --bulk-insert >>${logfile}
4 信息统计
after=`mysql -h${Tohost} -P${Port} -u${user} -p${pass} ${ToDB} -Ne "select count(*) from ${ToTable} where ${condition}"`
echo "${after} 行数据已处理" >> ${logfile}
四 限制条件: 无主键,有触发器 外键均不能处理
五 处理过程
1 根据设置的limit来生成每次的select条数
1 如果是主键,则直接生成sql语句
2 如果是非主键,则先生成主键,然后再生成force index(primary) sql语句
2 根据 txn-size来控制并发insert的条数进行insert备份表
3 根据插入数据的主键生成delete语句-根据主键删除,在原表进行删除操作
4 以此类推
六获取进度
可以通过select 备份表进行查询数据量,条件就是归档的条件
七 补充
原表不会进行整理,需要DBA手动介入进行空间回收