Linux服务器上Node.js备份与恢复实操指南
一、备份范围与策略
二、文件与配置备份
tar -czvf /backup/nodejs/app_$(date +%F_%H-%M-%S).tar.gz -C /var/www/my-node-app .rsync -avz --delete /var/www/my-node-app/ /backup/nodejs/app_latest/cp /var/www/my-node-app/.env /backup/nodejs/ && cp -r /etc/ssl/myapp.* /backup/nodejs/ssl/scp /backup/nodejs/app_*.tar.gz user@backup-server:/backup/nodejs/npm ci --only=production 还原依赖。三、数据库备份
mysqldump -h $DB_HOST -u $DB_USER -p$DB_PASS $DB_NAME > /backup/db_$(date +%F).sqlmysql -h $DB_HOST -u $DB_USER -p$DB_PASS $DB_NAME < /backup/db_YYYY-MM-DD.sqlpg_dump -h $DB_HOST -U $DB_USER -d $DB_NAME -F c -f /backup/db_$(date +%F).dumppg_restore -h $DB_HOST -U $DB_USER -d $DB_NAME /backup/db_YYYY-MM-DD.dumpmongodump --uri "$MONGODB_URI" --out /backup/mongo_$(date +%F)mongorestore --uri "$MONGODB_URI" /backup/mongo_YYYY-MM-DD四、自动化与远程备份
#!/usr/bin/env bash
set -e
APP_DIR="/var/www/my-node-app"
BACKUP_BASE="/backup/nodejs"
DATE=$(date +%F_%H-%M-%S)
mkdir -p "$BACKUP_BASE/$DATE"
# 1) 代码与静态资源
tar -czf "$BACKUP_BASE/$DATE/app.tar.gz" -C "$APP_DIR" .
# 2) 数据库
if [[ -n "$DB_TYPE" ]]; then
case "$DB_TYPE" in
mysql)
mysqldump -h "$DB_HOST" -u "$DB_USER" -p"$DB_PASS" "$DB_NAME" > "$BACKUP_BASE/$DATE/db.sql"
;;
postgres)
pg_dump -h "$DB_HOST" -U "$DB_USER" -d "$DB_NAME" -F c -f "$BACKUP_BASE/$DATE/db.dump"
;;
mongodb)
mongodump --uri "$MONGODB_URI" --out "$BACKUP_BASE/$DATE/mongo"
;;
esac
fi
# 3) 配置与证书
cp "$APP_DIR/.env" "$BACKUP_BASE/$DATE/"
[ -d "$APP_DIR/ssl" ] && cp -r "$APP_DIR/ssl" "$BACKUP_BASE/$DATE/"
# 4) 保留最近7天
find "$BACKUP_BASE" -maxdepth 1 -type d -mtime +7 -exec rm -rf {} +
# 5) 可选:同步到远程
# rsync -avz --delete -e ssh "$BACKUP_BASE/" user@backup-server:/backup/nodejs/
echo "Backup finished: $BACKUP_BASE/$DATE"
0 2 * * * /usr/local/bin/backup_nodejs.sh >> /var/log/backup.log 2>&1五、恢复流程与验证
tar -xzvf /backup/nodejs/app_YYYY-MM-DD_HH-MM-SS.tar.gz -C /var/www/my-node-apprsync -avz --delete /backup/nodejs/app_latest/ /var/www/my-node-app/cp /backup/nodejs/.env /var/www/my-node-app/.envmysql <、pg_restore、mongorestore)。extundelete /dev/sdXN --inode 2 扫描并尝试恢复;