1. 程式人生 > 其它 >MySQL匯入大資料量sql檔案

MySQL匯入大資料量sql檔案

MySQL匯入資料的方式有多種
  1. 使用工具匯入sql檔案 : 匯入檔案不大的時候使用方便
  2. 終端使用命令匯入 :匯入檔案很大的時候使用
  3. 資料庫內使用source匯入 : 匯入檔案很大的時候使用

ps: 第二和第三種方法沒有進行比較,這裡主要介紹第二種方法


臨時修改引數

innodb_flush_log_at_trx_commit 這個引數預設是 1 ,可設定為0、1、2

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

sync_binlog sync_binlog預設值為1,可設定為[0,N)

  1. 當 sync_binlog =0,像作業系統刷其他檔案的機制一樣,MySQL不會同步到磁碟中去而是依賴作業系統來重新整理binary log。
  2. 當 sync_binlog =N (N>0) ,MySQL 在每寫 N次 二進位制日誌binary log時,會使用fdatasync()函式將它的寫二進位制日誌binary log同步到磁碟中去。
# 1.進入MySQL命令列,臨時修改這兩個引數
mysql -uroot -p

# 2.修改引數
set global innodb_flush_log_at_trx_commit = 2;
set global sync_binlog = 2000;

# 3.退出命令列
exit

# 4.匯入資料庫檔案
mysql -uroot -ppassword testdb < testdb.sql

# 5.匯入成功之後,再把引數修改回去
set global innodb_flush_log_at_trx_commit = 1;
set global sync_binlog = 1;