备份与恢复
数据库备份与恢复是确保数据安全和业务连续性的关键功能。通过定期备份数据库,可以在数据丢失、损坏或操作失误时快速恢复数据,从而最大限度地减少业务中断和数据损失。
目录
前提条件
在执行备份之前,请先声明存储位置。您可以选择以下两种方式之一。
-
Persistent Volume Claim(PVC,Kubernetes PersistentVolumeClaim):持久卷声明封装了对存储资源的请求配置,并根据请求的访问模式、存储大小等信息自动匹配集群中合适的持久卷。
-
外部 S3 存储:S3(Amazon Simple Storage Service)是亚马逊提供的对象存储服务。如果需要将数据备份到您自己的 S3 桶,请确认管理员已将该 S3 存储集成到您的项目中。
操作步骤
- 配置存储位置
-
使用 PVC 作为存储
kubectl patch mysql -n <namespace> <name> --type='merge' --patch '
spec:
pxc:
backup:
storages:
<storageName>:
type: filesystem
volume:
persistentVolumeClaim:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: <size>Gi
storageClassName: <storageClass>
-
使用 S3 作为存储
-
创建 S3 secret
kubectl -n <namespace> create secret generic <backupSecretName> --from-literal=AWS_ACCESS_KEY_ID=$(accessKeyId) --from-literal=AWS_SECRET_ACCESS_KEY=$(secretAccessKey)
-
配置 S3 存储
kubectl patch mysql -n $namespace $name --type='merge' --patch '
spec:
pxc:
backup:
storages:
<storageName>:
type: s3
s3:
bucket: <bucket>
credentialsSecret: <backupSecretName>
endpointUrl: <endpointUrl>
-
自动备份
在 CR 的 spec.pxc.backup 中添加自动备份配置,其中 schedule 字段定义备份周期。<storageName>
字段指的是步骤 1 中创建的备份存储名称。
kubectl patch mysql -n $namespace $name --type='merge' --patch '
spec:
pxc:
backup:
schedule:
- keep: 5
name: daily-backup
schedule: 0 0 * * *
storageName: <storageName>
'
-
手动备份
kubectl -n <namespace> apply -f - <<EOF
apiVersion: pxc.percona.com/v1
kind: PerconaXtraDBClusterBackup
metadata:
labels:
cluster: <name>
trigger.type: manual
name: <backupName>
namespace: <namespace>
spec:
pxcCluster: <name>
storageName: <storageName>
EOF
-
查看备份状态
kubectl get PerconaXtraDBClusterBackup -n <namespace> <backupName>
-
使用备份恢复
kubectl -n <namespace> apply -f - <<EOF
apiVersion: pxc.percona.com/v1
kind: PerconaXtraDBClusterRestore
metadata:
labels:
cluster: <name>
name: <restoreName>
namespace: <namespace>
spec:
backupName: <backupName>
pxcCluster: <name>
EOF