Mysql-經典實戰案例(10):如何用PT-Archiver完成大表的自動歸檔

真實痛點:電商訂單表存儲優化場景

現狀分析
某電商平臺訂單表(order_info)每月新增500萬條記錄

  • 主庫:高頻讀寫,SSD存儲(空間告急)
  • 歷史庫:HDD存儲,只讀查詢

優化目標

  • ? 自動遷移7天前的訂單到歷史庫
  • ? 每周六23:30執行,不影響業務高峰
  • ? 確保數據一致性

第一章:前期準備:沙盒實驗室搭建

1.1 實驗環境架構

生產庫:10.33.112.22

歷史庫:10.30.76.4

1.2 環境初始化(雙節點執行)

# 主庫建表
CREATE TABLE order_info (id BIGINT AUTO_INCREMENT PRIMARY KEY,order_no VARCHAR(32) UNIQUE,amount DECIMAL(10,2),create_time DATETIME DEFAULT CURRENT_TIMESTAMP,INDEX idx_create_time(create_time)
) ENGINE=InnoDB;# 需要在歷史庫建表(保持相同結構)
CREATE TABLE order_archive (id BIGINT AUTO_INCREMENT PRIMARY KEY,order_no VARCHAR(32) UNIQUE,amount DECIMAL(10,2),create_time DATETIME DEFAULT CURRENT_TIMESTAMP,INDEX idx_create_time(create_time)
) ENGINE=InnoDB;

第二章:數據搬遷實戰

2.1 模擬數據生成(快速生成30天數據)

# 登錄主庫執行
DELIMITER $$
CREATE PROCEDURE generate_orders()
BEGINDECLARE i INT DEFAULT 0;WHILE i < 50000 DOINSERT INTO order_info(order_no, amount, create_time)VALUES (CONCAT('NO', DATE_FORMAT(NOW(),'%Y%m%d'), LPAD(i,6,'0')),ROUND(RAND()*1000,2),DATE_SUB(NOW(), INTERVAL FLOOR(RAND()*30) DAY));SET i = i + 1;END WHILE;
END$$
DELIMITER ;CALL generate_orders();   -- 執行存儲過程
DROP PROCEDURE generate_orders;

數據驗證

SELECT COUNT(*) AS total,MIN(create_time) AS earliest,MAX(create_time) AS latest 
FROM order_info;+-------+---------------------+---------------------+
| total | earliest            | latest              |
+-------+---------------------+---------------------+
| 50000 | 2025-02-19 16:24:17 | 2025-03-20 16:34:00 |
+-------+---------------------+---------------------+

2.2 PT-Archiver手動搬遷示范

./pt-archiver \
--source h=10.33.112.22,D=pt,t=order_info,u=root,p=密碼 \
--dest h=10.30.76.4,D=pt,t=order_archive,u=root,p=密碼 \
--where "create_time < DATE_SUB(NOW(), INTERVAL 7 DAY)" \
--progress 1000 \
--bulk-delete \
--limit 5000 \
--no-check-charset \
--nosafe-auto-increment \
--commit-each
  • 參數解釋(參數 | 說明):

    –source | 指定源數據庫連接信息(IP/庫名/表名/賬號密碼)
    –dest | 指定目標數據庫連接信息(IP/庫名/表名/賬號密碼)
    –where | 數據篩選條件(刪除7天前的數據)
    –progress | 每處理1000行輸出進度
    –bulk-delete | 啟用批量刪除模式(代替逐行刪除)
    –limit | 每批處理5000條數據
    –no-check-charset | 跳過字符集一致性檢查
    –nosafe-auto-increment | 禁用自增主鍵安全校驗 (避免漏掉最后一行數據)
    –commit-each | 逐行提交事務(默認批量提交)


2.3 遷移效果驗證

主庫查詢

SELECT COUNT(*) AS total,MIN(create_time) AS earliest,MAX(create_time) AS latest 
FROM order_info;+-------+---------------------+---------------------+
| total | earliest            | latest              |
+-------+---------------------+---------------------+
| 11638 | 2025-03-15 11:16:51 | 2025-03-21 11:25:56 |
+-------+---------------------+---------------------+

歷史庫驗證

SELECTCOUNT(*) AS total,MIN(create_time) AS earliest,MAX(create_time) AS latest
FROM order_archive;
+-------+---------------------+---------------------+
| total | earliest            | latest              |
+-------+---------------------+---------------------+
| 38362 | 2025-02-20 11:16:51 | 2025-03-14 11:25:55 |
+-------+---------------------+---------------------+

11638+38362=50000,無誤。遷移成功!


第三章:無人值守自動化方案

接下來我們要做成每周某,定時自動遷移

3.1 自動化配置

