• Русский
  • Резервное копирование и восстановление

    Введение в функционал

    Резервное копирование и восстановление баз данных — это критически важные функции для обеспечения безопасности данных и непрерывности бизнеса. Регулярное создание резервных копий баз данных позволяет быстро восстановить данные в случае их потери, повреждения или случайных операций, тем самым минимизируя простои бизнеса и потерю данных.

    Предварительные требования:

    Перед резервным копированием подготовьте внешнее хранилище, совместимое с S3, исходя из объема бизнес-данных.

    • Внешнее S3-хранилище: S3 (Amazon Simple Storage Service) — это сервис объектного хранения, предоставляемый Amazon. Если необходимо создавать резервные копии в собственный S3 bucket, подтвердите с администратором, что S3-хранилище интегрировано с вашим проектом.

    Настройка информации о хранилище

    CLI
    Web Console

    Создайте секрет S3

    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

    Добавьте конфигурацию автоматического резервного копирования в spec ресурса mysqlschedules.

    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.cronCron-выражение для полного бэкапа
    incr.cronCron-выражение для инкрементного бэкапа
    storage.s3.bucketИмя bucket
    storage.s3.endpointEndpoint S3-хранилища
    storage.s3.regionРегион S3-хранилища
    storage.s3.secret.nameИмя секрета для S3-хранилища

    Создание ручного резервного копирования

    Предварительное условие

    Убедитесь, что статус экземпляра — 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Имя ресурса резервной копии
      namespaceNamespace, в котором находится экземпляр для бэкапа
      instance_nameИмя экземпляра для резервного копирования
      storage.s3.bucketИмя bucket
      storage.s3.endpointEndpoint S3-хранилища
      storage.s3.regionРегион S3-хранилища
      storage.s3.secret.nameИмя секрета для S3-хранилища
      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Имя ресурса восстановления
      namespaceNamespace, в котором находится восстанавливаемый экземпляр
      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}