备份与恢复
数据库备份与恢复是确保数据安全和业务连续性的关键功能。通过定期备份数据库,可以在数据丢失、损坏或操作错误时快速恢复数据,从而最大程度地减少业务中断和数据损失。
前提条件
在进行备份之前,请声明存储位置。您可以选择以下两种方法之一。
-
持久卷声明(PVC,Kubernetes PersistentVolumeClaim):持久卷声明封装了对存储资源的请求配置,并根据请求的访问模式、存储大小和其他信息,自动匹配集群中合适的持久卷。
-
外部 S3 存储:S3(Amazon Simple Storage Service)是亚马逊提供的一种对象存储服务。如果您需要将数据备份到您自己的 S3 存储桶,请与管理员确认该 S3 存储已集成到您的项目中。
操作步骤
- 配置存储位置
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>
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>
- 使用备份进行恢复
apiVersion: pxc.percona.com/v1
kind: PerconaXtraDBClusterRestore
metadata:
labels:
cluster: <name>
name: <restoreName>
namespace: <namespace>
spec:
backupName: <backupName>
pxcCluster: <name>
EOF