vim /scripts/archive_orders.sh#!/bin/bash
LOG_FILE="/var/log/archive_$(date +%Y%m%d).log"/opt/percona-toolkit-3.6.0/bin/pt-archiver \
--source h=10.33.112.22,D=pt,t=order_info,u=root,p=密碼 \
--dest h=10.30.76.4,D=pt,t=order_archive,u=root,p=密碼 \
--where "create_time < DATE_SUB(NOW(), INTERVAL 7 DAY)" \
--progress 1000 \
--bulk-delete \
--limit 5000 \
--purge \
--no-check-charset \
--nosafe-auto-increment \
--commit-each >> ${LOG_FILE} 2>&1

授權執行

chmod +x /scripts/archive_orders.sh

3.3 配置定時任務

crontab -e# 每周六23:30執行
30 23 * * 6 /bin/bash /scripts/archive_orders.sh

關鍵檢查項

  1. 確保pt-archiver在PATH中
  2. 定時任務用戶有權限訪問數據庫
  3. 日志目錄提前創建

結語:解放人力的最后一步

大功告成!此時生產數據庫:

? 主庫始終保持輕量級狀態
? 歷史查詢不再影響核心業務
? 自動歸檔策略穩定運行

現在就去為你的數據庫實施這套方案吧!

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/898551.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/898551.shtml
英文地址,請注明出處:http://en.pswp.cn/news/898551.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

CUDA編程面試高頻30題

1. 什么是CUDA&#xff1f;它與GPU的關系是什么&#xff1f; 答: CUDA&#xff08;Compute Unified Device Architecture&#xff09;是由NVIDIA開發的一種并行計算平臺和應用程序接口模型。它允許開發者利用NVIDIA GPU進行通用計算任務&#xff0c;而不僅僅是圖形渲染。CUDA提…

數學建模 繪圖 圖表 可視化(3)

文章目錄 前言二維散點圖系列坐標圖數據分布特征&#xff0c;Q-Q、P-P圖分類圖一般的曲線圖峰巒圖總結參考資料 前言 承接上期 數學建模 繪圖 圖表 可視化&#xff08;1&#xff09;的總體描述&#xff0c;這期我們繼續跟隨《Python 數據可視化之美 專業圖表繪制指南》步伐來學…

【數據結構】棧(Stack)、隊列(Queue)、雙端隊列(Deque) —— 有碼有圖有真相

目錄 棧和隊列 1. 棧&#xff08;Stack&#xff09; 1.1 概念 1.2 棧的使用&#xff08;原始方法&#xff09; 1.3 棧的模擬實現 【小結】 2. 棧的應用場景 1、改變元素的序列 2、將遞歸轉化為循環 3、逆波蘭表達式求值 4、括號匹配 5、出棧入棧次序匹配 6、最小棧…

【強化學習】Reward Model(獎勵模型)詳細介紹

&#x1f4e2;本篇文章是博主強化學習&#xff08;RL&#xff09;領域學習時&#xff0c;用于個人學習、研究或者欣賞使用&#xff0c;并基于博主對相關等領域的一些理解而記錄的學習摘錄和筆記&#xff0c;若有不當和侵權之處&#xff0c;指出后將會立即改正&#xff0c;還望諒…

國家雪亮工程政策護航,互聯網監控管理平臺鑄就安全防線

在當今社會&#xff0c;公共安全是國家發展的重要基石&#xff0c;也是人民安居樂業的基本保障。為了打造更高水平的平安中國&#xff0c;國家推出了意義深遠的雪亮工程&#xff0c;并出臺了一系列相關政策&#xff0c;為公共安全事業保駕護航。而互聯網監控管理平臺作為雪亮工…

藍橋杯 第十天 2019國賽第4題 矩陣計數

最后一個用例超時了&#xff0c;還是記錄一下 import java.util.Scanner;public class Main {static int visited[][];static int count 0;static int n,m;public static void main(String[]args) {Scanner scan new Scanner(System.in);n scan.nextInt();//2m scan.nextIn…

coding ability 展開第五幕(二分查找算法)超詳細!!!!

. . 文章目錄 前言二分查找搜索插入的位置思路 x的平方根思路 山脈數組的峰頂索引思路 尋找旋轉排序數組中的最小值思路 總結 前言 本專欄上篇博客已經把滑動指針收尾啦 現在還是想到核心——一段連續的區間&#xff0c;有時候加上哈希表用起來很爽 今天我們來學習新的算法知識…

BEVFormer報錯(預測場景與真值場景的sample_token不匹配)

在運行test.py時報錯&#xff1a; BEVFormer/projects/mmdet3d_plugin/datasets/nuscnes_eval.py&#xff1a; init()函數報錯 assert set(self.pred_boxes.sample_tokens) set(self.gt_boxes.sample_tokens), \"Samples in split doesnt match samples in predictions…

網絡安全威脅與防護措施(下)

