工具簡介
MyDB 僅三個 PHP 檔案(mydb.php、backup.php、restore.php),適合虛擬主機、無 SSH 權限環境,支援分卷備份、Web 操作介面、自動遞歸還原分卷。
檔案結構與核心功能
| 檔案 | 角色 | 關鍵功能 |
mydb.php | 資料庫存取類 | 連線、查詢、游標、鎖表、錯誤報告 |
backup.php | 備份主程式 | 全庫/單表、分卷(大小限制)、存本地或伺服器、下載 |
restore.php | 還原主程式 | 上傳/選擇檔案、分卷自動遞歸還原、Session 追蹤進度 |
部署步驟
- 建立可寫目錄
backup/(權限 777 或 PHP 進程可寫)。
2. 修改 backup.php、restore.php 頂部資料庫設定:
$mysqlhost="localhost"; $mysqluser="root"; $mysqlpwd="pass"; $mysqldb="db_name";
3. 瀏覽 backup.php 進行備份,restore.php 進行還原。
備份功能詳解
- 全庫備份:遍歷
SHOW TABLE STATUS,對每表產生 DROP TABLE IF EXISTS + CREATE TABLE + INSERT。
- 單表備份:下拉選單選擇表名。
- 分卷備份:指定單檔大小(KB),超過即切分為
_v1.sql、_v2.sql...,避免 PHP memory_limit / 上傳限制。
- 存放目標:伺服器
backup/ 目錄、或直接瀏覽器下載。
還原功能詳解
- 伺服器檔案還原:下拉選單選擇
backup/ 內檔案。
- 本地上傳還原:支援
multipart/form-data 上傳 .sql。
- 分卷自動遞歸:還原
_v1.sql 後,偵測 _v2.sql 存在 → 3 秒倒數 → 自動導入下一卷,直到結束。
- Session 追蹤:中斷重整可續傳。
核心程式碼片段(備份單表)
function make_header($table) {
global $d;
$sql = "DROP TABLE IF EXISTS `$table`;\n";
$d->query("SHOW CREATE TABLE `$table`");
$d->nextrecord();
$sql .= preg_replace("/\n/", "", $d->f("Create Table")) . ";\n";
return $sql;
}
function make_record($table, $num_fields) {
global $d;
$sql = "INSERT INTO `$table` VALUES(";
$comma = "";
for ($i=0; $i<$num_fields; $i++) {
$sql .= $comma . "'" . mysql_escape_string($d->record[$i]) . "'";
$comma = ",";
}
$sql .= ");\n";
return $sql;
}
注意事項與最佳實務
- 大資料庫:調大
max_execution_time、memory_limit、post_max_size、upload_max_filesize。
- 分卷大小:建議 1-2 MB,避免單檔過大導致匯入超時。
- 安全性:用畢立即刪除三個檔案,或以
.htaccess 限制存取 IP、加密密碼。
- 編碼一致:資料庫、連線、PHP 檔案編碼均為 UTF-8,避免亂碼。
- 不支援:View、Trigger、Event、Stored Procedure 的備份還原(需自行擴充)。
適用場景對照
| 場景 | 推薦工具 |
| 虛擬主機、無 Shell、資料庫 < 500MB | MyDB (本工具) |
| VPS/雲主機、有 Shell、大庫 | mysqldump + XtraBackup |
| 需 PITR、高可用 | binlog + 定期全備 + 從庫 |