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
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31525738/viewspace-2157207/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- ShardingSphere + Mysql,實現分庫分表、讀寫分離,並整合 SpringBootMySqlSpring Boot
- 3.1 MYSQL分庫分表實踐MySql
- 你們要的MyCat實現MySQL分庫分表來了MySql
- MySQL實現分組排序MySql排序
- Mysql表分割槽實現MySql
- [Mysql]分庫分表MySql
- MySQL主從分離實現MySql
- 分庫分表(6)--- SpringBoot+ShardingSphere實現分表+ 讀寫分離Spring Boot
- efcore分表下"完美"實現
- SpringBoot+MybatisPlus+Mysql+Sharding-JDBC分庫分表實踐Spring BootMyBatisMySqlJDBC
- NetCore框架WTM的分表分庫實現NetCore框架
- Docker實現Mariadb分庫分表、讀寫分離Docker
- ProxySQL實現MySQL讀寫分離MySql
- kettle 實現mysql單表增量同步MySql
- MySQL使用pt-archiver歸檔歷史資料MySqlHive
- MySQL怎麼實現主從同步和Django實現MySQL讀寫分離MySql主從同步Django
- mysql 無限級分類實現思路MySql
- Linux MySQL分庫分表之MycatLinuxMySql
- MySQL分庫分表的原則MySql
- MySQL全面瓦解28:分庫分表MySql
- 定期最佳化和分析表
- 【Golang】基於beego/orm實現相同表結構不同表名的分表方法實現GolangORM
- 利用orm 在業務程式碼無感知下,實現實現分庫分表ORM
- MySql分表、分庫、分片和分割槽MySql
- docker+atlas+mysql實現讀寫分離DockerMySql
- Kubernetes 中實現 MySQL 的讀寫分離MySql
- 徹底搞清MySQL分庫分表(垂直分庫,垂直分表,水平分庫,水平分表)MySql
- MySQL實現MYISAM表批次壓縮的方法MySql
- 實現報表資料分庫儲存
- 二分查詢實現符號表符號
- MySQL 分庫分表方案,總結太全了。。MySql
- MYSQL效能最佳化分享(分庫分表)MySql
- ProxySQL實現Mysql讀寫分離 - 部署手冊MySql
- 搭建MySQL主從實現Django讀寫分離MySqlDjango
- Flink CDC 系列 - 同步 MySQL 分庫分表,構建 Iceberg 實時資料湖MySql
- Sharding-JDBC基本使用,整合Springboot實現分庫分表,讀寫分離JDBCSpring Boot
- MySQL 常用分庫分表方案,都在這裡了!MySql
- MySQL分表後原分割槽表處理方案MySql