当前位置:首页 > PHP

php实现数据备份

2026-02-16 06:15:07PHP

PHP实现数据备份的方法

使用MySQL命令行工具

通过PHP的exec()shell_exec()函数调用系统命令实现MySQL数据库备份。以下代码示例展示如何备份指定数据库:

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

$command = "mysqldump --host=$dbHost --user=$dbUser --password=$dbPass $dbName > $backupFile";
exec($command, $output, $returnVar);

if ($returnVar === 0) {
    echo "数据库备份成功,文件保存在: $backupFile";
} else {
    echo "数据库备份失败";
}

使用PHP原生MySQL函数

对于无法使用命令行工具的环境,可以通过PHP的MySQL函数逐表备份数据:

php实现数据备份

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

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

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

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

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

$backupFile = 'backup_' . date("Y-m-d-H-i-s") . '.sql';
$handle = fopen($backupFile, 'w+');
fwrite($handle, $backupContent);
fclose($handle);

使用PDO实现数据备份

对于使用PDO连接数据库的情况,可以采用以下方法:

try {
    $pdo = new PDO('mysql:host=localhost;dbname=database_name', 'username', 'password');
    $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

    $tables = $pdo->query("SHOW TABLES")->fetchAll(PDO::FETCH_COLUMN);
    $backupContent = "";

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

        $rows = $pdo->query("SELECT * FROM `$table`")->fetchAll(PDO::FETCH_ASSOC);
        if (count($rows) > 0) {
            $columns = array_keys($rows[0]);
            $backupContent .= "INSERT INTO `$table` (`" . implode('`, `', $columns) . "`) VALUES \n";

            $values = array();
            foreach ($rows as $row) {
                $rowValues = array();
                foreach ($row as $value) {
                    $rowValues[] = $pdo->quote($value);
                }
                $values[] = "(" . implode(', ', $rowValues) . ")";
            }
            $backupContent .= implode(",\n", $values) . ";\n\n";
        }
    }

    $backupFile = 'backup_' . date("Y-m-d-H-i-s") . '.sql';
    file_put_contents($backupFile, $backupContent);

} catch (PDOException $e) {
    echo "备份失败: " . $e->getMessage();
}

定时自动备份

结合Linux的crontab可以实现定时自动备份:

php实现数据备份

# 编辑crontab
crontab -e

# 添加以下内容,每天凌晨3点执行备份
0 3 * * * /usr/bin/php /path/to/backup_script.php

备份文件压缩

为节省存储空间,可以对备份文件进行压缩:

$backupFile = 'backup_' . date("Y-m-d-H-i-s") . '.sql';
$gzBackupFile = $backupFile . '.gz';

// 创建备份文件内容...
// $backupContent = ...

file_put_contents($backupFile, $backupContent);
$gz = gzopen($gzBackupFile, 'w9');
gzwrite($gz, file_get_contents($backupFile));
gzclose($gz);
unlink($backupFile); // 删除原始SQL文件

备份到远程服务器

通过FTP将备份文件传输到远程服务器:

$ftpServer = 'ftp.example.com';
$ftpUser = 'username';
$ftpPass = 'password';
$remoteFile = 'backups/' . basename($backupFile);

$connId = ftp_connect($ftpServer);
$loginResult = ftp_login($connId, $ftpUser, $ftpPass);

if (ftp_put($connId, $remoteFile, $backupFile, FTP_BINARY)) {
    echo "备份文件已成功上传到远程服务器";
} else {
    echo "上传备份文件失败";
}

ftp_close($connId);

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

相关文章

php 实现自动收货

php 实现自动收货

PHP 实现自动收货功能 自动收货功能通常用于电商系统,在订单超过一定时间未手动确认收货时自动完成订单。以下是实现方法: 数据库设计 需要订单表包含以下关键字段: CREATE TABLE…

php实现定时任务

php实现定时任务

PHP 实现定时任务的几种方法 在 PHP 中实现定时任务可以通过多种方式完成,具体选择取决于项目需求和服务器环境。以下是常见的实现方法: 使用 Cron 任务 Cron 是 Linux 系统中常用…

php实现表单

php实现表单

PHP 表单基础实现 创建一个简单的 PHP 表单需要 HTML 表单结构和 PHP 处理脚本。以下是一个完整的示例: HTML 表单部分 (form.html) <form action=…

php实现排序

php实现排序

PHP 数组排序方法 PHP 提供了多种内置函数用于数组排序,适用于不同的排序需求。以下是常见的排序方法: 按值升序排序 sort() 函数对数组按值升序排序,重置键名(索引数组适用): $num…

php搜索功能实现

php搜索功能实现

实现基本的PHP搜索功能 使用MySQL数据库和PHP实现简单的关键词搜索功能。需要确保数据库中有可供搜索的表和数据。 // 连接数据库 $conn = new mysqli('localhost'…

php 无限分类的实现

php 无限分类的实现

无限分类的实现方法 无限分类通常用于构建树形结构数据,如商品分类、多级菜单等。以下是几种常见的实现方式: 邻接列表模型(Adjacency List) 邻接列表是最简单的实现方式,通过在每个节点中存…