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)存储凭据;