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

实践练习

  1. 设计并落地一套“3-2-1-1-0”策略:本地热备、对象存储温备、异地冷备、离线拷贝;记录每份副本的RTO/RPO与成本。
  2. 为对象存储开启版本控制与WORM,并验证误删后的恢复流程:上传→删除→恢复上一版本。
  3. 模拟容量告警:填充备份目录至阈值,配置监控(如 df -h 与告警阈值)并验证告警触发。
  4. 编写清理脚本并使用 crontab 定时执行,记录执行日志与清理统计。