数据库归档的实现方案调研(二)

之前的文章里已经写了使用TokuDB进行数据压缩,准确的说,但 TokuDB并非是归档,而是对数据进行压缩,使得数据库在保存大量数据时有更好的表现,这节就是描述一个数据库归档方案。

经过调研,发现一个比较好的工具: pt-archiver。

1、原理

通过给定的–where条件,查询出表中需要删除或者归档记录的主键信息,然后通过强制主键索引的方式,小批量(最小可以做到1行)的方式删除或者归档,最大化的减小归档或者删除操作对DB性能的影响。

2、能做什么

1、清理线上过期数据;
2、导出线上数据,到线下数据作处理;
3、清理过期数据,并把数据归档到本地归档表中,或者远端归档服务器。

3、操作示例

1、全表归档,不删除原表数据,非批量插入

pt-archiver \
--source h=10.73.129.187,P=3306,u=backup_user,p='xxx',D=test123,t=c1 \
--dest h=10.73.129.188,P=3306,u=backup_user,p='xxx',D=test123,t=c1 \
--charset=UTF8 --where '1=1' --progress 10000 --limit=10000 --txn-size 10000 --statistics --no-delete

2、全表归档,不删除原表数据,批量插入

pt-archiver \
--source h=10.73.129.187,P=3306,u=backup_user,p='xxx',D=test123,t=c1 \
--dest h=10.73.129.188,P=3306,u=backup_user,p='xxx',D=test123,t=c1 \
--charset=UTF8 --where '1=1' --progress 10000 --limit=10000 --txn-size 10000 --bulk-insert --bulk-delete --statistics --no-delete

3、全表归档,删除原表数据,非批量插入,非批量删除

pt-archiver \
--source h=10.73.129.187,P=3306,u=backup_user,p='xxx',D=test123,t=c1 \
--dest h=10.73.129.188,P=3306,u=backup_user,p='xxx',D=test123,t=c1 \
--charset=UTF8 --where '1=1' --progress 10000 --limit=10000 --txn-size 10000 --statistics --purge

4、全表归档,删除原表数据,批量插入,批量删除

pt-archiver \
--source h=10.73.129.187,P=3306,u=backup_user,p='xxx',,D=test123,t=c1 \
--dest h=10.73.129.188,P=3306,u=backup_user,p='xxx',D=test123,t=c1 \
--charset=UTF8 --where '1=1' --progress 10000 --limit=10000 --txn-size 10000 --bulk-insert --bulk-delete --statistics --purge

4、参数解释

常用参数解释
--where ‘id<3000’设置操作条件
--limit 10000每次取1000行数据给pt-archive处理
--txn-size 1000设置1000行为一个事务提交一次
--progress 5000每处理5000行输出一次处理信息
--statistics结束的时候给出统计信息:开始的时间点,结束的时间点,查询的行数,归档的行数,删除的行数,以及各个阶段消耗的总的时间和比例,便于以此进行优化。只要不加上–quiet,默认情况下pt-archive都会输出执行过程的
--charset=UTF8指定字符集为UTF8
--no-delete表示不删除原来的数据,注意:如果不指定此参数,所有处理完成后,都会清理原表中的数据
--bulk-delete批量删除source上的旧数据
--bulk-insert批量插入数据到dest主机 (看dest的general log发现它是通过在dest主机上LOAD DATA LOCAL INFILE插入数据的)
--purge删除source数据库的相关匹配记录
--local不把optimize或analyze操作写入到binlog里面(防止造成主从延迟巨大)
--analyze=ds操作结束后,优化表空间(d表示dest,s表示source)。默认情况下,pt-archiver操作结束后,不会对source、dest表执行analyze或optimize操作,因为这种操作费时间,并且需要你提前预估有足够的磁盘空间用于拷贝表。一般建议也是pt-archiver操作结束后,在业务低谷手动执行analyze table用以回收表空间
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值