Linux日志备份与恢复方法
一 常用备份方法
使用logrotate做日常轮转归档
适合长期运行的生产环境,按天/周/月轮转、压缩、保留历史,并可在轮转后执行重载让服务重新打开日志文件。示例配置片段:
/var/log/myapp/*.log {
daily
rotate 7
compress
delaycompress
missingok
notifempty
create 0640 root utmp
postrotate
/usr/bin/systemctl reload myapp.service >/dev/null 2>&1 || true
endscript
}
调试用:logrotate -d /etc/logrotate.d/myapp;强制执行:logrotate -f /etc/logrotate.d/myapp。该方式侧重“日常留存”,不是长期离线归档。
使用tar打包压缩归档
适合按日/周做离线备份或迁移,可配合日期命名与保留策略。示例:
tar -czvf logs_$(date +%F).tar.gz /var/log/myapp/
恢复:tar -xzvf logs_2025-11-19.tar.gz -C /var/log/myapp/。该方式简单通用,便于拷贝到远端存储。
使用rsync做本地/远程增量同步
适合持续或近实时备份、镜像目录,保留权限与时间戳,可加–delete保持两端一致。示例:
rsync -avz --delete /var/log/ backup@192.0.2.10:/backup/logs/
也可本地归档:rsync -av /var/log/ /backup/logs/。该方式网络带宽利用高、恢复快。
使用dump/restore做文件系统级备份(适合分区/整盘)
支持0–9备份级别,0为全量,1–9为增量;仅对分区/整盘有效,对单个文件/非分区目录只能做0级。示例:
全量:dump -0uj -f /opt/boot.bak0.bz2 /boot
增量:dump -1uj -f /opt/boot.bak1.bz2 /boot
查看备份时间记录:cat /etc/dumpdates。该方式适合与系统级快照/离线介质配合。
自动化脚本与定时任务
将tar/rsync封装为Shell脚本,用crontab定时执行并做保留期清理,适合无人值守与批量管理。示例(每天0点):
0 0 * * * /usr/local/bin/backup_logs.sh;脚本内用find . -mtime +7 -delete清理7天前归档。
二 恢复方法与场景
从logrotate归档恢复
直接解压对应轮转文件到目标目录(注意时间与顺序),或先停止写入进程、替换后再启动。若配置了postrotate重载,恢复后按需执行systemctl reload <服务>。适用于误删或需回看历史某日日志。
从tar归档恢复
按归档时间点恢复:tar -xzvf logs_2025-11-19.tar.gz -C /var/log/myapp/;若仅需查看不落地,可用tar -tzvf查看内容。适合按时间点的离线恢复。
从rsync备份恢复
本地镜像:rsync -av /backup/logs/ /var/log/;远端到本地:rsync -av backup@192.0.2.10:/backup/logs/ /var/log/。若启用–delete,恢复为“镜像”状态,请先确认范围。
从dump/restore恢复
交互模式挑选文件:restore -i -f boot.bak0.bz2;查看内容:restore -t -f boot.bak0.bz2;整盘/分区回滚:先mkdir /restore && cd /restore,再按顺序 restore -r -f boot.bak0.bz2,随后 restore -r -f boot.bak1.bz2 …;对比差异:restore -C -f boot.bak1.bz2。增量恢复必须按层级依次进行。
无备份被清空或误删时的应急
1)检查是否还有轮转文件(如 messages.1.gz、secure-20251119.gz)可解压回看;2)若进程仍在写,利用**/proc/
三 备份策略与运维要点
四 常见日志文件与查看方式