數據庫歸檔的實現方案調研(二)

之前的文章裏已經寫了使用TokuDB進行數據壓縮,準確的說,但 TokuDB並非是歸檔,而是對數據進行壓縮,使得數據庫在保存大量數據時有更好的表現,這節就是描述一個數據庫歸檔方案。

經過調研,發現一個比較好的工具: pt-archiver。

1、原理

通過給定的–where條件,查詢出表中需要刪除或者歸檔記錄的主鍵信息,然後通過強制主鍵索引的方式,小批量(最小可以做到1行)的方式刪除或者歸檔,最大化的減小歸檔或者刪除操作對DB性能的影響。

2、能做什麼

1、清理線上過期數據;
2、導出線上數據,到線下數據作處理;
3、清理過期數據,並把數據歸檔到本地歸檔表中,或者遠端歸檔服務器。

3、操作示例

1、全表歸檔,不刪除原表數據,非批量插入

pt-archiver \
--source h=10.73.129.187,P=3306,u=backup_user,p='xxx',D=test123,t=c1 \
--dest h=10.73.129.188,P=3306,u=backup_user,p='xxx',D=test123,t=c1 \
--charset=UTF8 --where '1=1' --progress 10000 --limit=10000 --txn-size 10000 --statistics --no-delete

2、全表歸檔,不刪除原表數據,批量插入

pt-archiver \
--source h=10.73.129.187,P=3306,u=backup_user,p='xxx',D=test123,t=c1 \
--dest h=10.73.129.188,P=3306,u=backup_user,p='xxx',D=test123,t=c1 \
--charset=UTF8 --where '1=1' --progress 10000 --limit=10000 --txn-size 10000 --bulk-insert --bulk-delete --statistics --no-delete

3、全表歸檔,刪除原表數據,非批量插入,非批量刪除

pt-archiver \
--source h=10.73.129.187,P=3306,u=backup_user,p='xxx',D=test123,t=c1 \
--dest h=10.73.129.188,P=3306,u=backup_user,p='xxx',D=test123,t=c1 \
--charset=UTF8 --where '1=1' --progress 10000 --limit=10000 --txn-size 10000 --statistics --purge

4、全表歸檔,刪除原表數據,批量插入,批量刪除

pt-archiver \
--source h=10.73.129.187,P=3306,u=backup_user,p='xxx',,D=test123,t=c1 \
--dest h=10.73.129.188,P=3306,u=backup_user,p='xxx',D=test123,t=c1 \
--charset=UTF8 --where '1=1' --progress 10000 --limit=10000 --txn-size 10000 --bulk-insert --bulk-delete --statistics --purge

4、參數解釋

常用參數 解釋
--where ‘id<3000’ 設置操作條件
--limit 10000 每次取1000行數據給pt-archive處理
--txn-size 1000 設置1000行爲一個事務提交一次
--progress 5000 每處理5000行輸出一次處理信息
--statistics 結束的時候給出統計信息:開始的時間點,結束的時間點,查詢的行數,歸檔的行數,刪除的行數,以及各個階段消耗的總的時間和比例,便於以此進行優化。只要不加上–quiet,默認情況下pt-archive都會輸出執行過程的
--charset=UTF8 指定字符集爲UTF8
--no-delete 表示不刪除原來的數據,注意:如果不指定此參數,所有處理完成後,都會清理原表中的數據
--bulk-delete 批量刪除source上的舊數據
--bulk-insert 批量插入數據到dest主機 (看dest的general log發現它是通過在dest主機上LOAD DATA LOCAL INFILE插入數據的)
--purge 刪除source數據庫的相關匹配記錄
--local 不把optimize或analyze操作寫入到binlog裏面(防止造成主從延遲巨大)
--analyze=ds 操作結束後,優化表空間(d表示dest,s表示source)。默認情況下,pt-archiver操作結束後,不會對source、dest表執行analyze或optimize操作,因爲這種操作費時間,並且需要你提前預估有足夠的磁盤空間用於拷貝表。一般建議也是pt-archiver操作結束後,在業務低谷手動執行analyze table用以回收表空間
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章