您的位置:首页 >Node.js在Linux系统中如何实现数据备份与恢复
发布于2026-04-24 阅读(0)
扫一扫,手机访问

在动手之前,得先想清楚要保护什么。一个典型的 Node.js 应用,需要备份的对象通常包括这几块:
/var/www/my_node_app 的目录下。别漏了依赖清单 package.json,它是重建环境的关键。数据库(如 MySQL、MongoDB)自然是重中之重。最后,那些运行时产生的数据,比如用户上传的文件(uploads/)、会话文件、缓存等,同样需要纳入保护范围。这里有个小建议:代码本身最好用 Git 管理,生产环境则更侧重于部署制品或镜像,备份的重心可以放在配置文件和动态数据上。tar 命令适合做全量打包,而 rsync 则是实现增量同步或远程备份的利器。mysqldump,MongoDB 的 mongodump。cron 定时任务来自动执行是标准做法。更关键的是,定期做恢复演练和数据校验(比如检查文件校验和、数据库条目数),否则备份可能只是一堆无法使用的“死数据”。以上这些思路,在 CentOS、Ubuntu、Debian 等主流 Linux 发行版上都是通用的。数据库是应用的心脏,它的备份恢复必须可靠。这里我们分别看看 MySQL 和 MongoDB 的典型操作,并探讨如何用 Node.js 进行流程编排。
mysqldump 命令:mysqldump -u [username] -p[password] [database_name] > /backup/db_$(date +%F).sqlconst { exec } = require('child_process');
const db = 'mydb', user = 'root', pass = '******', out = `/backup/db_${new Date().toISOString().slice(0,10)}.sql`;
exec(`mysqldump -u ${user} -p${pass} ${db} > ${out}`, (err) => {
if (err) console.error('备份失败:', err);
else console.log('备份成功:', out);
});
mysql 客户端:mysql -u [username] -p[password] [database_name] < /backup/db_YYYY-MM-DD.sqlmongodump --uri="mongodb://[user]:[pass]@[host:port]/[db]" --out /backup/mongo_$(date +%F)mongorestore --uri="mongodb://[user]:[pass]@[host:port]/[db]" /backup/mongo_YYYY-MM-DD/[db]600,确保只有所有者可读可写。除了数据库,应用文件和日志同样需要可靠的备份机制。
tar -czvf /backup/app_$(date +%F).tar.gz -C /var/www my_node_apprsync -a vz --delete /var/www/my_node_app/ user@remote:/backup/my_node_app/tar -xzvf /backup/app_YYYY-MM-DD.tar.gz -C /restorersync -a v /backup/my_node_app/ /var/www/my_node_app//etc/logrotate.d/nodejs:
/var/log/nodejs/*.log {
daily
rotate 7
compress
missingok
notifempty
create 640 node node
postrotate
kill -USR1 $(cat /var/run/node.pid 2>/dev/null || pidof node) || true
endscript
}
logrotate -d /etc/logrotate.d/nodejs 进行调试,确认无误后使用 logrotate -f /etc/logrotate.d/nodejs 强制执行一次。rsync 将经过轮转压缩的旧日志目录,同步到专门的备份服务器进行长期归档。/var/log/nodejs/ 目录。如果应用正在运行,可能需要重启应用以重新打开日志文件句柄。零散的备份命令难以维护,我们需要一个一体化的自动化方案。
#!/usr/bin/env bash
set -Eeuo pipefail
APP=/var/www/my_node_app
BACKUP=/backup
DATE=$(date +%F)
mkdir -p "$BACKUP"
# 1) 代码与静态资源
tar -czf "$BACKUP/app_$DATE.tar.gz" -C "$APP" .
# 2) 数据库(MySQL)
mysqldump -u root -p'******' mydb > "$BACKUP/db_$DATE.sql"
# 3) 打包并清理旧备份(保留7天)
tar -czf "$BACKUP/full_$DATE.tar.gz" -C "$BACKUP" app_$DATE.tar.gz db_$DATE.sql
rm -f "$BACKUP"/{app_*,db_*}
"$BACKUP"/full_*.tar.gz
find "$BACKUP" -type f -mtime +7 -delete
0 2 * * * /usr/local/bin/backup.sh >> /var/log/backup.log 2>&1tar -xzvf /backup/full_YYYY-MM-DD.tar.gz -C /restoretar -xzvf /restore/app_YYYY-MM-DD.tar.gz -C /var/www/my_node_appmysql -u root -p mydb < /restore/db_YYYY-MM-DD.sqlsystemctl restart my_node_app 或 pm2 restart my_node_app。当意外真的发生,比如文件被误删,冷静和正确的第一步操作至关重要。
umount /dev/sdb1/usr/local/extundelete/bin/extundelete /dev/sdb1 --inode 2RECOVERED_FILES/ 文件夹里。下一篇:dhclient超时怎么办
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
正版软件
正版软件
正版软件
正版软件
正版软件
1
2
3
7
9