mysql 案例 ~ pt-archiver 归档工具的使用

一 简介:今天咱们来聊聊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手动介入进行空间回收   

原文地址:https://www.cnblogs.com/danhuangpai/p/9183627.html