首页主机资讯Ubuntu如何备份PHP项目

Ubuntu如何备份PHP项目

时间2025-11-19 16:35:03发布访客分类主机资讯浏览1176
导读:Ubuntu下备份PHP项目的实用方案 一 备份范围与准备 明确需要备份的内容: 项目代码目录(如:/var/www/your_project) 数据库(如:MySQL/MariaDB 或 PostgreSQL) 环境与依赖配置(如:....

Ubuntu下备份PHP项目的实用方案

一 备份范围与准备

  • 明确需要备份的内容:
    • 项目代码目录(如:/var/www/your_project
    • 数据库(如:MySQL/MariaDBPostgreSQL
    • 环境与依赖配置(如:.env.htaccess、框架配置、Web 与 PHP 配置)
  • 准备备份存放位置(示例:/opt/backups/php),并确保运行备份的用户对该目录有写权限。
  • 建议将备份与 Web 目录分离,避免被 Web 直接访问;必要时设置目录权限为仅管理员可读写。

二 方案一 Shell脚本一键备份(推荐)

  • 创建备份脚本(示例:/opt/backups/backup_php.sh
#!/usr/bin/env bash
set -Eeuo pipefail

# 配置
PROJECT_DIR="/var/www/your_project"          # 项目根目录
BACKUP_DIR="/opt/backups/php"               # 备份存放目录
DB_HOST="localhost"
DB_USER="dbuser"
DB_PASS="dbpass"
DB_NAME="dbname"
RETENTION_DAYS=30

# 创建备份目录
mkdir -p "$BACKUP_DIR"

# 时间前缀
TS=$(date +"%Y%m%d_%H%M%S")
LOG="$BACKUP_DIR/backup_$TS.log"

# 备份数据库(MySQL/MariaDB)
DB_DUMP="$BACKUP_DIR/${
DB_NAME}
_${
TS}
    .sql.gz"
echo "[$(date)] Dumping database $DB_NAME to $DB_DUMP" >
    >
     "$LOG"
mysqldump -h "$DB_HOST" -u "$DB_USER" -p"$DB_PASS" --single-transaction --routines --triggers "$DB_NAME" \
  | gzip >
 "$DB_DUMP" || {
     echo "DB backup failed";
     exit 1;
 }


# 备份项目文件
CODE_TAR="$BACKUP_DIR/${
PROJECT_DIR##*/}
_${
TS}
    .tar.gz"
echo "[$(date)] Archiving project $PROJECT_DIR to $CODE_TAR" >
    >
     "$LOG"
tar -czf "$CODE_TAR" -C "$(dirname "$PROJECT_DIR")" "$(basename "$PROJECT_DIR")" >
    >
     "$LOG" 2>
    &
    1

# 清理过期备份
echo "[$(date)] Cleaning up backups older than $RETENTION_DAYS days" >
    >
     "$LOG"
find "$BACKUP_DIR" -type f -name "*.sql.gz" -mtime +"$RETENTION_DAYS" -delete
find "$BACKUP_DIR" -type f -name "*.tar.gz" -mtime +"$RETENTION_DAYS" -delete

echo "[$(date)] Backup finished. See $LOG for details."
  • 赋权并测试
chmod +x /opt/backups/backup_php.sh
/opt/backups/backup_php.sh
  • 加入定时任务(每天 02:00 执行)
sudo crontab -e
# 添加
0 2 * * * /opt/backups/backup_php.sh
  • 说明
    • 使用 mysqldump --single-transaction 可在不锁表的情况下获得一致性快照(InnoDB 推荐)。
    • 如需备份 PostgreSQL,可用 pg_dump 生成 SQL 转储,再与代码一起打包归档。

三 方案二 使用PHP脚本实现备份与定时

  • 适用场景:共享主机或无系统级工具权限时,可用 PHP 完成文件打包与数据库导出。
  • 示例(文件 + MySQL,含日志与保留策略)
<
    ?php
declare(strict_types=1);
    
set_time_limit(300);
    

$backupDir = '/opt/backups/php';
    
$projectDir = '/var/www/your_project';
    
$host = 'localhost';
     $user = 'dbuser';
     $pass = 'dbpass';
     $name = 'dbname';
    
$retentionDays = 7;
    

$ts = date('Ymd_His');
    
$logFile = "$backupDir/backup_$ts.log";
    
file_put_contents($logFile, "Start at " . date('c') . "\n", FILE_APPEND);


function run(string $cmd, string $label, string $logFile): void {
    
    exec($cmd . ' 2>
    &
    1', $out, $code);
    
    file_put_contents($logFile, "[$label] exit=$code\n" . implode("\n", $out) . "\n", FILE_APPEND);
    
    if ($code !== 0) exit(1);

}


// 数据库导出
$sqlFile = "$backupDir/{
$name}
    _$ts.sql.gz";
    
run("mysqldump -h$host -u$user -p$pass --single-transaction --routines --triggers $name | gzip >
     '$sqlFile'", 'DB Dump', $logFile);
    

// 代码打包
$tarFile = "$backupDir/" . basename($projectDir) . "_$ts.tar.gz";
    
run("tar -czf '$tarFile' -C '" . dirname($projectDir) . "' '" . basename($projectDir) . "'", 'Code Archive', $logFile);
    

// 清理旧备份
run("find '$backupDir' -type f -name '*.sql.gz' -mtime +$retentionDays -delete", 'Cleanup SQL', $logFile);
    
run("find '$backupDir' -type f -name '*.tar.gz' -mtime +$retentionDays -delete", 'Cleanup Code', $logFile);
    

file_put_contents($logFile, "Finished at " . date('c') . "\n", FILE_APPEND);
    
echo "OK: $sqlFile, $tarFile\n";

  • 定时执行(系统计划任务)
sudo crontab -e
# 每天 02:00 用 CLI 执行
0 2 * * * /usr/bin/php /opt/backups/backup.php
  • 安全建议
    • 将数据库凭据放入受控位置(如受保护目录的配置文件或环境变量),避免硬编码在 Web 可访问路径。
    • 生成的备份文件权限建议设为 600,仅所有者可读写。

四 备份Web与PHP配置及恢复步骤

  • 备份配置(建议纳入同一备份任务)
    • PHP 配置:先定位 php.ini
      • 命令:php --ini | grep "Loaded Configuration File" | awk '{ print $4} '
      • 备份:sudo cp /etc/php/8.1/cli/php.ini /etc/php/8.1/cli/php.ini.bak
    • Web 服务器
      • Nginx/etc/nginx/nginx.conf/etc/nginx/sites-available/your-site
      • Apache/etc/apache2/apache2.conf/etc/apache2/sites-available/your-site.conf
    • 项目敏感与环境文件:.env.htaccess、自定义配置等
  • 恢复步骤
    • 代码:解压覆盖到目标目录
      • tar -xzf your_project_YYYYMMDD_HHMMSS.tar.gz -C /var/www/
    • 数据库:导入 SQL 转储
      • gunzip < your_db_YYYYMMDD_HHMMSS.sql.gz | mysql -h localhost -u dbuser -p dbname
    • 配置:将备份的 php.ini、Nginx/Apache 配置与项目 .env 等恢复到原路径并重启服务
      • sudo systemctl reload nginxsudo systemctl reload apache2
  • 验证
    • 检查站点首页、登录、关键业务接口是否正常
    • 核对数据库记录数、附件与媒体资源是否完整

声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!


若转载请注明出处: Ubuntu如何备份PHP项目
本文地址: https://pptw.com/jishu/751302.html
PHP在Ubuntu上如何实现日志管理 PHP在Ubuntu上如何处理文件上传

游客 回复需填写必要信息