阅读量:120
在PHP中实现数据库备份与恢复,通常涉及以下几个步骤:
数据库备份
- 连接数据库:首先需要连接到目标数据库。
- 选择数据库:确保选择了正确的数据库。
- 执行SQL导出:使用SQL语句导出数据库结构和数据。
示例代码(备份MySQL数据库):
<?php
// 数据库配置
$dbHost = 'localhost';
$dbName = 'your_database';
$dbUser = 'your_username';
$dbPass = 'your_password';
// 创建数据库连接
$conn = new mysqli($dbHost, $dbUser, $dbPass, $dbName);
if ($conn->connect_error) {
die("连接失败: " . $conn->connect_error);
}
// 获取数据库所有表的名称
$tables = [];
$result = $conn->query("SHOW TABLES");
while ($row = $result->fetch_array()) {
$tables[] = $row[0];
}
// 导出数据
$backupFile = 'backup-' . date('Y-m-d-H-i-s') . '.sql';
$backupSql = "SET FOREIGN_KEY_CHECKS=0;\n\n";
foreach ($tables as $table) {
$result = $conn->query("SHOW CREATE TABLE `$table`");
$row = $result->fetch_array();
$backupSql .= $row[1] . ";\n\n";
$result = $conn->query("SELECT * FROM `$table`");
$columns = $result->num_fields;
while ($row = $result->fetch_array()) {
$backupSql .= "INSERT INTO `$table` VALUES(";
for ($i = 0; $i < $columns; $i++) {
$backupSql .= "'" . mysqli_real_escape_string($conn, $row[$i]) . "', ";
}
$backupSql = rtrim($backupSql, ', ') . ");\n";
}
}
$backupSql .= "\nSET FOREIGN_KEY_CHECKS=1;";
// 保存到文件
file_put_contents($backupFile, $backupSql);
echo "数据库备份成功: " . $backupFile;
$conn->close();
?>
数据库恢复
- 连接数据库:同样需要连接到目标数据库。
- 导入SQL文件:使用SQL语句导入备份的数据。
示例代码(恢复MySQL数据库):
<?php
// 数据库配置
$dbHost = 'localhost';
$dbName = 'your_database';
$dbUser = 'your_username';
$dbPass = 'your_password';
// 创建数据库连接
$conn = new mysqli($dbHost, $dbUser, $dbPass, $dbName);
if ($conn->connect_error) {
die("连接失败: " . $conn->connect_error);
}
// 读取备份文件
$backupFile = 'backup-' . date('Y-m-d-H-i-s') . '.sql';
$backupSql = file_get_contents($backupFile);
// 分割SQL语句
$statements = [];
$keyword = ';';
$length = strlen($keyword);
$start = 0;
while (($pos = strpos($backupSql, $keyword, $start)) !== false) {
$statements[] = substr($backupSql, $start, $pos - $start);
$start = $pos + $length;
}
$statements[] = substr($backupSql, $start);
// 执行SQL语句
foreach ($statements as $statement) {
if (trim($statement) === '') continue;
// 防止执行错误的SQL语句
if (strpos($statement, 'CREATE TABLE') !== false) {
$result = $conn->query($statement);
} else {
$result = $conn->query($statement);
}
if (!$result) {
echo "执行错误: " . $statement . "
";
}
}
echo "数据库恢复成功";
$conn->close();
?>
注意事项
- 备份文件安全性:确保备份文件存储在安全的地方,避免被未授权访问。
- 错误处理:在实际应用中,应该添加更多的错误处理逻辑,以便更好地处理连接失败、SQL执行错误等情况。
- 大数据库优化:对于大型数据库,可以考虑使用专门的备份工具(如
mysqldump)来提高备份效率。
通过以上步骤,你可以在PHP中实现基本的数据库备份与恢复功能。