当前位置:首页 > PHP

php实现数据库备份

2026-04-03 05:34:16PHP

使用 mysqldump 命令备份数据库

通过 PHP 的 exec()shell_exec() 函数调用系统命令 mysqldump 实现备份。需要确保服务器已安装 MySQL 客户端工具,且 PHP 有执行系统命令的权限。

$dbHost = 'localhost';
$dbUser = 'username';
$dbPass = 'password';
$dbName = 'database_name';
$backupFile = '/path/to/backup/' . $dbName . '_' . 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 "备份失败,错误代码: " . $returnVar;
}

使用 PHP MySQLi 扩展逐表备份

通过 MySQLi 查询数据库结构及数据,逐表生成 SQL 语句并写入文件。适合无系统命令执行权限的环境。

php实现数据库备份

$db = new mysqli('localhost', 'username', 'password', 'database_name');
$backupFile = '/path/to/backup/backup_' . date("Y-m-d_H-i-s") . '.sql';
$handle = fopen($backupFile, 'w');

// 获取所有表名
$tables = $db->query("SHOW TABLES");
while ($table = $tables->fetch_array()) {
    $tableName = $table[0];
    fwrite($handle, "-- 表结构: {$tableName}\n");

    // 导出表结构
    $createTable = $db->query("SHOW CREATE TABLE {$tableName}")->fetch_array();
    fwrite($handle, $createTable[1] . ";\n\n");

    // 导出表数据
    $rows = $db->query("SELECT * FROM {$tableName}");
    while ($row = $rows->fetch_assoc()) {
        $values = array_map([$db, 'real_escape_string'], $row);
        fwrite($handle, "INSERT INTO {$tableName} VALUES ('" . implode("', '", $values) . "');\n");
    }
    fwrite($handle, "\n");
}

fclose($handle);
$db->close();

使用 PDO 实现数据备份

通过 PDO 获取数据并生成 SQL 文件,兼容多种数据库类型。

php实现数据库备份

$pdo = new PDO('mysql:host=localhost;dbname=database_name', 'username', 'password');
$backupFile = '/path/to/backup/backup_' . date("Y-m-d_H-i-s") . '.sql';
$handle = fopen($backupFile, 'w');

// 获取所有表名
$tables = $pdo->query("SHOW TABLES")->fetchAll(PDO::FETCH_COLUMN);
foreach ($tables as $table) {
    fwrite($handle, "-- 表结构: {$table}\n");

    // 导出表结构
    $createTable = $pdo->query("SHOW CREATE TABLE {$table}")->fetch(PDO::FETCH_ASSOC);
    fwrite($handle, $createTable['Create Table'] . ";\n\n");

    // 导出表数据
    $rows = $pdo->query("SELECT * FROM {$table}");
    while ($row = $rows->fetch(PDO::FETCH_ASSOC)) {
        $values = array_map([$pdo, 'quote'], $row);
        fwrite($handle, "INSERT INTO {$table} VALUES (" . implode(", ", $values) . ");\n");
    }
    fwrite($handle, "\n");
}

fclose($handle);

备份文件压缩与下载

将生成的 SQL 文件压缩为 ZIP 格式,并提供下载链接。

$backupFile = '/path/to/backup/backup.sql';
$zipFile = '/path/to/backup/backup.zip';

// 创建 ZIP 文件
$zip = new ZipArchive();
if ($zip->open($zipFile, ZipArchive::CREATE) === TRUE) {
    $zip->addFile($backupFile, 'backup.sql');
    $zip->close();

    // 提供下载
    header('Content-Type: application/zip');
    header('Content-Disposition: attachment; filename="' . basename($zipFile) . '"');
    readfile($zipFile);
    unlink($zipFile); // 删除临时文件
}

定时自动备份

结合 Cron 任务实现定时备份。创建 PHP 脚本后,通过服务器 Cron 设置定期执行。

# 每天凌晨 3 点执行备份
0 3 * * * /usr/bin/php /path/to/backup_script.php

注意事项

  • 确保备份目录有写入权限。
  • 敏感数据库信息应避免硬编码,建议使用配置文件或环境变量。
  • 大数据库备份可能消耗较多内存,需调整 PHP 内存限制。
  • 定期清理旧备份文件,避免磁盘空间不足。

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

相关文章

java如何连接mysql数据库

java如何连接mysql数据库

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

react中如何应用数据库

react中如何应用数据库

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

php实现数据库备份

php实现数据库备份

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

php实现数据库连接池

php实现数据库连接池

PHP 实现数据库连接池的方法 PHP 本身没有内置的数据库连接池功能,但可以通过多种方式实现类似效果。以下是几种常见的方法: 使用 PDO 持久连接 PDO 支持持久连接,可以在多个请求之间保持连…

jquery数据库

jquery数据库

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

java如何查询数据库

java如何查询数据库

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