19.9.2 备份介质、存储与保留策略
备份介质、存储与保留策略的目标是兼顾可恢复性、成本与合规性。应根据数据等级与恢复目标选择合适介质组合:本地磁盘/NAS用于快速恢复,对象存储用于低成本长期保存,磁带或冷存储用于合规归档。采用分层存储设计:热备份保留短周期便于快速回滚,温备份支持中期恢复,冷备份满足长期保留与审计。
存储侧需考虑容量规划、IO吞吐、去重压缩与加密能力,并建立跨站点副本策略。推荐“3-2-1”原则:至少三份副本、两种介质、一份异地;关键系统可扩展为“3-2-1-1-0”,增加一份离线或不可变存储并实现零校验错误。对象存储建议启用版本控制与WORM以抵御误删与勒索。
示例:使用 S3/MinIO 对象存储作为温备(安装+配置+验证)
# 1) 安装 MinIO(示例以二进制方式)
sudo useradd -r -s /sbin/nologin minio
wget https://dl.min.io/server/minio/release/linux-amd64/minio
sudo mv minio /usr/local/bin/ && sudo chmod +x /usr/local/bin/minio
# 2) 准备数据与服务配置
sudo mkdir -p /data/minio /etc/minio
cat >/etc/minio/minio.env <<'EOF'
MINIO_ROOT_USER=minioadmin
MINIO_ROOT_PASSWORD=Minio@123456
MINIO_VOLUMES="/data/minio"
MINIO_OPTS="--console-address :9001"
EOF
# 3) systemd 服务
cat >/etc/systemd/system/minio.service <<'EOF'
[Unit]
Description=MinIO
After=network.target
[Service]
User=minio
Group=minio
EnvironmentFile=/etc/minio/minio.env
ExecStart=/usr/local/bin/minio server $MINIO_VOLUMES $MINIO_OPTS
Restart=always
LimitNOFILE=65536
[Install]
WantedBy=multi-user.target
EOF
sudo systemctl daemon-reload
sudo systemctl enable --now minio
sudo systemctl status minio --no-pager
# 4) 使用 mc 客户端创建存储桶并启用版本控制与WORM
wget https://dl.min.io/client/mc/release/linux-amd64/mc
sudo mv mc /usr/local/bin/ && sudo chmod +x /usr/local/bin/mc
mc alias set local http://127.0.0.1:9000 minioadmin Minio@123456
mc mb local/backup
mc version enable local/backup
mc retention set --default governance 30d local/backup
# 5) 上传备份文件并验证版本
echo "backup-$(date +%F)" > /tmp/backup_full.sql
mc cp /tmp/backup_full.sql local/backup/db/full/
mc ls local/backup/db/full/
示例:分层保留与生命周期策略(S3 兼容)
# 预期效果:7天热存储 → 30天转温 → 365天转冷 → 2555天到期删除
cat >/tmp/lifecycle.json <<'EOF'
{
"Rules": [{
"ID": "backup-lifecycle",
"Status": "Enabled",
"Filter": {"Prefix": "db/"},
"Transitions": [
{"Days": 7, "StorageClass": "STANDARD_IA"},
{"Days": 30, "StorageClass": "GLACIER"}
],
"Expiration": {"Days": 2555}
}]
}
EOF
aws --endpoint-url http://127.0.0.1:9000 s3api put-bucket-lifecycle-configuration \
--bucket backup --lifecycle-configuration file:///tmp/lifecycle.json
示例:本地热备 + 异地复制(rsync)
# 预期效果:本地热备到 /backup/hot,异地拷贝到 DR 站点
sudo mkdir -p /backup/hot/db
mysqldump -uroot -p'Passw0rd' --single-transaction --routines --events \
--all-databases | gzip > /backup/hot/db/full-$(date +%F).sql.gz
# 异地复制
rsync -avz --delete /backup/hot/ backup@dr-node:/backup/hot/
# 生成校验和
sha256sum /backup/hot/db/full-$(date +%F).sql.gz > /backup/hot/db/full-$(date +%F).sha256
保留策略示例(滚动归档与清理)
# 预期效果:保留每日增量30天、每周全量12周、每月全量12个月、每年7年
# 用 find 按文件名规则清理过期备份
find /backup/hot/db -name "inc-*.sql.gz" -mtime +30 -delete
find /backup/hot/db -name "full-weekly-*.sql.gz" -mtime +84 -delete
find /backup/hot/db -name "full-monthly-*.sql.gz" -mtime +365 -delete
find /backup/cold/db -name "full-yearly-*.sql.gz" -mtime +2555 -delete
排错要点与命令解释
# 1) MinIO 服务起不来:查看日志
journalctl -u minio -n 200 --no-pager
# 2) 端口被占用
ss -lntp | grep 9000
# 3) 对象存储访问失败:验证凭据与网络
mc alias list
curl -I http://127.0.0.1:9000
# 4) rsync 速度慢:检查带宽/加密开销
rsync -avz --compress-level=1 /backup/hot/ backup@dr-node:/backup/hot/
# 5) 校验失败:核对源文件是否被修改
sha256sum -c /backup/hot/db/full-$(date +%F).sha256
实践练习
- 设计并落地一套“3-2-1-1-0”策略:本地热备、对象存储温备、异地冷备、离线拷贝;记录每份副本的RTO/RPO与成本。
- 为对象存储开启版本控制与WORM,并验证误删后的恢复流程:上传→删除→恢复上一版本。
- 模拟容量告警:填充备份目录至阈值,配置监控(如
df -h与告警阈值)并验证告警触发。 - 编写清理脚本并使用
crontab定时执行,记录执行日志与清理统计。