Mysql

MySQL 有什麼方法可以更快地導入一個巨大的(32 GB)sql 轉儲?

  • June 4, 2021

我有這個巨大的 32 GB SQL 轉儲,需要導入 MySQL。我以前不必導入如此龐大的 SQL 轉儲。我照常做:

mysql -uroot dbname < dbname.sql

時間太長了。有一個大約有 3 億行的表,在大約 3 個小時內達到了 150 萬行。因此,整個過程似乎需要 600 小時(即 24 天)並且是不切實際的。所以我的問題是,有沒有更快的方法來做到這一點?

更多資訊/調查結果

  1. 這些表都是 InnoDB 並且沒有定義外鍵。但是,有許多索引。
  2. 我無權訪問原始伺服器和數據庫,因此無法進行新備份或“熱”複製等。
  3. 這裡innodb_flush_log_at_trx_commit = 2建議的設置似乎沒有(明顯可見/指數)改進。
  4. 導入期間的伺服器統計資訊(來自 MySQL Workbench):https ://imgflip.com/gif/ed0c8 。
  5. MySQL 版本是 5.6.20 社區。
  6. innodb_buffer_pool_size = 16M 和 innodb_log_buffer_size = 8M。我需要增加這些嗎?

Percona 的 Vadim Tkachenko 製作了這張精美的 InnoDB 圖形表示

InnoDB 架構

您肯定需要更改以下內容

innodb_buffer_pool_size = 4G
innodb_log_buffer_size = 256M
innodb_log_file_size = 1G
innodb_write_io_threads = 16
innodb_flush_log_at_trx_commit = 0

為什麼要進行這些設置?

像這樣重啟mysql

service mysql restart --innodb-doublewrite=0

這將禁用 InnoDB 雙寫緩衝區

導入您的數據。完成後,正常重啟mysql

service mysql restart

這將重新啟用 InnoDB 雙寫緩衝區

試一試 !!!

旁注:您應該升級到 5.6.21 以獲取最新的安全更新檔

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