mysql pt archiver_pt-archiver实现MySQL定期分表

pt-archiver使用的场景

1、清理线上过期数据

2、清理过期数据,并把数据归档到本地归档表中,或者远端归档服务器

3、两张表之间的数据不完全相同,希望合并。此时加上–ignore或–replace选项,可以轻松实现

4、导出线上数据,到线下数据作处理

导出数据的基本原理:

通过“过滤条件”,得在此范围内的PK的最大值和最小值 , 然后通过PK索引, 过滤条件 + pk (此范围内pk的最小值+每次增长limit指定的数) + limit. 这样直到处理完成。

关于分表,定期建表有一个pt-archiver可以很好的实现.

db_source.py_out_export和db_source.py_out_export_result做定期清理,每周三0:00归档到历史库db_hist.py_out_export_his${TABLE_DATE}和db_hist.py_out_export_result_his${TABLE_DATE}表.

具体实现可参考 如下

/pydata/software/percona-toolkit-3.0.2/pt-archiver.sh

/pydata/software/percona-toolkit-3.0.2/pt-archiver.def

[root@py-test percona-toolkit-3.0.2]# more pt-archiver.sh

#--------------------------------------------------------------------------------

#脚本名称:  pt-archiver.sh

#脚本参数:  pt-archiver.def文件

#脚本功能:  归档大表到历史表

#编 写 人:  zj

#编写日期:  2017年6月19日14:20

#更 新 人:

#更新日期:

#--------------------------------------------------------------------------------

EXEC_DATE=`date +%Y-%m-%d`

TABLE_DATE=`date +%Y%m%d`

#EXEC_DATE="2017-05-13"

#TABLE_DATE="20170513"

FILE_DIR=`dirname $0`

FILE_NAME=`basename $0 .sh`

USER="root"

PASSWORD="dbpasswd"

sed '/^#.*\|^$/d' ${FILE_DIR}/${FILE_NAME}.def >${FILE_DIR}/${FILE_NAME}.tmp

for i in `cat ${FILE_DIR}/${FILE_NAME}.tmp`

do

DEF_DATA_TMP="`echo ${i} |sed s/\ //g`" #去空格,得到一行数据

#得到数据文件和源表名值

SOURCE_DB=`echo ${i} | cut -d "," -f1 | tr "[A-Z]" "[a-z]"`

TABLE_NAME=`echo ${i} | cut -d "," -f2 | tr "[A-Z]" "[a-z]"`

FLITER_FIELD=`echo ${i} | cut -d "," -f3 | tr "[A-Z]" "[a-z]"`

DEST_DB=`echo ${i} | cut -d "," -f4 | tr "[A-Z]" "[a-z]"`

HISTABLE_NAME="${TABLE_NAME}_his${TABLE_DATE}"

WHERE_SQL=`echo "'exec_time

mysql -u${USER} -p${PASSWORD} -e "create table if not exists ${DEST_DB}.${HISTABLE_NAME} like ${SOURCE_DB}.${TABLE_NAME};"

if [ $? -ne 0 ] ;then

echo "ERROR:create table ${HISTABLE_NAME} error!" >${FILE_DIR}/${FILE_NAME}.log

exit 1

fi

echo " pt-archiver  --source h=127.0.0.1,P=3306,u=${USER},p=${PASSWORD},D=${SOURCE_DB},t=${TABLE_NAME} --dest h=127.0.0.1,P=3306,u=${USER},p=${PASSWORD},D=${DEST_DB},t=${HISTABLE_NAME} --no-check-charset --where

'${FLITER_FIELD}pt-archiver-${TABLE_NAME}.sh

sh pt-archiver-${TABLE_NAME}.sh >pt-archiver-${TABLE_NAME}.log

done

exit 0

[root@py-test percona-toolkit-3.0.2]#  more pt-archiver.def

##源数据库名,源表名,筛选字段,目标库名

db_source,py_out_export,export_time,db_hist

db_source,py_out_export_result,exec_time,db_hist

##创建每周三定时执行

[root@py-test percona-toolkit-3.0.2]#  crontab -e

20 2 * * 3 /pydata/software/percona-toolkit-3.0.2/pt-archiver.sh >/pydata/software/percona-toolkit-3.0.2/pt-archiver.log

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值