1. 程式人生 > >mysqldump導出數據時,如何調整每個insert語句的values值的數量?

mysqldump導出數據時,如何調整每個insert語句的values值的數量?

備份文件 ria 調整 速度 執行 參考 mys 修改 備份

當我們對一個包含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)

Records: 27961 Duplicates: 0 Warnings: 0

。。

我們發現,每次只能插入2.7萬條左右的記錄,通過修改MySQL variables參數,可能會更改插入效率。但每次insert的值無法改變。後來研究備份文件內容發現,

每個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萬左右。

問題:是不是這個值調的越高越好呢?

經過測試發現:

1、調高後,備份速度明顯快很多。

2、但恢復數據時,由於需要對表進行加鎖,所以加鎖時間也會邊長。

這個要權衡利弊進行設置。

參考文檔:

1、極客時間《MySQL實戰45講》:41 如何快速復制一張表?

mysqldump導出數據時,如何調整每個insert語句的values值的數量?