pt-archiver數據導入遷移工具
一直想明白,如何將一個大表的數據,每多少行數據已提交,分批次的轉儲到另外的地方,幸好有現成的工具,趕緊把實驗成功的操作記錄下來。
原理就不解釋了,直接上最常用的命令。
數據導入導出工具pt-archiver
工具可以將MySQL的表數據導出到一個新表或者一個文件,也有自己的應用場景,比如數據歸檔,刪除數據,數據合並等。
具體用法:
pt-archiver [OPTIONS] --source DSN --where WHERE
PT工具鏈接參數DSN一般適用於所有toolkit工具。
DSN的詳細參數:
a:查詢
A:字符集
b:true代表禁用binlog
D:數據庫
u:數據庫鏈接賬號
p:數據庫鏈接密碼
h:主機IP
F:配置文件位置
i:是否使用某索引
m:插件模塊
P:端口號
S:socket文件
t:表
具體使用,從一張表導入到另外一張表,要注意的是新表必須是已經建立好的一樣的表結構,不會自動創建表,而且where條件是必須指定的:
環境:
源表: t_user
目標表: t_user_tg
pt-archiver --source h=192.168.65.128,P=3306,D=db222,t=t_user,u=root,p=rootpwd --dest h=192.168.65.128,P=3306,D=db223,t=t_user_tg,u=root,p=rootpwd --no-check-charset --share-lock --sleep=1 --where 'id>=0' --no-delete --progress 1000 --limit 1000 --txn-size 1000 --statistics --file '/tmp/arch_%Y-%m-%d-%D.%t.log'
[root@my3-224 ~]# pt-archiver --source h=192.168.65.128,P=3306,D=db222,t=t_user,u=root,p=rootpwd --dest h=192.168.65.128,P=3306,D=db223,t=t_user_tg,u=root,p=rootpwd --no-check-charset --sleep=1 --where 'id>=0' --no-delete --progress 1000 --limit 1000 --txn-size 1000 --statistics --file '/tmp/arch_%Y-%m-%d-%D.%t.log' ... ... 2018-05-24T05:55:43 21773 12967000 2018-05-24T05:55:45 21775 12968000 2018-05-24T05:55:46 21777 12969000 2018-05-24T05:55:48 21778 12970000 2018-05-24T05:55:49 21779 12970603 Started at 2018-05-23T23:52:49, ended at 2018-05-24T05:55:50 Source: D=db222,P=3306,h=192.168.65.128,p=...,t=t_user,u=root Dest: D=db223,P=3306,h=192.168.65.128,p=...,t=t_user_tg,u=root SELECT 12970603 INSERT 12970603 DELETE 0 Action Count Time Pct sleep 12971 12986.5408 59.62 inserting 12970603 6889.6769 31.63 commit 25942 570.4564 2.62 print_file 12970603 129.9266 0.60 select 12972 97.4990 0.45 other 0 1106.9789 5.08
從中可以看出來,休眠12986秒,inserting 6889.6769秒.
所有時間加起來:
12986.5408 6889.6769 570.4564 129.9266 97.499 1106.9789 21781.0786
大約每秒執行效率: 12970603/2181.0786 = 5946.8755504730552
個人測試環境虛擬機,可以看出來,效率還是挺高的。