PHP项目的备份需覆盖源代码、数据库、配置文件、静态资源四大类,确保数据完整性:
/var/www/html/your_project);/etc/php/8.2/)、Web服务器配置(Apache的/etc/apache2/、Nginx的/etc/nginx/)、.htaccess等;public或static子目录)。tar命令(支持压缩,节省空间);mysqldump,PostgreSQL用pg_dump(生成可导入的SQL文件);cron定时任务定期执行备份脚本。将项目目录(如/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:指定压缩包路径。mysqldump -u db_username -p'your_password' db_name > /backup/php_projects/db_name_$(date +%Y%m%d_%H%M%S).sql
输入密码后,数据库结构和数据将导出到指定SQL文件。pg_dump -U db_username -d db_name > /backup/php_projects/db_name_$(date +%Y%m%d_%H%M%S).sql
需提前配置pg_hba.conf允许本地连接。打包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/
/etc/nginx/)。通过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
tar -tzvf backup.tar.gz查看内容,或计算MD5校验值);sudo systemctl stop apache2
sudo systemctl stop mysql
解压备份的压缩包到项目原目录:
sudo tar -xzvf /backup/php_projects/my_project_20250910_120000.tar.gz -C /
-x:解压;-C /:指定解压到根目录(项目原路径为/var/www/html/my_project)。mysql -u db_username -p'your_password' db_name < /backup/php_projects/db_name_20250910_120000.sql
psql -U db_username -d db_name -f /backup/php_projects/db_name_20250910_120000.sql
执行后,数据库将恢复到备份时的状态。解压配置文件压缩包到原目录:
sudo tar -xzvf /backup/php_projects/configs_20250910_120000.tar.gz -C /
/etc/php/8.2/apache2/php.ini通常属root:root,权限为644)。恢复完成后,启动Web服务器和数据库服务:
sudo systemctl start apache2
sudo systemctl start mysql
sudo systemctl start nginx。http://your_server_ip/my_project),检查页面是否正常加载;/var/log/apache2/error.log或/var/log/nginx/error.log),确认无报错;~/.my.cnf(MySQL)或~/.pgpass(PostgreSQL)存储凭据;