Linux上Laravel项目备份方案
一 备份范围与策略
二 快速上手 手动备份命令
cd /path/to/laravel
tar --exclude='storage/logs' --exclude='storage/framework/cache' \
--exclude='storage/framework/sessions' --exclude='storage/framework/views' \
-czvf /backup/laravel_project_$(date +%F_%H-%M-%S).tar.gz -C /path/to/laravel .
mysqldump -u DB_USER -p DB_NAME > /backup/laravel_db_$(date +%F_%H-%M-%S).sql
mariadb 命令;如使用 PostgreSQL,请改用 pg_dump。tar -czvf /backup/laravel_uploads_$(date +%F_%H-%M-%S).tar.gz \
storage/app public storage/framework/cache storage/framework/sessions
scp /backup/laravel_*.tar.gz user@remote:/backup/
scp /backup/laravel_db_*.sql user@remote:/backup/
以上命令可直接在服务器上执行,适合临时或首次备份。
三 自动化脚本与定时任务
#!/usr/bin/env bash
set -Eeuo pipefail
PROJECT_DIR="/var/www/laravel"
BACKUP_DIR="/backup/laravel"
DATE=$(date +%F_%H-%M-%S)
DB_USER="DB_USER"
DB_PASS="DB_PASS"
DB_NAME="DB_NAME"
REMOTE_USER="backup"
REMOTE_HOST="remote.example.com"
REMOTE_DIR="/backup/laravel"
RETENTION_DAYS=7
mkdir -p "$BACKUP_DIR"
# 1) 项目文件
tar --exclude='storage/logs' --exclude='storage/framework/cache' \
--exclude='storage/framework/sessions' --exclude='storage/framework/views' \
-czvf "$BACKUP_DIR/laravel_project_$DATE.tar.gz" -C "$PROJECT_DIR" .
# 2) 数据库
mysqldump -u"$DB_USER" -p"$DB_PASS" "$DB_NAME" > "$BACKUP_DIR/laravel_db_$DATE.sql"
# 3) 可选:上传到远程
# rsync -avz --remove-source-files "$BACKUP_DIR/" "$REMOTE_USER@$REMOTE_HOST:$REMOTE_DIR/"
# 或使用 scp(取消下一行注释)
# scp "$BACKUP_DIR/laravel_"* "$REMOTE_USER@$REMOTE_HOST:$REMOTE_DIR/"
# 4) 清理旧备份
find "$BACKUP_DIR" -type f -mtime +$RETENTION_DAYS -delete
chmod +x /usr/local/bin/backup_laravel.sh
crontab -e
# 每天 01:00 执行
0 1 * * * /usr/local/bin/backup_laravel.sh >> /var/log/backup_laravel.log 2>&1
该方案将打包、导出、远程传输与保留策略整合为脚本,便于维护与审计。
四 恢复步骤
tar -xzvf /backup/laravel_project_YYYY-MM-DD_HH-MM-SS.tar.gz -C /var/www/laravel
chown -R www-data:www-data /var/www/laravel
mysql -u DB_USER -p DB_NAME < /backup/laravel_db_YYYY-MM-DD_HH-MM-SS.sql
php artisan config:clear
php artisan route:clear
php artisan view:clear
php artisan config:cache
php artisan route:cache
php artisan view:cache
恢复顺序一般为:先数据库、后代码;如涉及队列或调度,按需重启队列/服务。
五 安全与运维建议
--single-transaction(InnoDB)或 --lock-all-tables(MyISAM)等选项以减少影响。