我的编程空间,编程开发者的网络收藏夹
学习永远不晚

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

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

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

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

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

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

mysql分库分表如何实现

MySQL分库分表可以通过以下几个步骤实现:水平分库:将原始的单个数据库分成多个独立的数据库。每个数据库可以独立运行在不同的服务器上,从而提高系统的并发处理能力。垂直分表:将原始的单个表按照业务关联性拆分成多个子表。每个子表中只包含部分字
2023-10-27

如何分析用pt-stalk定位MySQL短暂的性能问题

本篇文章为大家展示了如何分析用pt-stalk定位MySQL短暂的性能问题,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。【背景】MySQL出现短暂的3-30秒的性能问题,一般的监控工具较难抓到现场,
2023-06-06

如何实现MySQL中锁定表的语句?

MySQL是一个开源的关系型数据库管理系统,常用于Web应用中。在MySQL数据库中,锁定表可以帮助开发人员有效地控制并发访问。本文将介绍如何在MySQL数据库中实现锁定表的语句,并提供相应的代码示例。锁定表的语句MySQL中锁定表的语句是
如何实现MySQL中锁定表的语句?
2023-11-08

PHP如何实现MySQL数据库分表

本篇内容介绍了“PHP如何实现MySQL数据库分表”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!一、MySQL分表的概念MySQL分表是将一
2023-07-06

MySQL分区表如何实现按月份归类

小编给大家分享一下MySQL分区表如何实现按月份归类,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!建表一般的表(innodb)创建后只有一个 idb 文件:cre
2023-06-25

MySQL如何实现连表查询分组去重

这篇文章主要介绍MySQL如何实现连表查询分组去重,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!业务逻辑通过多种渠道将小程序的活动页链接发布出去,比如通过多多种短信附带链接( channel 就记为 sms1,sms
2023-06-20

Vue表单绑定如何实现

这篇文章主要讲解了“Vue表单绑定如何实现”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Vue表单绑定如何实现”吧!基础用法可以用 v-model 指令在表单
2023-07-04

react如何实现表头固定

今天小编给大家分享一下react如何实现表头固定的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。react实现表头固定的方法:
2023-07-05

编程热搜

目录