1. 程式人生 > >MySQL 如何快速匯入 dump.sql 到資料庫中?

MySQL 如何快速匯入 dump.sql 到資料庫中?

匯入dump.sql最常用的方法就是:

mysql -uroot database_name < dump.sql
  • 1

但是如果dump.sql檔案比較大的話,匯入過程將會很漫長,下面是通過調整/etc/my.cnf的相關引數,來加快匯入速度。

1. log-bin

即是binlogbinlog主要有兩種用途,一是資料恢復,而是資料同步,在快速匯入的場景下關閉binlog將會有效提升匯入速度:

#log_bin=bin
  • 1

注意:在給master匯入資料的時候注意不要將該引數設定為off,因為masterslave是通過binlog同步資料,關閉binlog會導致資料不一致。

2. innodb_flush_log_at_trx_commit

大批量匯入資料,調整innodb_flush_log_at_trx_commit將會非常有效,該引數有三個選項:

1 -- 是預設值,每次事務提交時都會把 log-buffer 的資料寫入 log file,並且 flush 中去;
2 -- 每次事務提交時都會把 log-buffer 的資料寫入 log file 。但是 flush 操作並不會同時進行。該模式下,MySQL 會每秒執行一次 flush 操作;
0 -- log-buffer 將每秒一次地寫入 log file 中,並且 log file 的 flush 操作同時進行。該模式下,在事務提交的時候,不會主動觸發寫入磁碟的操作。
  • 1
  • 2
  • 3

在應用中該引數到底設定多少取決於應用系統對資料安全和效率的重視程度,但是在快速匯入dump.sql到資料庫這樣的應用場景下,建議設定為0:

innodb_flush_log_at_trx_commit=0
  • 1

3. innodb_log_buffer_size

這個引數是innodb儲存引擎的事務日誌所使用的緩衝區大小,配合innodb_flush_log_at_trx_commit=0使用,在匯入資料的時候可以將該引數相應調大一點:

innodb_log_buffer_size=128M
  • 1

4. innodb_log_file_size

這個引數是innodb日誌檔案大小,增大該檔案大小可以有效減少IO

innodb_log_file_size
=1G
  • 1

注意:如果匯入目標資料庫不是新裝資料庫,修改這個值有可能會導致資料庫啟動不起來。

5. innodb_write_io_threads

該引數是服務.ibd檔案的後臺IO的執行緒數,預設是4,在當前情況下可以適當調大一點:

innodb_write_io_threads=16
  • 1

注意:不要超過伺服器CPU核心的數量。

6. innodb_doublewrite

該引數預設值是1,一般slave會通過設定成0來提升資料庫效能,在master中非常不建議設定為0,但是在當前場景下可以暫時將該引數設定為0:

innodb_doublewrite=0
  • 1

7. 總結:

為了快速匯入資料,/etc/my.cnf引數調整為:

#log_bin=bin
innodb_flush_log_at_trx_commit=0
innodb_log_buffer_size=128M
innodb_log_file_size=1G
innodb_write_io_threads=16
innodb_doublewrite=0
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

!!!注意:上述引數調整隻是為了快速匯入資料,匯入完成後,需要將以上引數調整到之前的值,以保證資料安全。