Linux Node.js 数据备份与恢复实战指南
一 备份范围与策略
二 数据库备份与恢复
| 数据库 | 备份命令 | 恢复命令 | 说明 |
|---|---|---|---|
| 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] |
适合文档型数据;分片/副本集需按官方指引调整参数 |
mysqldump/mongodump/pg_dump,结合 node-cron 做定时任务;示例见下文代码片段。三 文件与日志的备份与恢复
tar -czvf app-backup-$(date +%F).tar.gz /path/to/app。rsync -avz /var/log/nodejs user@remote:/backup/logs/;恢复时 rsync -av /backup/logs/nodejs /var/log/nodejs。四 自动化脚本与定时任务
#!/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"
0 2 * * * /usr/local/bin/backup_nodejs.sh >> /var/log/nodejs_backup.log 2>&1
五 恢复流程与最佳实践
mysql -u[user] -p[password] [db] < backup.sqlpg_restore -U[user] -d [db] backup.dumpmongorestore --db [db] /path/backup/[db]tar 包并覆盖到目标目录;恢复日志用 rsync 回拷。