萬盛學電腦網

您现在的位置: 萬盛學電腦網 >> 程式設計 >  >> 資料庫 >> MySQL 教學

MySQL 大數據量匯入實戰:系統命令行直連加速

場景

當 SQL 檔超過幾百 MB,phpMyAdmin 等 Web 工具易超時、記憶體溢出。直接呼叫 mysql 客戶端二進制程式可繞過 PHP 限制,達到原生效能。

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";
}
?>

關鍵優化參數

進階:分卷匯入超大檔案

# Linux 分割 100MB 一份
split -l 100000 backup.sql chunk_
# 依序匯入
for f in chunk_*; do mysql -u root -p db < $f; done

注意事項

  • PHP system() 需 safe_mode=Off、disable_functions 未禁用 system。
  • 生產環境建議改用 proc_open() 非阻塞執行,並記錄輸出日誌。
  • 匯入前務必備份目標資料庫。
copyright © 萬盛學電腦網 all rights reserved
參數說明
--max_allowed_packet=1G允許超大 INSERT 封包
--default-character-set=utf8mb4強制字元集,防亂碼
--force遇錯誤繼續執行 (慎用)
--compress壓縮傳輸 (遠端匯入有效)