需通过shell脚本实现php项目数据库与代码的每日自动备份:先建分层备份目录并设权限,再编写单项目或配置驱动的多项目备份脚本,结合mysqldump、tar压缩、定时任务及完整性校验与7日清理策略。

如果您需要为PHP项目建立可靠的备份机制,确保数据库与代码文件每日自动归档,则需通过Shell脚本协调系统定时任务、MySQL导出命令及文件压缩操作。以下是实现该目标的具体步骤:
一、创建备份目录结构并设置权限
为避免备份文件混杂或写入失败,需预先在服务器上建立专用目录,并赋予运行脚本的用户(如www-data或root)读写权限。目录应按日期分层,便于检索和清理。
1、执行命令创建根备份目录:sudo mkdir -p /backup/php-projects。
2、创建按年月日划分的子目录:sudo mkdir -p /backup/php-projects/$(date +\%Y)/$(date +\%m)/$(date +\%d)。
3、将目录所有权设为当前用户:sudo chown $USER:$USER /backup/php-projects。
二、编写基础备份脚本(单项目模式)
该脚本聚焦单一PHP项目,分别导出指定MySQL数据库并打包项目代码目录,生成带时间戳的tar.gz归档文件。
1、使用vim或nano新建脚本:nano /usr/local/bin/backup-php-project.sh。
2、写入以下内容(请替换DB_NAME、DB_USER、DB_PASS、PROJECT_PATH为实际值):#!/bin/bash\nDATE=$(date +\%Y\%m\%d_\%H\%M\%S)\nDB_NAME="myapp_db"\nDB_USER="backup_user"\nDB_PASS="secure_password"\nPROJECT_PATH="/var/www/html/myapp"\nBACKUP_DIR="/backup/php-projects/$(date +\%Y)/$(date +\%m)/$(date +\%d)"\nmkdir -p $BACKUP_DIR\nmysqldump -u$DB_USER -p$DB_PASS $DB_NAME | gzip > $BACKUP_DIR/db_${DB_NAME}_${DATE}.sql.gz\ntar -czf $BACKUP_DIR/code_myapp_${DATE}.tar.gz -C $(dirname $PROJECT_PATH) $(basename $PROJECT_PATH)。
3、赋予脚本可执行权限:chmod +x /usr/local/bin/backup-php-project.sh。
三、编写增强备份脚本(多项目配置模式)
该方案支持通过外部配置文件管理多个PHP项目的数据库凭证与路径,提升脚本复用性与维护性,避免硬编码敏感信息。
1、创建配置文件:nano /etc/backup/php-projects.conf,内容格式为每行一个项目,字段以空格分隔:myapp_db backup_user secure_password /var/www/html/myapp。
2、修改脚本读取配置并循环执行备份:sed -i 's/^DB_NAME=.*$/DB_NAME=\$1/g; s/^DB_USER=.*$/DB_USER=\$2/g; s/^DB_PASS=.*$/DB_PASS=\$3/g; s/^PROJECT_PATH=.*$/PROJECT_PATH=\$4/g' /usr/local/bin/backup-php-project.sh,再重写核心逻辑为while read循环调用mysqldump与tar。
3、在脚本末尾添加循环体:while read db user pass path; do [ -n "$db" ] && { mysqldump -u"$user" -p"$pass" "$db" | gzip > $BACKUP_DIR/db_${db}_$(date +\%Y\%m\%d_\%H\%M\%S).sql.gz; tar -czf $BACKUP_DIR/code_$(basename $path)_$(date +\%Y\%m\%d_\%H\%M\%S).tar.gz -C $(dirname $path) $(basename $path); }; done 。
四、配置crontab实现每日自动执行
利用系统级定时任务调度器,在指定时间触发备份脚本运行,确保备份行为不依赖人工干预且具备时间一致性。
1、编辑当前用户的crontab:crontab -e。
2、添加每日凌晨2:15执行的条目:15 2 * * * /usr/local/bin/backup-php-project.sh >/dev/null 2>&1。
3、验证cron服务状态:sudo systemctl is-active cron,若返回inactive则需执行sudo systemctl start cron并启用开机自启。
五、添加备份完整性校验与保留策略
防止因磁盘满、权限错误或MySQL连接中断导致静默失败,需在脚本中嵌入退出码判断与过期文件清理逻辑,保障备份有效性与存储可控性。
1、在mysqldump命令后添加校验:if [ $? -ne 0 ]; then echo "DB dump failed at $(date)" >> /var/log/backup.log; exit 1; fi。
2、在tar命令后添加校验:if [ ! -s $BACKUP_DIR/code_*.tar.gz ]; then echo "Code archive empty at $(date)" >> /var/log/backup.log; exit 1; fi。
3、在脚本末尾添加7天前备份清理命令:find /backup/php-projects -type f -mtime +7 -delete。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











