本文介紹一套基於 PHP + XML 的 MySQL 數據庫備份方案,包含兩個核心文件:Listtable.php(列表選擇備份表)與 Backup.php(執行備份並生成 XML 文件)。適用於 Linux + Apache + PHP + MySQL 環境。
<?php
$con = mysql_connect('localhost', 'root', 'xswlily');
$lists = mysql_list_tables("embed", $con);
$i = 0;
while ($i < mysql_num_rows($lists)) {
$tb_name = mysql_tablename($lists, $i);
echo "<input type='checkbox' name='table[]' value='$tb_name'> $tb_name <br>";
$i++;
}
?>
此腳本連接數據庫 embed,遍歷所有表名並生成複選框,供用戶勾選欲備份的表。
<?php
if (empty($_POST['table'])) header("Location: listtable.php");
$con = mysql_connect('localhost', 'root', 'xswlily');
$table = $_POST['table'][0]; // 簡化處理單表,實際可循環多表
$query = "SELECT * FROM `$table`";
$result = mysql_db_query("embed", $query, $con);
// 構建 XML 頭部
$filestr = '<?xml version="1.0" encoding="GB2312"?>';
$filestr .= "<$table>s>";
while ($row = mysql_fetch_array($result)) {
$filestr .= "<$table>";
$fields = mysql_list_fields("embed", $table, $con);
$j = 0;
while ($j < mysql_num_fields($fields)) {
$num_fields = mysql_field_name($fields, $j);
$filestr .= "<$num_fields>" . $row[$j] . "</$num_fields>";
$j++;
}
$filestr .= "</$table>";
}
$filestr .= "</$table>s>";
// 輸出並保存文件
echo $filestr;
$filename = $table . ".xml";
$fp = fopen($filename, "w");
fwrite($fp, $filestr);
fclose($fp);
echo "數據表 $table 已經備份成功!";
?>
<表名s>,每行記錄為 <表名>,字段名作為子節點。$_POST['table'] 實現多表同時備份;恢復邏輯只需解析 XML 寫入數據庫。代碼中使用了已棄用的 mysql_* 函數,現代項目建議改用 mysqli 或 PDO,並採用預處理語句防範 SQL 注入。生產環境請務必添加權限驗證、錯誤處理與日誌記錄。