MySQL 設置對加速 mysqldump 導入很有用
最近我不得不將一個 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 = 0
和foreign_key_checks = 0
. 請參閱我 3 年前的文章Speeding up mysqldump / reload(ASPECT #2 顯示了 mysqldump 的標準標頭。第 13 行和第 14 行為您處理禁用這些檢查)建議 #2
請注意 InnoDB 架構(圖片來自 Percona CTO Vadim Tkachenko)
如果你想重新載入一個 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。
試一試 !!!