當 SQL 檔超過幾百 MB,phpMyAdmin 等 Web 工具易超時、記憶體溢出。直接呼叫 mysql 客戶端二進制程式可繞過 PHP 限制,達到原生效能。
<?php
// config.php
$dbHost = 'localhost';
$dbUser = 'root';
$dbPass = 'password';
$dbName = 'target_db';
$sqlFile = __DIR__ . '/backup.sql'; // 需先上傳至伺服器
// import.php
$cmd = sprintf(
'mysql -h%s -u%s -p%s %s < %s',
escapeshellarg($dbHost),
escapeshellarg($dbUser),
escapeshellarg($dbPass),
escapeshellarg($dbName),
escapeshellarg($sqlFile)
);
echo "執行命令: $cmd\n";
system($cmd, $retCode);
if ($retCode === 0) {
echo "匯入成功\n";
} else {
echo "匯入失敗,退出碼: $retCode\n";
}
?>
| 參數 | 說明 |
|---|---|
--max_allowed_packet=1G | 允許超大 INSERT 封包 |
--default-character-set=utf8mb4 | 強制字元集,防亂碼 |
--force | 遇錯誤繼續執行 (慎用) |
--compress | 壓縮傳輸 (遠端匯入有效) |