备份与恢复

目录

功能介绍

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

前提条件:

备份前,请根据业务数据量准备一个外部兼容 S3 的存储。

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

配置存储信息

CLI
Web Console

创建 S3 secret

kubectl -n ${namespace} create secret generic ${secret_name} --from-literal=AWS_ACCESS_KEY_ID=${access_key} --from-literal=AWS_SECRET_ACCESS_KEY=${secret_key}

操作步骤

配置自动备份

CLI
Web Console

在 mysqlschedules 资源的 spec 中添加自动备份配置信息。

kubectl patch mysqlschedules -n ${namespace} ${instance_name}-schedule --type='merge' --patch '
spec:
  expiryDays: 7
  full:
    cron: 0 18 * * 6
    enable: true
  incr:
    cron: 0 19 * * 0,1,2,3,4,5
    enable: true
  storage:
    s3:
      bucket: ${bucket}
      endpoint: ${endpoint}
      region: ${region}
      secret:
        name: ${secretName}
'
参数说明
expiryDays备份数据的保留天数
full.cron全量备份的 Cron 表达式
incr.cron增量备份的 Cron 表达式
storage.s3.bucket桶名称
storage.s3.endpointS3 存储的 endpoint
storage.s3.regionS3 存储的 region
storage.s3.secret.nameS3 存储的 secret 名称

创建手动备份

前提条件

确保实例状态为 Running

CLI
Web Console
  1. 创建数据备份

    kubectl -n ${namespace} create -f - <<EOF
    apiVersion: mysql.middleware.alauda.io/v1
    kind: MySQLBackup
    metadata:
      name: ${backup_name}
      namespace: ${namespace}
    spec:
      cluster:
        name: ${instance_name}
      storage:
        s3:
          bucket: ${bucket}
          endpoint: ${endpoint}
          region: ${region}
          secret:
            name: ${secret_name}
      type: ${type}
    EOF
    参数说明
    backup_name备份资源名称
    namespace需要备份的实例所在的命名空间
    instance_name需要备份的实例名称
    storage.s3.bucket桶名称
    storage.s3.endpointS3 存储的 endpoint
    storage.s3.regionS3 存储的 region
    storage.s3.secret.nameS3 存储的 secret 名称
    type备份类型:full 或 increment
  2. 等待备份完成并查看备份状态

    kubectl get MySQLBackup -n ${namespace} ${backup_name}

使用备份恢复

CLI
Web Console
  1. 创建 MySQLRestore 以恢复数据

    kubectl -n ${namespace} create -f - <<EOF
    apiVersion: middleware.alauda.io/v1
    kind: MySQLRestore
    metadata:
      labels:
        mysql/arch: mgr
      name: ${restore_name}
      namespace: ${namespace}
    spec:
      mgr:
        backup:
          name: ${backup_name}
        cluster:
          name: ${target_instance_name}
        source:
          name: ${source_instance_name}
    EOF
    参数说明
    restore_name恢复资源名称
    namespace需要恢复的实例所在的命名空间
    backup_name用于恢复的全量备份资源名称
    target_instance_name恢复数据的目标实例名称
    source_instance_name备份资源来源的实例名称
  2. 等待恢复完成并查看恢复状态

    kubectl get MySQLRestore -n ${namespace} ${restore_name}

删除备份

CLI
Web Console
kubectl delete MySQLBackup -n ${namespace} ${backup_name}