千家信息网

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

发表于:2026-11-03 作者:千家信息网编辑
千家信息网最后更新 2026年11月03日,这篇文章给大家分享的是有关pt-archiver如何实现MySQL定期分表的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。pt-archiver使用的场景1、清理线上过期数据
千家信息网最后更新 2026年11月03日pt-archiver如何实现MySQL定期分表

这篇文章给大家分享的是有关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定期分表"这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,让大家可以学到更多知识,如果觉得文章不错,可以把它分享出去让更多的人看到吧!

数据 分表 脚本 最小 内容 历史 文件 日期 更多 条件 篇文章 范围 参考 处理 不错 实用 最大 相同 一行 之间 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 喔噻互联网科技有限公司 北京路客互联网科技有限公司 互联网科技资迅 互联网科技股票 郑州华宇互联网科技 互联网科技的未来发展 互联网科技大会案例 互联网科技公司需要的职位 以后互联网后是啥科技 来此购互联网科技有限公司 米聚互联网科技南京有限公司排面 科技类公司包括互联网吗 济南有互联网科技公司吗 区块链结合互联网科技 2021世界互联网领先科技成果发布 宁波跨境商互联网科技有限公司 数字互联网科技有限公司 青岛易易互联网科技 平安好医生打造互联网科技医疗 科技互联网专业务虚会材料 为想互联网科技怎么样 互联网和科技创新 成都仁贤领冠互联网科技有限公司 长沙茂晟互联网科技有限公司 互联网与数字科技关系 东营紫格互联网科技 众联互联网络科技 绵阳真晨互联网科技有限公司 北京瑞云互联网科技有限公司 互联网科技快速发展优美句子
0