备份恢复
本文档介绍 KubePolaris 的数据备份和恢复策略。
备份内容
| 数据类型 | 重要性 | 备份频率 |
|---|---|---|
| 数据库 | 高 | 每日 + 增量 |
| 配置文件 | 高 | 变更时 |
| 日志文件 | 中 | 归档 |
| 静态文件 | 低 | 可从镜像恢复 |
数据库备份
手动备份
# 全量备份
mysqldump -h mysql-host -u kubepolaris -p \
--single-transaction \
--routines \
--triggers \
kubepolaris > backup_$(date +%Y%m%d_%H%M%S).sql
# 压缩备份
mysqldump -h mysql-host -u kubepolaris -p \
--single-transaction \
kubepolaris | gzip > backup_$(date +%Y%m%d_%H%M%S).sql.gz
自动备份脚本
/opt/kubepolaris/scripts/backup.sh
#!/bin/bash
set -e
# 配置
BACKUP_DIR="/data/backups/mysql"
MYSQL_HOST="mysql-host"
MYSQL_USER="kubepolaris"
MYSQL_PASS="your_password"
MYSQL_DB="kubepolaris"
RETENTION_DAYS=30
# 创建备份目录
mkdir -p $BACKUP_DIR
# 生成备份文件名
BACKUP_FILE="$BACKUP_DIR/kubepolaris_$(date +%Y%m%d_%H%M%S).sql.gz"
# 执行备份
mysqldump -h $MYSQL_HOST -u $MYSQL_USER -p$MYSQL_PASS \
--single-transaction \
--routines \
--triggers \
$MYSQL_DB | gzip > $BACKUP_FILE
# 验证备份
if [ -s "$BACKUP_FILE" ]; then
echo "Backup successful: $BACKUP_FILE"
# 上传到远程存储(可选)
# aws s3 cp $BACKUP_FILE s3://your-bucket/backups/
else
echo "Backup failed!"
exit 1
fi
# 清理旧备份
find $BACKUP_DIR -name "*.sql.gz" -mtime +$RETENTION_DAYS -delete
echo "Cleanup completed"
定时任务
# 添加 crontab
crontab -e
# 每天凌晨 2 点全量备份
0 2 * * * /opt/kubepolaris/scripts/backup.sh >> /var/log/backup.log 2>&1
# 每小时增量备份(使用 mysqlbinlog)
0 * * * * /opt/kubepolaris/scripts/backup-binlog.sh >> /var/log/backup.log 2>&1
Docker 环境备份
# 备份 Docker MySQL 容器
docker exec kubepolaris-mysql mysqldump -u root -p kubepolaris > backup.sql
# 或使用 docker-compose
docker-compose exec mysql mysqldump -u root -p kubepolaris > backup.sql
Kubernetes 环境备份
# 备份 Kubernetes 中的 MySQL
kubectl exec -n kubepolaris deployment/kubepolaris-mysql -- \
mysqldump -u root -p kubepolaris > backup.sql
# 使用 CronJob 自动备份
kubectl apply -f backup-cronjob.yaml
backup-cronjob.yaml
apiVersion: batch/v1
kind: CronJob
metadata:
name: mysql-backup
namespace: kubepolaris
spec:
schedule: "0 2 * * *"
jobTemplate:
spec:
template:
spec:
containers:
- name: backup
image: mysql:8.0
command:
- /bin/sh
- -c
- |
mysqldump -h kubepolaris-mysql -u root -p$MYSQL_PASSWORD kubepolaris | \
gzip > /backups/kubepolaris_$(date +%Y%m%d_%H%M%S).sql.gz
env:
- name: MYSQL_PASSWORD
valueFrom:
secretKeyRef:
name: kubepolaris-mysql
key: password
volumeMounts:
- name: backup-volume
mountPath: /backups
restartPolicy: OnFailure
volumes:
- name: backup-volume
persistentVolumeClaim:
claimName: mysql-backup-pvc
配置备份
配置备份
# 备份环境变量配置
cp /opt/kubepolaris/.env config_backup_$(date +%Y%m%d).env
cp /opt/kubepolaris/.env env_backup_$(date +%Y%m%d).env
# 备份 Kubernetes Secrets
kubectl get secret -n kubepolaris kubepolaris-secrets -o yaml > secrets.yaml
加密备份
# 使用 GPG 加密
tar -cz /opt/kubepolaris/.env | \
gpg --encrypt -r admin@example.com > config_backup.tar.gz.gpg
# 解密
gpg --decrypt config_backup.tar.gz.gpg | tar -xz
恢复
数据库恢复
# 解压并恢复
gunzip < backup_20260107.sql.gz | mysql -h mysql-host -u kubepolaris -p kubepolaris
# 或直接恢复
mysql -h mysql-host -u kubepolaris -p kubepolaris < backup.sql