當咱們對一個包含1千萬行記錄的表history執行導出時,假設只用的備份語句以下:mysql
#mysqldump -uroot -p'123456' --set-gtid-purged=OFF tdb history>history.sqlsql
當咱們執行表的恢復時,執行以下語句:測試
mysql> source history.sqlspa
。。。文檔
Query OK, 0 rows affected (0.01 sec)class
Query OK, 27893 rows affected (1.78 sec)
Records: 27893 Duplicates: 0 Warnings: 0效率
Query OK, 27961 rows affected (0.46 sec)
Records: 27961 Duplicates: 0 Warnings: 0方法
。。數據
咱們發現,每次只能插入2.7萬條左右的記錄,經過修改MySQL variables參數,可能會更改插入效率。但每次insert的值沒法改變。後來研究備份文件內容發現,margin
每一個insert語句後面的values值大約就在2.7萬左右。不是一條insert語句把全部values都插入的。那若是我想更改mysqldump導出時每一個insert語句的values值的數量,該如何操做呢?
方法以下:
# mysqldump -uroot -p'123456' --net-buffer-length=2046528 --set-gtid-purged=OFF tdb history>history.sql
經過修改--net-buffer-length的值來實現。默認值爲1046528。而mysqld中該參數的默認值爲16384。
修改後,我發現每一個insert語句的values值,能夠高達5.4萬左右。
問題:是否是這個值調的越高越好呢?
通過測試發現:
一、調高後,備份速度明顯快不少。
二、但恢復數據時,因爲須要對錶進行加鎖,因此加鎖時間也會邊長。
這個要權衡利弊進行設置。
參考文檔:
一、極客時間《MySQL實戰45講》:41 如何快速複製一張表?