MySQL導入數據非常慢的解決辦法


 

 

MySQL導出的SQL語句在導入時有可能會非常非常慢,經歷過導入僅45萬條記錄,竟用了近3個小時。在導出時合理使用幾個參數,可以大大加快導入的速度。

-e 使用包括幾個VALUES列表的多行INSERT語法; 
--max_allowed_packet=XXX 客戶端/服務器之間通信的緩存區的最大大小; 
--net_buffer_length=XXX  TCP/IP和套接字通信緩沖區大小,創建長度達net_buffer_length的行

注意:max_allowed_packet和net_buffer_length不能比目標數據庫的配置數值大,否則可能出錯。

首先確定目標庫的參數值 
mysql>show variables like 'max_allowed_packet'; 
mysql>show variables like 'net_buffer_length';

根據參數值書寫mysqldump命令,如: 
mysql>mysqldump -uroot -p 數據庫名  -e --max_allowed_packet=1048576 --net_buffer_length=16384 > SQL文件

如:

mysql>mysqldump -uroot -p discuz  -e --max_allowed_packet=1048576 --net_buffer_length=16384 > discuz.sql

之前2小時才能導入的sql現在幾十秒就可以完成了。

 

 

 

 

 

 

估計會有很多表在mysqldump的時候 長時間處於opening table 狀態,你可以show processlist;觀察下

mysqldump 會鎖表。 另外你如果有 5萬個表,速度也不會太快。

mysqldump -uroot -h127.0.0.1 -p --all-databases --single-transaction --add-drop-database --add-drop-table --comments --complete-insert --default-character-set=utf8 --result-file=path/file.sql

--single-transaction 試一試這個參數
--max_allowed_packet 這個參數可以設置大一些

INNOSB無法直接COPY,用MYSQLDUMP導出,在導出時最好沒有用戶使用,你的表多,速度不會快。

在保持兩機器環境變量,安裝目錄等細節完全一樣的情況下,你可以直接拷數據文件到另一台機器。這樣做風險比較大就是了。。。。。linux的一般在/var/lib/mysql目錄下,這個目錄里以你的數據庫名字命名的目錄,里面就是數據文件。

在mysqldump 加個參數 --quick 試下看看

 

使用mysqldump和mysqlimport來轉移數據庫。對於大的表,比只是使用mysqldump要快得多。在下面的命令中,DUMPDIR代表用來保存mysqldump輸出的目錄全路徑名。
首先,創建保存輸出文件的目錄並備份數據庫:
shell> mkdir DUMPDIRshell>mysqldump --tab=DUMPDIR db_name然后將DUMPDIR目錄中的文件轉移到目標機上相應的目錄中並將文件裝載到MySQL:
shell> mysqladmin create db_name           # create databaseshell> cat DUMPDIR/*.sql | mysql db_name   # create tables in databaseshell> mysqlimport db_name DUMPDIR/*.txt   # load data into tables不要忘記復制MySQL數據庫,因為授權表保存在該數據庫中。你可能需要在新機器上用MySQL root用戶運行命令,直到產生MySQL數據庫。
將mysql數據庫導入目標機器后,執行mysqladmin flush-privileges,以便服務器重載授權表信息。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM