CentOS环境下Node.js的备份与恢复
小樊
34
2025-11-26 04:34:16
备份范围与策略
- 备份范围应覆盖:应用代码、依赖清单与锁文件(如 package.json 与 package-lock.json 或 pnpm-lock.yaml)、配置文件(如 .env、config/)、静态资源与上传目录、SSL 证书、以及数据库(如 MySQL/MongoDB)。
- 备份策略建议:
- 周期与保留:按数据变更频率设定周期,例如每日全量,并保留最近 7 天或近 N 份;关键业务可缩短周期并增加保留。
- 工具选择:文件用 tar/rsync,数据库用 mysqldump/mongodump,传输与异地容灾用 scp/rsync。
- 存储位置:本地保留一份,同时同步到远程服务器或云存储,提升冗余与可用性。
- 一致性:对写入频繁的数据,优先考虑停写或低峰期备份,必要时使用数据库导出工具的一致性选项。
备份步骤
- 准备备份目录:
- 建议统一目录:如 /backup/nodejs,并按日期组织:/backup/nodejs/2025-11-26/。
- 代码与配置打包:
- 示例:
- tar -czvf /backup/nodejs/app_$(date +%F).tar.gz -C /var/www my_node_app
- 单独打包配置与证书:tar -czvf /backup/nodejs/config_$(date +%F).tar.gz -C /var/www/my_node_app .env config/ ssl/
- 依赖清单备份:
- 至少保留 package.json 与锁文件;不建议备份体积大且可复现的 node_modules(恢复时用 npm/pnpm/yarn 重装)。
- 数据库备份:
- MySQL:mysqldump -u [username] -p[password] [database_name] > /backup/nodejs/db_$(date +%F).sql
- MongoDB:mongodump --db [database_name] --out /backup/nodejs/mongo_$(date +%F)
- 传输到远程存储(可选):
- scp /backup/nodejs/app_$(date +%F).tar.gz user@backup-server:/backups/
- 自动化与保留策略:
- 使用 cron 定时执行备份脚本;脚本中可加入按时间清理旧备份的逻辑(如保留最近 7 天)。
恢复步骤
- 准备与校验:
- 选择目标版本备份,校验压缩包完整性(如 tar -tzf 检查),必要时先在预备环境验证。
- 代码与配置恢复:
- tar -xzvf /backup/nodejs/app_2025-11-26.tar.gz -C /var/www
- 如有单独配置包:tar -xzvf /backup/nodejs/config_2025-11-26.tar.gz -C /var/www/my_node_app
- 依赖恢复:
- 进入项目目录后执行:npm install(或 pnpm install / yarn install),以锁文件为准重建 node_modules。
- 数据库恢复:
- MySQL:mysql -u [username] -p[password] [database_name] < /backup/nodejs/db_2025-11-26.sql
- MongoDB:mongorestore --db [database_name] /backup/nodejs/mongo_2025-11-26/[database_name]
- 启动与验证:
- 使用进程管理工具启动(如 systemd、pm2 等),检查日志与关键业务接口,确认数据一致性与可用性。
自动化与异地容灾
- 自动化脚本示例(含保留策略):
- 示例脚本 backup_node.sh:
- #!/bin/bash
- BACKUP_DIR=“/backup/nodejs/$(date +%F)”
- mkdir -p $BACKUP_DIR
-
代码与配置
- tar -czvf $BACKUP_DIR/app.tar.gz -C /var/www my_node_app
- tar -czvf $BACKUP_DIR/config.tar.gz -C /var/www/my_node_app .env config/ ssl/
-
数据库
- mysqldump -u [username] -p[password] [database_name] > $BACKUP_DIR/db.sql
-
保留最近 7 天
- find /backup/nodejs -type f -mtime +7 -delete
- 定时任务:
- 每天 02:00 执行:0 2 * * * /path/to/backup_node.sh
- 远程备份与容灾:
- 在脚本中加入 scp/rsync 将备份同步到远程服务器或对象存储,避免单机故障导致备份不可用。
注意事项与常见问题
- 一致性优先:对有状态/高写入场景,优先在维护窗口停写或使用数据库工具的一致性导出;必要时先停应用再备份。
- 不备份 node_modules:体积大且可通过 npm/pnpm/yarn 精确复现,备份时排除,恢复时重装依赖。
- 安全合规:备份文件含数据库口令/密钥,应设置最小权限与加密存储,传输使用 scp/rsync over SSH。
- 定期演练:定期在非生产环境做恢复演练,验证备份可用性与恢复时长(RTO)。
- 环境差异:跨系统/跨版本恢复时,注意 Node.js 与依赖版本差异,必要时锁定版本(如 .nvmrc、engines)。
- 故障与误删:若发生误删且备份未及时到位,可尝试 extundelete/TestDisk 等工具,但成功率依赖磁盘覆盖情况,务必尽快停止写入并先做磁盘镜像再尝试恢复。