首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 相關知識

PHP 備份 MySQL 資料庫腳本(相容 Joomla、通用可調)

     編輯:PHP 相關知識

一支獨立的 PHP 腳本,讀取 Joomla 設定檔取得資料庫連線資訊,自動備份所有資料表結構與資料,輸出單一 .sql 檔案。稍微調整設定檔載入方式即可套用至其他框架或原生專案。

完整腳本代碼

<?php
// 載入 Joomla 設定
require_once('configuration.php');
$jconfig = new JConfig();

// 建立連線
$conn = mysql_connect($jconfig->host, $jconfig->user, $jconfig->password);
if (!$conn) die('DB 連線失敗: ' . mysql_error());

// 取得所有資料表
$result = mysql_list_tables($jconfig->db);
$tables = [];
while ($row = mysql_fetch_row($result)) {
    $tables[] = $row[0];
}

mysql_select_db($jconfig->db, $conn);

$sql = '';
foreach ($tables as $table) {
    $sql .= backupTable($table, $conn);
}

// 輸出檔案
$filename = 'tmp/backup_' . date('Y-m-d-H-i-s') . '.sql';
$written = file_put_contents($filename, $sql);

if ($written !== false) {
    die('success: ' . $filename);
} else {
    die('寫入檔案失敗,請檢查 tmp 目錄權限');
}

mysql_close($conn);

/**
 * 備份單一資料表:結構 + 資料
 */
function backupTable($table, $conn) {
    $sql = '';

    // 1. DROP + CREATE TABLE
    $res = mysql_query("SHOW CREATE TABLE `$table`", $conn);
    $row = mysql_fetch_assoc($res);
    $sql .= "DROP TABLE IF EXISTS `$table`;\n";
    $sql .= $row['Create Table'] . ";\n\n";

    // 2. INSERT 資料
    $res = mysql_query("SELECT * FROM `$table`", $conn);
    $rows = [];
    while ($row = mysql_fetch_assoc($res)) {
        $fields = [];
        foreach ($row as $val) {
            $fields[] = "'" . mysql_escape_string($val) . "'";
        }
        $rows[] = '(' . implode(',', $fields) . ')';
    }

    if (!empty($rows)) {
        $sql .= "INSERT INTO `$table` VALUES\n" . implode(",\n", $rows) . ";\n\n";
    }

    return $sql;
}
?>

關鍵說明

  • 相依性:需載入 configuration.php 並實例化 JConfig,非 Joomla 專案請改為直接定義 $host、$user、$pass、$db。
  • 擴展性:可加入 --ignore-table、--single-transaction、壓縮輸出(gzencode)、上傳至雲端儲存等功能。
  • 安全性:tmp/ 目錄請設定 .htaccess Deny from all 或置於網站根目錄外,避免備份檔被直接下載。
  • 效能:大資料表建議分批 LIMIT 讀取、或改用 mysqldump 呼叫系統指令(exec())更高效。
  • 棄用警告:mysql_* 函數已棄用(PHP 7.0+ 移除),新專案請改用 mysqli 或 PDO 重寫。

排程自動化建議

# crontab -e
# 每天凌晨 3 點備份
0 3 * * * /usr/bin/php /path/to/backup.php >> /var/log/db_backup.log 2>&1

配合 logrotate 管理日誌,定期清理舊備份檔(find tmp/ -mtime +7 -delete)。

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