温馨提示×

Debian上PHP项目如何备份与恢复

小樊
51
2025-09-19 12:51:38
栏目: 编程语言

Debian上PHP项目备份与恢复指南

一、备份流程

1. 确定备份内容

PHP项目的备份需覆盖源代码、数据库、配置文件、静态资源四大类,确保数据完整性:

  • 源代码:项目PHP文件(如/var/www/html/your_project);
  • 数据库:项目使用的MySQL/PostgreSQL数据库(含表结构与数据);
  • 配置文件:PHP配置(/etc/php/8.2/)、Web服务器配置(Apache的/etc/apache2/、Nginx的/etc/nginx/)、.htaccess等;
  • 静态资源:图片、CSS、JavaScript等(通常位于项目目录的publicstatic子目录)。

2. 备份工具选择

  • 文件系统备份:使用tar命令(支持压缩,节省空间);
  • 数据库备份:MySQL用mysqldump,PostgreSQL用pg_dump(生成可导入的SQL文件);
  • 自动化:通过cron定时任务定期执行备份脚本。

3. 具体备份命令

(1)备份源代码

将项目目录(如/var/www/html/my_project)打包为压缩文件,文件名包含时间戳(便于区分版本):

sudo tar -czvf /backup/php_projects/my_project_$(date +%Y%m%d_%H%M%S).tar.gz /var/www/html/my_project
  • -c:创建新压缩包;
  • -z:使用gzip压缩;
  • -v:显示详细过程;
  • -f:指定压缩包路径。

(2)备份数据库

  • MySQL
    mysqldump -u db_username -p'your_password' db_name > /backup/php_projects/db_name_$(date +%Y%m%d_%H%M%S).sql
    
    输入密码后,数据库结构和数据将导出到指定SQL文件。
  • PostgreSQL
    pg_dump -U db_username -d db_name > /backup/php_projects/db_name_$(date +%Y%m%d_%H%M%S).sql
    
    需提前配置pg_hba.conf允许本地连接。

(3)备份配置文件

打包PHP、Web服务器配置目录:

sudo tar -czvf /backup/php_projects/configs_$(date +%Y%m%d_%H%M%S).tar.gz /etc/php/8.2/ /etc/apache2/ /etc/nginx/
  • 替换路径为实际配置目录(如Nginx用户需调整/etc/nginx/)。

4. 自动化备份(可选)

通过cron定时执行备份脚本,避免手动操作:

  • 创建备份脚本/usr/local/bin/php_backup.sh
    #!/bin/bash
    BACKUP_DIR="/backup/php_projects"
    PROJECT_DIR="/var/www/html/my_project"
    DB_NAME="db_name"
    DB_USER="db_username"
    DB_PASS="your_password"
    
    # 创建备份目录
    mkdir -p "$BACKUP_DIR"
    
    # 备份源代码
    tar -czvf "$BACKUP_DIR/my_project_$(date +%Y%m%d_%H%M%S).tar.gz" "$PROJECT_DIR"
    
    # 备份数据库
    mysqldump -u "$DB_USER" -p"$DB_PASS" "$DB_NAME" > "$BACKUP_DIR/db_name_$(date +%Y%m%d_%H%M%S).sql"
    
    # 删除7天前的备份(保留最近7天)
    find "$BACKUP_DIR" -type f -name "*.tar.gz" -mtime +7 -delete
    find "$BACKUP_DIR" -type f -name "*.sql" -mtime +7 -delete
    
  • 赋予脚本执行权限:
    chmod +x /usr/local/bin/php_backup.sh
    
  • 添加cron任务(每天凌晨2点执行):
    crontab -e
    
    插入以下行:
    0 2 * * * /usr/local/bin/php_backup.sh
    

二、恢复流程

1. 准备工作

  • 确保有足够的磁盘空间
  • 确认备份文件的完整性(可通过tar -tzvf backup.tar.gz查看内容,或计算MD5校验值);
  • 恢复前停止相关服务(如Apache/Nginx、MySQL),避免文件冲突:
    sudo systemctl stop apache2
    sudo systemctl stop mysql
    

2. 恢复步骤

(1)恢复源代码

解压备份的压缩包到项目原目录:

sudo tar -xzvf /backup/php_projects/my_project_20250910_120000.tar.gz -C /
  • -x:解压;
  • -C /:指定解压到根目录(项目原路径为/var/www/html/my_project)。

(2)恢复数据库

  • MySQL
    mysql -u db_username -p'your_password' db_name < /backup/php_projects/db_name_20250910_120000.sql
    
  • PostgreSQL
    psql -U db_username -d db_name -f /backup/php_projects/db_name_20250910_120000.sql
    
    执行后,数据库将恢复到备份时的状态。

(3)恢复配置文件

解压配置文件压缩包到原目录:

sudo tar -xzvf /backup/php_projects/configs_20250910_120000.tar.gz -C /
  • 恢复后需检查配置文件的权限(如/etc/php/8.2/apache2/php.ini通常属root:root,权限为644)。

3. 重启服务

恢复完成后,启动Web服务器和数据库服务:

sudo systemctl start apache2
sudo systemctl start mysql
  • 如使用Nginx,替换为sudo systemctl start nginx

4. 验证恢复

  • 访问项目URL(如http://your_server_ip/my_project),检查页面是否正常加载;
  • 查看PHP错误日志(/var/log/apache2/error.log/var/log/nginx/error.log),确认无报错;
  • 测试数据库连接(如通过项目中的数据库操作页面),确保数据完整。

三、注意事项

  • 安全性:备份文件包含敏感信息(如数据库密码),需存储在安全位置(如加密的外部硬盘、云存储的私有 bucket);避免在脚本中硬编码密码,可使用~/.my.cnf(MySQL)或~/.pgpass(PostgreSQL)存储凭据;
  • 定期测试:每月至少测试一次备份文件的恢复流程,确保备份有效;
  • 版本控制:源代码建议使用Git等版本控制系统管理,减少备份文件大小;
  • 存储空间:定期清理旧备份(如保留最近30天),避免磁盘空间耗尽。

0