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

phpMyAdmin 匯入 SQL 失敗解決方案:命令列 source 指令與大檔案匯入最佳實踐

     編輯:MySQL 資料庫相關知識

phpMyAdmin 匯入 SQL 檔常遇「Cannot modify header information」、「腳本逾時」、「記憶體溢位」、「上傳大小限制」等錯誤。本文提供命令列 source 指令零依賴解法、大檔案分卷策略與參數調優清單。

phpMyAdmin 常見失敗原因

錯誤現象根本原因
Cannot modify header information - headers already sentPHP 輸出緩衝衝突、BOM 頭、錯誤輸出提前發送 Header
Maximum execution time of 300 seconds exceeded大檔案執行超時
Allowed memory size exhaustedPHP memory_limit 不足
Upload file size limit (2MB default)upload_max_filesize / post_max_size 限制
SQL 語法錯誤但命令列正常phpMyAdmin 解析/分割 SQL 邏輯缺陷

方案一:MySQL 命令列 source 指令(推薦,零限制、最高效)

步驟

  1. 開啟命令列終端機 (CMD / PowerShell / Bash)。
  2. 登入 MySQL:
    mysql -u root -p
    -- 或指定資料庫直接登入
    mysql -u root -p target_database
  3. 若未預設資料庫,切換:
    USE target_database;
  4. 執行匯入:
    SOURCE /full/path/to/backup.sql;
    • 路徑含空格需加引號:SOURCE "D:\My Backups\db.sql";
    • 建議將 SQL 檔放在 MySQL 安裝目錄 bin/ 下,僅需檔名:SOURCE backup.sql;

實戰範例

C:\> mysqldump -u root -p --add-drop-table --tables test test_table > C:\test_table.sql
Enter password: ******

C:\> mysql -u root -p
Enter password: ******
Welcome to the MySQL monitor...

mysql> USE test
Database changed
mysql> TRUNCATE TABLE test_table;
Query OK, 4 rows affected (0.02 sec)

mysql> SELECT * FROM test_table;
Empty set (0.00 sec)

mysql> SOURCE C:\test_table.sql
Query OK, 4 rows affected (0.01 sec)
Records: 4  Duplicates: 0  Warnings: 0

方案二:大檔案分卷匯入(超 500MB 必用)

分割工具

  • Windows: GSplit、HJSplit、PowerShell Get-Content -ReadCount 10000
  • Linux: split -l 10000 backup.sql part_ (每 1 萬行一檔)

批次匯入腳本

@echo off
SET MYSQL_BIN="C:\Program Files\MySQL\MySQL Server 5.7\bin\mysql.exe"
SET DB=target_db
SET PARTS_DIR=D:\sql_parts\

FOR %%F IN (%PARTS_DIR%*.sql) DO (
  echo 正在匯入 %%F ...
  %MYSQL_BIN% -u root -p%DB_PASS% %DB% < "%%F"
  IF ERRORLEVEL 1 (
    echo 匯入失敗於 %%F,請檢查
    pause
    exit /b 1
  )
)
echo 全部匯入完成

方案三:phpMyAdmin 參數調優(必須用 Web 介面時)

; php.ini 關鍵調整
upload_max_filesize = 100M
post_max_size = 100M
max_execution_time = 3600
max_input_time = 3600
memory_limit = 512M

; phpMyAdmin config.inc.php
$cfg['ExecTimeLimit'] = 3600;
$cfg['MemoryLimit'] = '512M';
$cfg['UploadDir'] = '/var/lib/phpmyadmin/upload/';  // 伺服器端上傳目錄,繞過瀏覽器上傳
$cfg['SaveDir'] = '/var/lib/phpmyadmin/save/';
  • 利用 UploadDir:用 SFTP/SCP 將大 SQL 傳至伺服器目錄,phpMyAdmin 下拉選單直接選擇匯入,**繞過瀏覽器上傳限制**。

方案四:mysqldump 參數優化匯出(源頭縮小檔案)

mysqldump --single-transaction --quick --no-autocommit \
  --extended-insert=FALSE --max_allowed_packet=1G \
  -u root -p db > backup.sql
  • --extended-insert=FALSE:每行獨立 INSERT,便於分割/除錯,檔案較大但更穩健。
  • --quick:流式讀取,不緩存全表結果集。

總結:選型決策

SQL 檔案大小
├─ < 50MB → phpMyAdmin (調優後) 或 source 均可
├─ 50MB - 500MB → source 指令首選
├─ > 500MB → 分卷 + source 批次腳本
└─ 任何大小 → source 指令為最穩健、零依賴、最高效方案

拋棄 phpMyAdmin 匯入大檔案的幻想,**命令列 source 是 DBA 的標準動作**,穩定、可控、可腳本化、可監控。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved