首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

MySQL 導入極慢解決方案:命令列直導、優化導出參數、調大緩衝區

     編輯:MySQL 資料庫相關知識

核心對比

方式速度適用場景
phpMyAdmin / Navicat 導入極慢(逐行解析、HTTP 開銷)小檔 < 50MB、圖形化偏好
命令列 mysql 直導快 10~100 倍**生產標準做法**

導入命令


mysql -u root -p dbname < /path/to/dump.sql
# 或進入客戶端
mysql -u root -p
USE dbname;
SOURCE /path/to/dump.sql;

實測:原需數小時的導入,命令列僅需幾十秒~幾分鐘。

導出優化參數(加速導入的關鍵)


mysqldump -u root -p dbname \
  --single-transaction \
  --quick \
  --extended-insert \
  --max_allowed_packet=1G \
  --net_buffer_length=1M \
  > dump.sql
  • --extended-insert:多行 INSERT,大幅減少網路往返與解析。
  • --max_allowed_packet / --net_buffer_length:匹配目標庫設定,**不可超過目標庫值**,否則導入報錯。

目標庫導入前調優(my.cnf)


[mysqld]
innodb_buffer_pool_size=4G        # 視記憶體 60~70%
innodb_log_file_size=1G
innodb_flush_log_at_trx_commit=2  # 導入期間犧牲耐久換速度
sync_binlog=0                     # 關閉 binlog 同步
max_allowed_packet=1G
net_buffer_length=1M

導入完成後**恢復原值**並重啟。

驗證目標庫參數


SHOW VARIABLES LIKE 'max_allowed_packet';
SHOW VARIABLES LIKE 'net_buffer_length';

導出時參數 ≤ 目標庫參數。

完整導出導入範例


# 導出
mysqldump -u root -p jb51.net goodclassification \
  -e --max_allowed_packet=1048576 --net_buffer_length=16384 \
  > www.jb51.net.sql

# 導入
mysql -u root -p jb51.net < www.jb51.net.sql

常見錯誤與對策

  • MySQL server has gone away → 調大 max_allowed_packet、wait_timeout。
  • Packet too large → 導出/導入參數超過限制。
  • 導入卡住無報錯 → 檢查 innodb_flush_log_at_trx_commit=1 導致大量 fsync,暫設為 2。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved