温馨提示×

Linux Node.js 如何进行数据备份与恢复

小樊
39
2026-01-01 02:32:59
栏目: 编程语言

Linux Node.js 数据备份与恢复实战指南

一 备份范围与策略

  • 明确备份对象:包括业务数据(数据库如 MySQL/PostgreSQL/MongoDB)、上传文件/静态资源配置文件(如 .env)、代码与依赖清单package.json / package-lock.json / yarn.lock)、以及必要的日志。代码建议纳入 Git 管理,依赖与配置随代码一并受控。
  • 选择备份类型:结合业务选择全量备份增量/差异备份的组合;对写频繁场景优先“全量+增量”,对读多写少或可接受较长恢复时间的场景可“每日全量+每周归档”。
  • 存储与保留:至少实现本地+异地/云端双地存储;制定保留周期(如近 7/30/90 天分层),并执行定期清理完整性校验
  • 自动化与可观测:使用 cronnode-cron 定时执行;输出日志并接入告警;定期做恢复演练验证可用性。

二 数据库备份与恢复

  • 通用准备:为备份专用账号授予最小权限;备份时尽量低峰期执行;对一致性要求高的库考虑锁表/一致性快照或采用数据库自带的一致性导出工具。
  • 常用数据库命令示例:
数据库 备份命令 恢复命令 说明
MySQL mysqldump -u[user] -p[password] -h[host] -P[port] [db] > backup.sql mysql -u[user] -p[password] -h[host] -P[port] [db] < backup.sql 适合逻辑备份;大库可加 --single-transaction 提升一致性
PostgreSQL pg_dump -U[user] -h[host] -p[port] -F c -b -v -f backup.dump [db] pg_restore -U[user] -h[host] -p[port] -d [db] backup.dump 使用自定义格式 -F c 便于高效恢复
MongoDB mongodump --db [db] --out /path/backup mongorestore --db [db] /path/backup/[db] 适合文档型数据;分片/副本集需按官方指引调整参数
  • 在 Node.js 中调用备份工具:使用 child_process.exec 封装 mysqldump/mongodump/pg_dump,结合 node-cron 做定时任务;示例见下文代码片段。

三 文件与日志的备份与恢复

  • 项目与静态文件:使用 tar 打包并压缩,便于传输与归档。示例:tar -czvf app-backup-$(date +%F).tar.gz /path/to/app
  • 日志文件:
    • 使用 logrotate/winston-daily-rotate-file/pino 等进行按日/按大小轮转,避免单文件过大。
    • 使用 rsync增量同步远程备份rsync -avz /var/log/nodejs user@remote:/backup/logs/;恢复时 rsync -av /backup/logs/nodejs /var/log/nodejs
  • 定时与落地:将备份脚本加入 crontab,并记录执行日志,便于审计与告警联动。

四 自动化脚本与定时任务

  • Shell 脚本范式(含保留策略与日志):
#!/usr/bin/env bash
set -Eeuo pipefail

BACKUP_DIR="/backup/nodejs"
DATE=$(date +%F_%H%M%S)
MYSQL_USER="backup"
MYSQL_PASS="******"
MYSQL_HOST="localhost"
MYSQL_PORT="3306"
DB_NAME="myapp"
RETENTION_DAYS=30

mkdir -p "$BACKUP_DIR"

# 1) 数据库备份
mysqldump -u"$MYSQL_USER" -p"$MYSQL_PASS" -h"$MYSQL_HOST" -P"$MYSQL_PORT" \
  --single-transaction --routines --triggers "$DB_NAME" \
  > "$BACKUP_DIR/db_$DATE.sql"

# 2) 项目与配置打包
tar -czf "$BACKUP_DIR/app_$DATE.tar.gz" -C /opt myapp .env

# 3) 清理旧备份
find "$BACKUP_DIR" -name "*.sql" -mtime +$RETENTION_DAYS -delete
find "$BACKUP_DIR" -name "*.tar.gz" -mtime +$RETENTION_DAYS -delete

echo "[$DATE] Backup finished" >> "$BACKUP_DIR/backup.log"
  • 定时任务(crontab):每天 02:00 执行并将输出重定向到日志
0 2 * * * /usr/local/bin/backup_nodejs.sh >> /var/log/nodejs_backup.log 2>&1
  • Node.js 定时任务(可选):使用 node-cron 调度备份函数,便于与现有服务集成与告警上报。

五 恢复流程与最佳实践

  • 恢复步骤(示例):
    1. 准备:通知业务方、评估影响、低峰/维护窗口内操作;必要时先停止应用
    2. 数据库:
      • MySQL:mysql -u[user] -p[password] [db] < backup.sql
      • PostgreSQL:pg_restore -U[user] -d [db] backup.dump
      • MongoDB:mongorestore --db [db] /path/backup/[db]
    3. 文件与配置:解压 tar 包并覆盖到目标目录;恢复日志用 rsync 回拷。
    4. 校验:核对行数/表结构/关键业务数据,检查应用日志与监控告警。
    5. 回滚预案:保留最近一次可用备份,异常立即回滚并复盘。
  • 最佳实践清单:
    • 双地三副本(本地盘 + 远端对象存储/NAS),并做定期恢复演练
    • 备份加密最小权限访问;对敏感数据在传输与落盘均加密。
    • 为备份任务配置监控与告警(失败、延迟、磁盘空间阈值)。
    • 对大库采用分批/按表导出与恢复,减少锁表与回放时间。

0