pt-archiver如何实现MySQL定期分表
发表于:2025-11-11 作者:千家信息网编辑
千家信息网最后更新 2025年11月11日,这篇文章给大家分享的是有关pt-archiver如何实现MySQL定期分表的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。pt-archiver使用的场景1、清理线上过期数据
千家信息网最后更新 2025年11月11日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安全错误
数据库的锁怎样保障安全
网络安全意识形态责任
帮助信息网络犯罪案例出租服务器
redis与数据库比对
安全模式下数据库备份
网络技术保障岗是干什么的
数据库空间混合简单
合肥高新区网络安全
termux如何登录数据库
360服务器版下载
软件开发者价钱
网络安全宣传卡片设计
数据库 锁 种类
软件开发人员规章制度
网络技术公司股票
中欧网络安全原则和体系
阿里云数据库更换
数据库外键关系的影响
xml更改默认数据库
无线网络安全密钥不匹配
数据库设计要不要加外键
北京 安卓软件开发公司
调查问卷怎么看数据库
数据库体温数据类型
软件开发费记什么条件
闵行区优势网络技术诚信服务
鹿泉区委网络安全委员会
如何用云服务器连接电视机
嘉兴一诚网络技术服务有限公司
网络安全怎么越学越难
java架构师网络技术