当前位置:首页 > PHP

php实现数据库备份

2026-01-28 23:49:35PHP

使用 mysqldump 命令

在 PHP 中调用系统命令 mysqldump 是最常见的数据库备份方法。该方法适用于 MySQL 或 MariaDB 数据库。

$dbHost = 'localhost';
$dbUser = 'username';
$dbPass = 'password';
$dbName = 'database_name';
$backupFile = 'backup_' . date('Y-m-d') . '.sql';

$command = "mysqldump --host=$dbHost --user=$dbUser --password=$dbPass $dbName > $backupFile";
system($command);

该方法会生成一个 SQL 文件,包含数据库结构和数据。

使用 PHP 原生函数

对于小型数据库,可以使用 PHP 的数据库函数逐表备份:

php实现数据库备份

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

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

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

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

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

$handle = fopen('backup.sql','w+');
fwrite($handle,$return);
fclose($handle);

使用 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;\n";
    $create = $db->query("SHOW CREATE TABLE $table")->fetch(PDO::FETCH_ASSOC);
    $output .= $create['Create Table'] . ";\n\n";

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

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

定时自动备份

结合 cron 任务可以实现定时自动备份:

php实现数据库备份

// backup.php 文件内容
$filename = 'backup_' . date('Y-m-d') . '.sql.gz';
$command = "mysqldump --host=localhost --user=username --password=password database_name | gzip > $filename";
system($command);

然后在 crontab 中添加:

0 3 * * * /usr/bin/php /path/to/backup.php

备份到远程服务器

将备份文件传输到远程服务器增加安全性:

$localFile = 'backup.sql';
$remoteFile = '/remote/path/backup.sql';
$sshUser = 'username';
$sshHost = 'remote.server.com';

// 生成备份文件
// ...

// 使用 SCP 传输
$command = "scp $localFile $sshUser@$sshHost:$remoteFile";
system($command);

注意事项

数据库备份时应考虑以下安全措施:

  • 不要在 PHP 文件中硬编码数据库凭据
  • 备份文件应存储在 web 根目录之外
  • 对备份文件设置适当的文件权限
  • 考虑加密敏感数据备份
  • 定期测试备份文件的恢复功能

对于大型数据库,建议使用专业备份工具或数据库管理系统自带的功能,PHP 方法更适合中小型数据库的定期备份需求。

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

相关文章

php数据库实现

php数据库实现

PHP 连接 MySQL 数据库 使用 mysqli 扩展连接 MySQL 数据库: <?php $servername = "localhost"; $username = "usernam…

java如何连接mysql数据库

java如何连接mysql数据库

连接 MySQL 数据库的步骤 添加 MySQL 驱动依赖 在项目中引入 MySQL 的 JDBC 驱动。如果使用 Maven,可以在 pom.xml 中添加以下依赖: <dependenc…

react如何连接mssql数据库

react如何连接mssql数据库

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

react中如何应用数据库

react中如何应用数据库

在React中应用数据库的方法 React本身是一个前端库,不直接与数据库交互。通常需要通过后端服务或API来连接数据库。以下是几种常见方法: 使用后端API 创建独立的后端服务(如Node.js、…

react如何连接MySQL数据库

react如何连接MySQL数据库

连接MySQL数据库的方法 React本身是一个前端框架,无法直接连接MySQL数据库。通常需要通过后端服务(如Node.js、PHP、Java等)作为中间层来处理数据库操作,React再通过API与…

react如何上传图片到数据库

react如何上传图片到数据库

上传图片到数据库的流程 在React中上传图片到数据库通常涉及前端处理文件上传、后端接收文件并存储到数据库的过程。以下是具体实现方法: 前端实现(React部分) 创建一个文件上传表单组件:…