Mysql

MySQL 設置對加速 mysqldump 導入很有用

  • February 6, 2017

最近我不得不將一個 7 Gb MySQL 轉儲文件導入 MySQL 5.6 伺服器。在具有 1 Gb RAM 的單核 CPU 上導入大約需要 7 個小時。

其他人在具有以下設置的 MySQL 伺服器上測試了導入:

innodb_buffer_pool_size = 8G
query_cache_size = 300M

我對這些設置的相關性有點懷疑(是的,我什至認為設置這麼大的查詢記憶體是不好的)。那會有什麼不同嗎?這些設置不是僅在查詢數據庫時使用,因此與導入無關嗎?

如果是,應該設置哪些設置來加快大型轉儲文件的導入?

根據官方文件,這些值應該臨時設置:

unique_checks = 0
foreign_key_checks = 0

我在這裡讀到它也應該設置

innodb_flush_log_at_trx_commit = 2

但我認為這不會有幫助,因為自動送出模式(每次插入都將日誌刷新到磁碟)在 mysqldump 命令(--opt選項)中已經預設禁用。

建議 #1

無需執行unique_checks = 0foreign_key_checks = 0. 請參閱我 3 年前的文章Speeding up mysqldump / reload(ASPECT #2 顯示了 mysqldump 的標準標頭。第 13 行和第 14 行為您處理禁用這些檢查)

建議 #2

請注意 InnoDB 架構(圖片來自 Percona CTO Vadim Tkachenko)

InnoDB 管道

如果你想重新載入一個 MySQL 實例,你應該暫時禁用雙寫緩衝區。

第1步

登錄到目標伺服器並執行

SET GLOBAL innodb_fast_shutdown = 0;

第2步

通過將innodb_doublewrite 設置為 OFF來重新啟動 mysqld

service mysql restart --innodb-doublewrite=OFF --innodb-fast-shutdown=0

第 3 步

將 mysqldump 載入到目標伺服器

第四步

正常重啟mysqld(將再次啟用雙寫緩衝區)

service mysql restart

由於名稱“雙寫緩衝區”意味著兩次寫入,因此 InnoDB 只會將數據和索引直接寫入表文件,並繞過寫入ibdata1. 也許這會使導入時間加倍(雙關語)

建議#3

預設的innodb_log_buffer_size 是 8M。您需要更大的日誌緩衝區。

請將此行添加到[mysqld]組標題下的 my.cnf

[mysqld]
innodb_log_buffer_size = 128M

然後,在重新載入 mysqldump 之前重新啟動 mysqld。

試一試 !!!

引用自:https://dba.stackexchange.com/questions/150962