备份与恢复

数据库备份与恢复是确保数据安全和业务连续性的关键功能。通过定期备份数据库,可以在数据丢失、损坏或操作错误时快速恢复数据,从而最大程度地减少业务中断和数据损失。

前提条件

在进行备份之前,请声明存储位置。您可以选择以下两种方法之一。

  • 持久卷声明(PVC,Kubernetes PersistentVolumeClaim):持久卷声明封装了对存储资源的请求配置,并根据请求的访问模式、存储大小和其他信息,自动匹配集群中合适的持久卷。

  • 外部 S3 存储:S3(Amazon Simple Storage Service)是亚马逊提供的一种对象存储服务。如果您需要将数据备份到您自己的 S3 存储桶,请与管理员确认该 S3 存储已集成到您的项目中。

操作步骤

CLI
Web Console
  1. 配置存储位置
  • 使用 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 密钥

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>
  1. 自动备份 在 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>
'
  1. 手动备份
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
  1. 查看备份状态
kubectl get PerconaXtraDBClusterBackup -n <namespace> <backupName> 
  1. 使用备份进行恢复
apiVersion: pxc.percona.com/v1
kind: PerconaXtraDBClusterRestore
metadata:
  labels:
    cluster: <name>
  name: <restoreName>
  namespace: <namespace>
spec:
  backupName: <backupName>
  pxcCluster: <name>
EOF