备份与恢复

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

目录

前提条件

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

  • Persistent Volume Claim(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 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>
  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>
    '
  2. 手动备份

    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
  3. 查看备份状态

    kubectl get PerconaXtraDBClusterBackup -n <namespace> <backupName>
  4. 使用备份恢复

    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