可使用percona-toolkit包中的pt-archiver工具來進行歷史數據歸檔html
一、清理線上過時數據。數據庫
二、清理過時數據,並把數據歸檔到本地歸檔表中,或者遠端歸檔服務器。服務器
三、兩張表之間的數據不徹底相同,但願合併。此時加上–ignore或–replace選項,能夠輕鬆實現。工具
四、導出線上數據,到線下數據做處理。性能
pt-archiver --source h=127.0.0.1,P=3306,D=database,t=table,u=root,p=123456 --dest h=127.0.0.1,P=3306,D=database,t=new_table,u=root,p=123456 --no-check-charset --where 'id>100' --progress 1000 --no-delete --limit=1000 --statistics測試
--statistics:結束的時候給出統計信息:開始的時間點,結束的時間點,查詢的行數,歸檔的行數,刪除的行數,以及各個階段消耗的總的時間和比例,便於以此進行優化。
--where:給出表中要處理的數據的查詢條件。
--progress:每處理progress指定的行數後,就打印一次信息。
--no-delete:表示不刪除原來的數據,注意:若是不指定此參數,全部處理完成後,都會清理原表中的數據。
--limit:表示每次事務刪除多少條數據,默認1條(注意:若是數據比較多時,也能夠設置大一些,減小循環次數)。
--txn-size:每一個事務提交的數據行數(包括讀寫操做),批量提交,增長該值能夠提高歸檔性能。
--file:數據存放的文件,最好指定絕對路徑,文件名能夠靈活地組合(另外,我測試過寫文件與不寫文件速度幾乎差很少,本來覺得不寫文件速度會快)。
--charset=UTF8 指定字符集爲UTF8
--no-check-charset 不指定字符集
--bulk-delete 批量刪除source上的舊數據(例如每次1000行的批量刪除操做)
--bulk-insert 批量插入數據到dest主機 (看dest的general log發現它是經過在dest主機上LOAD DATA LOCAL INFILE插入數據的)
--replace 將insert into 語句改爲replace寫入到dest庫
--sleep120 每次歸檔了limit個行記錄後的休眠120秒(單位爲秒)
--local 不把optimize或analyze操做寫入到binlog裏面(防止形成主從延遲巨大)
--retries 超時或者出現死鎖的話,pt-archiver進行重試的間隔(默認1s)
--no-version-check 目前爲止,發現部分pt工具對阿里雲RDS操做必須加這個參數
--analyze=ds 操做結束後,優化表空間(d表示dest,s表示source)
--purge 刪除source數據庫的相關匹配記錄,不歸檔刪除數據優化
參考:http://www.ywnds.com/?p=8379 ,http://www.mamicode.com/info-detail-1903758.html阿里雲