8. 惡意軟件&#xff08;Malware&#xff09; **惡意軟件&#xff08;Malware&#xff0c;Malicious Software&#xff09;**是指旨在通過破壞、破壞或未經授權訪問計算機系統、網絡或設備的程序或代碼。惡意軟件通常用于竊取敏感信息、破壞系統、竊取資源、干擾正常操作&…

基于springboot的母嬰商城系統(018)

摘 要 現代經濟快節奏發展以及不斷完善升級的信息化技術&#xff0c;讓傳統數據信息的管理升級為軟件存儲&#xff0c;歸納&#xff0c;集中處理數據信息的管理方式。本母嬰商城系統就是在這樣的大環境下誕生&#xff0c;其可以幫助管理者在短時間內處理完畢龐大的數據信息&am…

shell 腳本搭建apache

#!/bin/bash # Set Apache version to install ## author: yuan# 檢查外網連接 echo "檢查外網連接..." ping www.baidu.com -c 3 > /dev/null 2>&1 if [ $? -eq 0 ]; thenecho "外網通訊良好&#xff01;" elseecho "網絡連接失敗&#x…

使用OBS進行webRTC推流參考

參考騰訊云官方文檔&#xff1a; 云直播 OBS WebRTC 推流_騰訊云 說明非常詳細&#xff0c;分為通過WHIP和OBS插件的形式進行推流。 注意&#xff1a;通過OBS插件的形式進行推流需要使用較低的版本&#xff0c;文檔里有說明&#xff0c;需要仔細閱讀。

Excel 小黑第18套

對應大貓18 .txt 文本文件&#xff0c;點數據 -現有鏈接 -瀏覽更多 &#xff08;文件類型&#xff1a;可以點開文件看是什么分隔的&#xff09; 雙擊修改工作表名稱 為表格添加序號&#xff1a;在數字那修改格式為文本&#xff0c;輸入第一個序號樣式&#xff08;如001&#…

快速入手-基于Django的mysql配置(三)

Django開發操作數據庫更簡單&#xff0c;內部提供了ORM框架。比如mysql&#xff0c;舊版本用pymysql對比較多&#xff0c;新的版本采用mysqlclient。 1、安裝mysql模塊 pip install mysqlclient 2、Django的ORM主要做了兩件事 &#xff08;1&#xff09;CRUD數據庫中的表&am…

【總結篇】java多線程,新建線程有幾種寫法,以及每種寫法的優劣勢

java多線程 新建線程有幾種寫法,以及每種寫法的優劣勢 [1/5]java多線程 新建線程有幾種寫法–繼承Thread類以及他的優劣勢[2/5]java多線程-新建線程有幾種寫法–實現Runnable接口以及他的優劣勢[3/5]java多線程 新建線程有幾種寫法–實現Callable接口結合FutureTask使用以及他的…

基于YOLOv8與ByteTrack的車輛行人多目標檢測與追蹤系統

作者主頁&#xff1a;編程千紙鶴 作者簡介&#xff1a;Java領域優質創作者、CSDN博客專家 、CSDN內容合伙人、掘金特邀作者、阿里云博客專家、51CTO特邀作者、多年架構師設計經驗、多年校企合作經驗&#xff0c;被多個學校常年聘為校外企業導師&#xff0c;指導學生畢業設計并參…

【芯片驗證】面試題·對深度為60的數組進行復雜約束的技巧

朋友發給我的芯片驗證筆試題,覺得很有意思,和大家分享一下。 面試題目 class A中一個長度為60的隨機數組rand int arr[60],如何寫約束使得: 1.每個元素的值都在(0,100]之間,且互不相等; 2.最少有三個元素滿足勾股數要求,比如數組中包含3,4,5三個點; 請以解約束最快…

springmvc中使用interceptor攔截

HandlerInterceptor 是Spring MVC中用于在請求處理之前、之后以及完成之后執行邏輯的接口。它與Servlet的Filter類似&#xff0c;但更加靈活&#xff0c;因為它可以訪問Spring的上下文和模型數據。HandlerInterceptor 常用于日志記錄、權限驗證、性能監控等場景。 ### **1. 創…

【網絡協議】基于UDP的可靠協議:KCP

TCP是為流量設計的&#xff08;每秒內可以傳輸多少KB的數據&#xff09;&#xff0c;講究的是充分利用帶寬。而 KCP是為流速設計的&#xff08;單個數據包從一端發送到一端需要多少時間&#xff09;&#xff0c;以10%-20%帶寬浪費的代價換取了比 TCP快30%-40%的傳輸速度。TCP信…

【論文閱讀】Contrastive Clustering Learning for Multi-Behavior Recommendation

論文地址&#xff1a;Contrastive Clustering Learning for Multi-Behavior Recommendation | ACM Transactions on Information Systems 摘要 近年來&#xff0c;多行為推薦模型取得了顯著成功。然而&#xff0c;許多模型未充分考慮不同行為之間的共性與差異性&#xff0c;以…