pt-archiver使用
pt-archiver工具其實就是用來清理,歸檔數據用的
一.歸檔前的準備
需要配置client字符集為utf-8,如果你用了utf-8的編碼,防止歸檔數據為亂碼
[client]
default-character-set=utf8
二.使用場景
1、清理線上過期數據
2、清理過期數據,并把數據歸檔到本地歸檔表中,或者遠端歸檔服務器
3、兩張表之間的數據不完全相同,希望合并。此時加上–ignore或–replace選項,可以輕松實現
4、導出線上數據,到線下數據作處理
三.參數
至少指定–dest, –file 或者 –purge三個參數中的一個
–ignore and –replace 不能同時指定
–txn-size and –commit-each 不能同時指定
–low-priority-insert and –delayed-insert 不能同時指定
–share-lock and –for-update 不能同時指定
–analyze and –optimize 不能同時指定
–no-ascend and –no-delete 不能同時指定
默認情況下,–dest從–source中復制DSN字符串.即,在同一個MySQL Server上面把數據歸檔到另外一個表.
–analyze
在數據歸檔完成后,執行ANALYZE TABLE命令.d是在目的端執行,s是在源端執行.
--analyze=ds
–ascend-first
只使用第一列為升序的索引.
–ask-pass
交互模式輸入密碼
–buffer
指定–file參數時,提供緩沖功能.性能可能會提高(5-15)%
風險: 在歸檔大事務的時候,如果發生宕機,可能會造成數據丟失.
–bulk-delete
用單獨的sql語句,每次刪除一個塊的數據.可以加快刪除的速度.不推薦使用.
正常情況下,是根據主鍵,一行一行的刪除.
–[no]bulk-delete-limit
為–bulk-delete參數添加limit選項
–bulk-insert
使用”LOAD DATA INFILE”方式代替INSERT方式寫入.
–charset
指定字符集,例如
--charset 'utf8'
–[no]check-charset
默認開啟,檢查連接的字符集與表的字符集是否一致.
–[no]check-columns
檢查source和dest是否具有相同的列(不減查列的順序,數據類型等).如果不同,則報錯退出.
–check-interval
默認1s
如果指定了–check-slave-lag 參數,那么每秒都會檢查從庫的延遲情況(帳號要有權限連接從庫).
–check-slave-lag
指定一個從庫的DSN串,檢查復制延遲的情況,如果大于–max-lag,就會暫停歸檔.
–columns
指定歸檔的列(用逗號分割),寫入文件和目的庫表.
注意: 沒有指定列,在原表也會被刪除.也就說,未選擇列的數據,就會丟失.
–commit-each
配合–limit參數,一組一組的歸檔數據
–config
參考下面的”如何讀取配置文件”
–delayed-insert
增加DELAYED屬性
–dry-run
不做任何操作,只打印要執行的查詢語句.
–file
歸檔到文件,文件內容相當于是SELECT INTO OUTFILE語法導出的數據,文件名可以增加時間戳和庫名:
%d Day of the month, numeric (01..31) %H Hour (00..23) %i Minutes, numeric (00..59) %m Month, numeric (01..12) %s Seconds (00..59) %Y Year, numeric, four digits %D Database name %t Table name
例如
--file '/var/log/archive/%Y-%m-%d-%D.%t'
–for-update
為SELECT語句增加FOR UPDATE屬性
–header
在歸檔文件的第一行加入列名.注意,在LOAD DATA INFILE時,別寫入多余的數據.
–high-priority-select
增加HIGH_PRIORITY 修飾符
Seehttp://dev.mysql.com/doc/en/select.htmlfor details.
–limit
默認值1
指定每次歸檔多少行.
–local
執行OPTIMZE或者ANALYZE語句時,不寫binlog,只在本地執行.
–low-priority-delete
Adds the LOW_PRIORITY modifier to DELETE statements.
Seehttp://dev.mysql.com/doc/en/delete.htmlfor details.
–low-priority-insert
Adds the LOW_PRIORITY modifier to INSERT or REPLACE statements.
Seehttp://dev.mysql.com/doc/en/insert.htmlfor details.
–max-lag
默認是1s, 從庫延遲超過這個設置值就會自動暫停.
–no-ascend
不使用順序索引優化
–no-delete
不在source上面刪除歸檔數據
–optimize
歸檔完成后,執行 OPTIMIZE TABLE
–pid
指定pid文件
–progress
每隔多少行,打印一次信息.
–purge
只刪除,不做歸檔.可以省略–file和–dest選項
–quiet
不打印任何輸出
–replace
在dest端,使用REPLACE INSERT語句
–retries
遇到超時或死鎖時,重試的次數.默認是1次
–run-time
運行多長時間后退出.
可以指定如下后綴,如果沒有后綴,默認是秒
s=seconds, m=minutes, h=hours, d=days
–sentinel
默認路徑: /tmp/pt-archiver-sentinel
如果這個文件存在,則直接退出.
–set-vars
可以設置mysql的變量,多個變量用逗號分割.
--set-vars wait_timeout=500
–skip-foreign-key-checks
禁用外鍵檢查,相當于執行了 SET FOREIGN_KEY_CHECKS=0
–sleep
指定兩次SELECT語句的sleep時間.默認是沒有sleep的.
如果指定commit-each參數,commit和flush會在sleep之前發生.
–stop
創建一個哨兵文件,停止正在運行的pt-archiver進程.例如session1正在執行歸檔操作,然后我用session2創建一個哨兵文件,那么session1的操作會立刻停止.
–txn-size
指定每個事務的行數.
–where (重要)
指定歸檔數據的過濾條件.
–why-quit
打印退出的原因,歸檔數據正常完成的除外.
四.示例
1.歸檔到數據庫
pt-archiver --source h=127.0.0.1,D=test,t=table1,u=root,p=123456 --dest h=127.0.0.1,D=test,t=table2,u=root,p=123456 --where 'id<10000' --no-check-charset --no-delete --limit=1000 --commit-each --progress 2000 --statistics
2.只清理數據
pt-archiver --source h=127.0.0.1,D=test,t=table1,u=root,p=123456 --where 'id<10000' --purge --limit=1 --no-check-charset
3.只把數據導出到外部文件,但是不刪除源表里的數據
pt-archiver --source h=127.0.0.1,D=test,t=table1,u=root,p=123456 --where '1=1' --no-check-charset --no-delete --file="/tmp/archiver.dat"
總結
以上是生活随笔為你收集整理的pt-archiver使用的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 你知道require是什么吗?
- 下一篇: PaddlePaddle开源平台的应用