Debian消息系统备份与恢复
一、先明确备份对象与策略
二、日志类消息的备份与恢复(rsyslog/syslog-ng)
/var/log/syslog {
daily
rotate 7
missingok
notifempty
compress
delaycompress
sharedscripts
postrotate
systemctl reload rsyslog >/dev/null 2>&1 || true
endscript
}
sudo logrotate -d /etc/logrotate.conf # 语法检查
sudo logrotate -f /etc/logrotate.conf # 强制执行
#!/usr/bin/env bash
set -e
TS=$(date +%Y%m%d%H%M%S)
SRC=/var/log
DST=/var/log/backup
mkdir -p "$DST"
# 仅归档当天的 syslog(已轮转出的压缩文件)
find "$SRC" -maxdepth 1 -name "syslog-$TS*.gz" -exec cp {} "$DST/" \;
# 清理7天前的归档
find "$DST" -name "syslog-*.gz" -mtime +7 -delete
0 2 * * * /usr/local/bin/backup_syslog.sh
sudo cp /var/log/backup/syslog-*.gz /var/log/
sudo systemctl reload rsyslog
zcat /var/log/backup/syslog-2025*.gz | less
以上做法覆盖 rsyslog/syslog-ng 的日志备份与恢复要点,并给出 logrotate 与 cron 的落地示例。
三、RabbitMQ消息系统的备份与恢复
sudo rabbitmq-plugins enable rabbitmq_management
rabbitmqadmin export /backup/rabbitmq-definitions-$(date +%F).json
curl -T /backup/rabbitmq-definitions-2025-08-01.json \
-X POST -u user:pass \
-H "Content-Type: application/json" \
http://localhost:15672/api/definitions
# 列出队列
rabbitmqadmin list queues name
# 导出某队列消息到文件(逐条获取)
rabbitmqadmin get queue name=myqueue --vhost=/ > /backup/queue_myqueue.jsonl
# 恢复前先声明队列(确保同名队列存在)
rabbitmqadmin declare queue name=myqueue durable=true
# 逐条重放(示例,按实际格式处理)
while IFS= read -r line; do
rabbitmqadmin publish exchange=amq.default routing_key=myqueue payload="$line"
done < /backup/queue_myqueue.jsonl
rabbitmqctl eval 'rabbit_mnesia:dir().'
# 输出示例:"/var/lib/rabbitmq/mnesia/rabbit@hostname"
sudo systemctl stop rabbitmq-server
tar czf /backup/rabbitmq-mnesia-$(date +%F).tar.gz -C /var/lib/rabbitmq/mnesia .
sudo systemctl start rabbitmq-server
sudo systemctl stop rabbitmq-server
mv /var/lib/rabbitmq/mnesia /var/lib/rabbitmq/mnesia.bak.$(date +%s)
mkdir -p /var/lib/rabbitmq/mnesia
tar xzf /backup/rabbitmq-mnesia-2025-08-01.tar.gz -C /var/lib/rabbitmq/mnesia
sudo systemctl start rabbitmq-server
四、通用自动化与异地容灾建议
rsync -avz --delete /backup/ user@backup-host:/backup/
# 全量/增量:7天未全量则做全量
duplicity --full-if-older-than 7D /backup/ file:///remote/backup/
# 恢复
duplicity file:///remote/backup/ /restore/backup/
# 备份
borg create --stats --compression zstd,level=19 \
backup@repo::archive-$(date +%F) /backup/
# 恢复
borg extract backup@repo::archive-2025-08-01 /restore/backup/