phpMyAdmin 受限於 PHP upload_max_filesize、post_max_size、memory_limit、max_execution_time 等配置,導入超大 SQL 文件(>50MB)極易失敗。最直接、最高效的解法是繞過 Web 層,直接在 MySQL 客戶端使用 source 命令。
mysql -u root -p
輸入密碼進入 mysql> 提示符。
USE your_database_name;
source /path/to/your/backup.sql;
路徑規範:
/home/user/backup.sqlD:/backup.sql 或 D:\\backup.sql(正反斜槓均可)Query OK, ... rows affected 即成功。| 維度 | phpMyAdmin | mysql source |
|---|---|---|
| 文件大小限制 | 受 PHP/WebServer 配置限制(通常 < 128MB) | 無實際限制(TB 級測試通過) |
| 內存佔用 | PHP 進程需載入整文件解析,峰值內存大 | 流式讀取執行,恆定低內存 |
| 執行超時 | 受 max_execution_time 限制(默認 30s) | 無超時限制,直到完成 |
| 錯誤定位 | 錯誤信息常被 HTML 包裹,難以定位行號 | 直接顯示行號、錯誤代碼、SQLSTATE |
| 編碼處理 | 易發生 UTF-8/GBK 混淆 | 可顯式指定 SET NAMES utf8mb4; 後再 source |
mysql -u root -p --default-character-set=utf8mb4
mysql> USE your_db;
mysql> SET NAMES utf8mb4;
mysql> source /path/to/backup.sql;
mysqldump -u root -p --single-transaction --quick --routines --triggers --events \
--default-character-set=utf8mb4 --hex-blob your_db > backup.sql
--single-transaction:InnoDB 熱備份不鎖表--quick:流式導出,不緩存全表--hex-blob:二進制字段十六進制導出,防編碼損壞# 安裝 pv (Pipe Viewer)
apt-get install pv # 或 yum/brew
# 導入並顯示進度條
pv /path/to/backup.sql | mysql -u root -p your_db
ERROR 2006 (HY000): MySQL server has gone away → 增加 max_allowed_packet(如 1G):SET GLOBAL max_allowed_packet=1073741824;ERROR 1153 (08S01): Got a packet bigger than 'max_allowed_packet' bytes → 同樣調大該參數。ERROR 1062 (23000): Duplicate entry → 導入前 DROP DATABASE 或使用 --ignore-table 跳過衝突表。Access denied → 確認用戶有目標庫 CREATE, INSERT, LOCK TABLES 權限。「大數據導入,命令行首選」是資料庫運維鐵律。掌握 source、mysqldump、pv 組合拳,讓 TB 級遷移也能從容應對。