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