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,以便服務器重載授權表信息。