加入收藏 | 设为首页 | 会员中心 | 我要投稿 温州站长网 (https://www.0577zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MySql教程 > 正文

pt-archiver如何实现MySQL定期分表

发布时间:2022-01-12 12:41:08 所属栏目:MySql教程 来源:互联网
导读:这篇文章给大家分享的是有关pt-archiver如何实现MySQL定期分表的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。 pt-archiver使用的场景 1、清理线上过期数据 2、清理过期数据,并把数据归档到本地归档表中,或者远端归档服务
       这篇文章给大家分享的是有关pt-archiver如何实现MySQL定期分表的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。
 
      pt-archiver使用的场景
 
1、清理线上过期数据  
 
2、清理过期数据,并把数据归档到本地归档表中,或者远端归档服务器  
 
3、两张表之间的数据不完全相同,希望合并。此时加上–ignore或–replace选项,可以轻松实现
 
4、导出线上数据,到线下数据作处理
 
     导出数据的基本原理:  
 
     通过“过滤条件”,得在此范围内的PK的最大值和最小值 , 然后通过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<""${EXEC_DATE}" 00:00:00"'"`
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}<""${EXEC_DATE}" 00:00:00"' --progress 5000 --limit=1000 --txn-size=1000 --statistics">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
感谢各位的阅读!关于“pt-archiver如何实现MySQL定期分表”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,让大家可以学到更多知识,如果觉得文章不错,可以把它分享出去让更多的人看到吧!

(编辑:温州站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读