在 Ubuntu 上备份与恢复 Laravel 项目的实用方案
一 备份范围与准备
二 手动备份步骤
cd /var/www/html/laravel_project
tar -czvf /home/ubuntu/backups/laravel_project_$(date +%Y%m%d%H%M%S).tar.gz .
mysqldump -u DB_USER -p DB_NAME > /home/ubuntu/backups/db_$(date +%Y%m%d%H%M%S).sql
mysqldump -u DB_USER -p DB_NAME | gzip > /home/ubuntu/backups/db_$(date +%Y%m%d%H%M%S).sql.gz
tar -czvf /home/ubuntu/backups/laravel_config_$(date +%Y%m%d%H%M%S).tar.gz \
.env config bootstrap/cache storage/app/public certificates/
scp /home/ubuntu/backups/*.tar.gz user@remote:/path/to/remote/backup/
scp /home/ubuntu/backups/*.sql* user@remote:/path/to/remote/backup/
三 手动恢复步骤
tar -xzvf /path/to/laravel_project_YYYYMMDDHHMMSS.tar.gz -C /var/www/html/laravel_project
mysql -u DB_USER -p DB_NAME < /path/to/db_YYYYMMDDHHMMSS.sql
gunzip < /path/to/db_YYYYMMDDHHMMSS.sql.gz | mysql -u DB_USER -p DB_NAME
tar -xzvf /path/to/laravel_config_YYYYMMDDHHMMSS.tar.gz -C /var/www/html/laravel_project
cd /var/www/html/laravel_project
composer install --optimize-autoloader --no-dev
php artisan config:cache
php artisan route:cache # 如使用路由缓存
php artisan view:cache # 如使用视图缓存
chown -R www-data:www-data /var/www/html/laravel_project
chmod -R 755 /var/www/html/laravel_project/storage /var/www/html/laravel_project/bootstrap/cache
php artisan migrate --force
php artisan migrate --force
php artisan db:seed --force
四 自动化备份与远程同步
#!/bin/bash
set -e
BACKUP_DIR="/home/ubuntu/backups"
DATE=$(date +"%Y%m%d%H%M%S")
PROJECT_ROOT="/var/www/html/laravel_project"
DB_HOST="localhost"
DB_USER="DB_USER"
DB_PASS="DB_PASS"
DB_NAME="DB_NAME"
mkdir -p "$BACKUP_DIR"
# 项目文件
tar -czvf "$BACKUP_DIR/laravel_project_$DATE.tar.gz" -C "$PROJECT_ROOT" .
# 数据库(压缩导出)
mysqldump -h "$DB_HOST" -u "$DB_USER" -p"$DB_PASS" "$DB_NAME" \
| gzip > "$BACKUP_DIR/db_$DATE.sql.gz"
# 仅保留最近 30 天
find "$BACKUP_DIR" -type f -name "*.sql.gz" -mtime +30 -delete
find "$BACKUP_DIR" -type f -name "*.tar.gz" -mtime +30 -delete
echo "Backup completed at $DATE"
chmod +x /usr/local/bin/backup_laravel.sh
sudo crontab -e
# 添加
0 1 * * * /usr/local/bin/backup_laravel.sh >> /var/log/backup.log 2>&1
0 2 * * * rsync -avz --include='*/' --include='*.tar.gz' --include='*.sql.gz' --exclude='*' \
/home/ubuntu/backups/ user@remote:/path/to/remote/backup/
五 常见问题与最佳实践