备份与恢复

目录

功能介绍

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

前提条件:

备份前,请根据业务数据量准备一个外部兼容 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 存储端点
storage.s3.regionS3 存储地域
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 存储端点
storage.s3.regionS3 存储地域
storage.s3.secret.nameS3 存储 secret 名称
type备份类型:full(全量)或 increment(增量)
  1. 等待备份完成并查看备份状态
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备份资源来源的实例名称
  1. 等待恢复完成并查看恢复状态
kubectl get MySQLRestore -n ${namespace} ${restore_name}

删除备份

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