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

MySQL 大量資料導入導出程式實作方法

     編輯:MySQL 資料庫相關知識

PHPMyAdmin 導入導出的限制

  1. 檔案大小限制:資料庫超過一定尺寸(如 6MB)時,導出通常無問題,但導入會失敗。原因是 php.ini 通常限制上傳檔案大小為 2MB,PHPMyAdmin 使用上傳方式導致失敗。
  2. 單引號問題:導出的 .sql 檔導入時,常因單引號處理不當導致失敗,只能用 MySQL 客戶端程式導入。

針對超過 10MB 的資料庫,必須解決這些問題。

解決思路

  • 導出:用 PHPMyAdmin 保存資料庫/表結構,用腳本讀取資料庫內容並保存到檔案。
  • 導入:用 PHPMyAdmin 恢復資料庫/表結構,用腳本讀取檔案並寫入資料庫。

導出程式

呼叫方式:****.php?table=tablename。目前一次保存一個表,每行為一個欄位資料。

<?php
if ($table == "") exit();
mysql_connect("localhost", "name", "password");
mysql_select_db("database");
$result = mysql_query("SELECT * FROM $table");
if (mysql_num_rows($result) <= 0) exit();
echo "開始轉換資料到文字...<br>";
$handle = fopen("$table.txt", "w");
$numfields = mysql_num_fields($result);
fputs($handle, $numfields . "\n");
for ($k = 0; $k < mysql_num_rows($result); $k++) {
    $msg = mysql_fetch_row($result);
    for ($i = 0; $i < $numfields; $i++) {
        $msg[$i] = str_replace("\n", "&&PHP2000MySQLreturn&&", $msg[$i]);
        $msg[$i] = str_replace("\r", "&&PHP2000MySQLreturn&&", $msg[$i]);
        fputs($handle, $msg[$i] . "\n");
    }
    fputs($handle, "------- PHP2000 dump data program V1.0 for MySQL --------\n");
}
fclose($handle);
echo "ok";
?>

導入程式

用法同導出程式。

<?php
if ($table == "") exit();
mysql_connect("localhost", "name", "password");
mysql_select_db("database");
$message = file("$table.txt");
echo $numfields = chop($message[0]);
for ($k = 1; $k < count($message); $k += ($numfields + 1)) {
    $value = "";
    for ($i = $k; $i < ($k + $numfields - 1); $i++) {
        $tmp = str_replace("&&PHP2000MySQLreturn&&", "\n", chop($message[$i]));
        $value .= "'" . addslashes($tmp) . "',";
    }
    $tmp = str_replace("&&PHP2000MySQLreturn&&", "\n", chop($message[$k + $numfields - 1]));
    $value .= "'" . $tmp . "'";
    $query = "INSERT INTO $table VALUES (" . $value . ")";
    echo mysql_error();
    mysql_query($query);
    echo $k . " ";
}
echo "ok";
?>

使用方法與可能問題

  1. 導入時 file() 函數可能有問題(我 10MB 資料未出現問題),可改用 fopen() 逐行讀取。
  2. 導入導出都需用 FTP 操作:導出後用 FTP 將資料傳到本機,導入時先用 FTP 傳資料到伺服器。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved