当前位置:首页 > PHP

php实现数据库备份

2026-02-13 21:57:26PHP

PHP实现数据库备份的方法

使用mysqldump命令

通过PHP的exec()shell_exec()函数调用系统命令mysqldump可以快速备份MySQL数据库。

$db_host = 'localhost';
$db_user = 'username';
$db_pass = 'password';
$db_name = 'database_name';
$backup_file = 'backup_' . date('Y-m-d') . '.sql';

$command = "mysqldump --host=$db_host --user=$db_user --password=$db_pass $db_name > $backup_file";
exec($command);

确保PHP有执行系统命令的权限,并且mysqldump路径已加入系统环境变量。

使用PHP原生MySQL函数

如果无法使用命令行工具,可以通过PHP的MySQL函数逐表备份数据。

$conn = new mysqli('localhost', 'username', 'password', 'database_name');
$tables = array();
$result = $conn->query("SHOW TABLES");

while ($row = $result->fetch_row()) {
    $tables[] = $row[0];
}

$output = '';
foreach ($tables as $table) {
    $result = $conn->query("SELECT * FROM $table");
    $num_fields = $result->field_count;

    $output .= "DROP TABLE IF EXISTS $table;";
    $row2 = $conn->query("SHOW CREATE TABLE $table")->fetch_row();
    $output .= "\n\n" . $row2[1] . ";\n\n";

    while ($row = $result->fetch_row()) {
        $output .= "INSERT INTO $table VALUES(";
        for ($j = 0; $j < $num_fields; $j++) {
            $row[$j] = addslashes($row[$j]);
            $row[$j] = str_replace("\n", "\\n", $row[$j]);
            if (isset($row[$j])) {
                $output .= '"' . $row[$j] . '"';
            } else {
                $output .= '""';
            }
            if ($j < ($num_fields - 1)) {
                $output .= ',';
            }
        }
        $output .= ");\n";
    }
    $output .= "\n\n\n";
}

$backup_file = 'backup_' . date('Y-m-d') . '.sql';
file_put_contents($backup_file, $output);

使用PDO实现备份

PDO提供了更现代的数据库访问方式,适合多种数据库类型。

$db = new PDO('mysql:host=localhost;dbname=database_name', 'username', 'password');
$tables = $db->query('SHOW TABLES')->fetchAll(PDO::FETCH_COLUMN);

$output = '';
foreach ($tables as $table) {
    $output .= "DROP TABLE IF EXISTS $table;";
    $create = $db->query("SHOW CREATE TABLE $table")->fetch(PDO::FETCH_ASSOC);
    $output .= "\n\n" . $create['Create Table'] . ";\n\n";

    $rows = $db->query("SELECT * FROM $table")->fetchAll(PDO::FETCH_ASSOC);
    foreach ($rows as $row) {
        $output .= "INSERT INTO $table VALUES(";
        $values = array_map(function($value) {
            return '"' . str_replace('"', '\"', $value) . '"';
        }, array_values($row));
        $output .= implode(',', $values) . ");\n";
    }
    $output .= "\n\n\n";
}

file_put_contents('backup.sql', $output);

自动备份与压缩

为节省空间,可以自动压缩备份文件。

$backup_file = 'backup_' . date('Y-m-d') . '.sql';
$gzbackup_file = $backup_file . '.gz';

// 生成SQL备份文件后
$data = file_get_contents($backup_file);
$gzdata = gzencode($data, 9);
file_put_contents($gzbackup_file, $gzdata);
unlink($backup_file); // 删除原始SQL文件

定时自动备份

结合crontab可以实现定时自动备份。

# 在服务器crontab中添加(每天凌晨3点执行)
0 3 * * * /usr/bin/php /path/to/backup_script.php

备份脚本需要有写入权限,建议存储在非web可访问目录确保安全。对于大型数据库,建议分批处理或使用专业备份工具。

php实现数据库备份

标签: 备份数据库
分享给朋友:

相关文章

react如何连接mssql数据库

react如何连接mssql数据库

在React中连接MSSQL数据库 React本身是前端框架,不直接连接数据库。需要通过后端服务(如Node.js)与MSSQL交互,React再通过API调用后端。以下是完整方案: 后端服务搭…

php实现excel导入数据库

php实现excel导入数据库

PHP实现Excel导入数据库的方法 准备工作 确保服务器已安装PHPExcel库或PhpSpreadsheet(PHPExcel的后续版本)。可通过Composer安装: composer req…

js实现数据库操作

js实现数据库操作

JavaScript 实现数据库操作的方法 JavaScript 可以通过多种方式操作数据库,包括浏览器端的本地存储、服务器端的数据库连接以及使用 ORM 框架等。以下是几种常见的实现方法: 浏览…

jquery数据库

jquery数据库

jQuery本身是一个JavaScript库,主要用于简化DOM操作和事件处理,并不直接提供数据库功能。但可以通过以下方式与数据库交互: 使用AJAX与后端通信 通过jQuery的AJAX方…

java如何连接sql数据库

java如何连接sql数据库

连接SQL数据库的方法 Java连接SQL数据库通常使用JDBC(Java Database Connectivity)技术。以下是几种常见的连接方式: 使用JDBC直接连接 加载数据库驱动 不同…

java如何查询数据库

java如何查询数据库

查询数据库的基本步骤 在Java中查询数据库通常使用JDBC(Java Database Connectivity)API。JDBC提供了一套标准接口,允许Java程序与各种数据库进行交互。 加载…