基于商业备份集恢复

PolarDB-X Operator 从 v1.7.0 版本开始支持从阿里云PolarDB-X实例商业备份集中恢复出 PolarDB-X 集群。本文介绍如何通过已有的商业备份集恢复出 PolarDB-X 集群。

前提:阿里云PolarDB-X实例 需要为 兼容MySQL 8.0的企业版实例。

介绍

基于商业备份集恢复主要为了满足如下需求:

  • 多云冗灾。生产实例在阿里云上,但是希望在别的云厂商搭建该实例的从实例。
  • 线下测试使用。虽然已经在阿里云公有云上开通PolarDB-X实例,但是有些客户仍然有一部分线下的自建机器可用于日常测试使用。

操作步骤

总体步骤分为两部分: 导入备份集 和 发起恢复任务

导入备份集

运行的导入备份集工具,需要三个配置文件放在工具的配置目录下:

名称 文件名 是否必选 描述
备份集元数据文件 backupset_info.json JSON格式,保存云上备份集的元数据,主要包含实例拓扑和备份文件的下载链接
开源备份集存储端配置文件 sink.json JSON格式,存储端的类型、地址、鉴权密钥等
备份集导入工具运行配置 filestream.json JSON格式,可配置参数:parallelism(类型为int,设置上传并发度,默认为5)

准备工作

  1. 一个能调用 Open API DescribeOpenBackupSet 的账号。
  2. 确定线下备份集的存储端,当前支持的存储方式,参见文档:备份存储配置
  3. 一台安装了docker的主机,要求该主机有1GB的空闲内存,且以下网络是连通的:
    • 主机到线下存储端网络相通。
    • 主机到阿里云对象存储(OSS)的Endpoint的网络连通,地域根据云上PolarDB-X所在地域选择,要求对应地域公网Endpoint和内网Endpoint至少有一个可以连通。
    • 主机可连通镜像地址: polardbx-opensource-registry.cn-beijing.cr.aliyuncs.com

      一般同地域的阿里云ECS上可连通内网Endpoint。

获取云上实例的备份集元数据

  1. 登录阿里云账号
  2. 跳转到 Open API DescribeOpenBackupSet 调试页面
  3. 按要求输入接口参数 RegionId、DBInstanceName、RestoreTime
  4. 点击发起调用
  5. 保存返回结果中的Data字段的内容, 保存到文件 backupset_info.json

存储端配置 配置字段与文档备份存储配置中的相同。采用JSON格式,比如:

{
   "type": "oss",
   "name": "backuposs",
   "endpoint": "oss-cn-beijing-internal.aliyuncs.com",
   "accessKey": "xxxxx",
   "accessSecret": "xxxx",
   "bucket": "backup"
}

保存到文件 sink.json

导入步骤

  1. 登录主机,创建一个用于放置配置文件的目录,下文将该目录表示为 $CONFIG, 该目录包含如下文件:

    • 备份集元数据文件,backupset_info.json
    • 存储端配置文件,sink.json
    • (可选)备份集导入工具运行配置,filestream.json
  2. 拉取工具镜像

    docker pull polardbx-opensource-registry.cn-beijing.cr.aliyuncs.com/polardbx/backupset-importer:v1.7.0
    
  3. 运行工具镜像

    docker run  -d -v /root/config:/config --network=host  --name=polardbx-backupset-importer --entrypoint="/backupset-importer" polardbx-opensource-registry.cn-beijing.cr.aliyuncs.com/polardbx/backupset-importer:v1.7.0 -conf=/config
    

重复运行该命令,会有容器名称 polardbx-backupset-importer 已被占用的报错,请按照提示,将之前的容器进行重命名或者删除。删除可使用命令 docker rm polardbx-backupset-importer, 重命名命令可使用 docker rename polardbx-backupset-importer newname_polardbx-backupset-importer

  1. 查看工具运行日志
    docker logs polardbx-backupset-importer -f
    
  2. 带有关键字 "generate backupset upload objs" 的日志,列出需要上传的数据备份文件
  3. 带有关键字 "generate binlog upload objs" 的日志,列出需要上传的日志备份文件
  4. 待导入的备份文件,会有5个worker线程,并发上传文件,每个worker对正在上传的文件,每30秒汇报一次进度,比如:
    2024-10-29T08:46:54Z    INFO    backupset-importer    report upload process    {"action": "upload", "filepath": "polardbx-binlogbackup/default/pxc-xxxxxx/cb-2jyblvf5ea9hh7f6/pxc-xdb-s-xxxxx/xxxx/pxc-xdb-s-xxxxxx-cand-0/100385621/9_20/binlog-file/mysql_bin.000012", "sent": 0, "totalSize": 139206155, "process": "0%"}
    

如果由于宿主机重启、网络中断等原因,上传过程被意外中断,可重启容器进行续传。上传失败的文件会被重新上传,已上传的文件不会被重复上传。

  1. 检查上传结果 查看容器状态
    docker inspect polardbx-backupset-importer
    
    查看 State 字段 "Status": "exited" 且 "ExitCode": 0 ,表示导入任务已经正常结束。

如有异常,可 docker logs polardbx-backupset-importer 查看是否有报错日志。

基于导入的备份集做恢复

参考 指定时间点恢复跨K8S集群恢复PolarDB-X集群 编写用于恢复的yaml文件。

填写说明

  • .spec.config.dn.mycnfOverwrite 由于云上实例内核参数的差异,需要恢复的时候填上以下参数:

    innodb_log_file_size=8589934592
    innodb_page_size=16384
    innodb_data_file_path=ibdata1:200M:autoextend
    innodb_undo_tablespaces=6
    innodb_log_group_home_dir=/data/mysql/data
    innodb_undo_directory=/data/mysql/data
    
  • .spec.restore.storageProvider 根据导入备份集的存储端配置填写

  • .spec.restore.from.clusterName 填入被恢复实例的实例名称,比如 pxc-xxxxxx
  • .spec.restore.from.backupSetPath 填入数据备份集的文件路径,可去存储端查看,或者 docker logs polardbx-backupset-importer 2>&1 | grep polardbx-backup 查看日志参考备份集的上传路径,比如 polardbx-backup/pxc-bjrmsikf8pjrru/cb-53fjd5wetvbpbm36-20240924222506/
  • .spec.restore.time 填入UTC格式的时间(按照0时区),可选的时间范围是备份集元数据中两个字段确定 canBackupMinRecoverToTimeUTC 和 canBinlogRecoverToTimeUTC,时间范围是 (canBackupMinRecoverToTimeUTC,canBinlogRecoverToTimeUTC)
  • .spec.restore.binlogSource.heartbeatSName 根据云上实例的配置,需要填写为 heartbeat
  • .spec.restore.binlogSource.namespace 根据导入工具的设定,需要填写为 default
  • .spec.restore.binlogSource.storageProvider 根据导入备份集的存储端配置填写

填写例子如下:

apiVersion: polardbx.aliyun.com/v1
kind: PolarDBXCluster
metadata:
  name: pxc-restore-oss
spec:
  config:
    dn:
      mycnfOverwrite: |-
        innodb_log_file_size=8589934592
        innodb_page_size=16384
        innodb_data_file_path=ibdata1:200M:autoextend
        innodb_undo_tablespaces=6
        innodb_log_group_home_dir=/data/mysql/data
        innodb_undo_directory=/data/mysql/data

  topology:
    nodes:
      cn:
        template:
          image: polardbx-opensource-registry.cn-beijing.cr.aliyuncs.com/polardbx/polardbx-sql:v2.4.0_5.4.19
      dn:
        template:
          image: polardbx-opensource-registry.cn-beijing.cr.aliyuncs.com/polardbx/polardbx-engine:v2.4.0_8.4.19
  restore:
    storageProvider:
      storageName: oss
      sink: happydaixing
    from:
      clusterName: pxc-bjrmsikf8pjrru
      backupSetPath: "polardbx-backup/pxc-xxxxx/cb-xxxxxx-20240924222506/"
    time: "2024-09-26T03:22:05Z"
    binlogSource:
      heartbeatSName: "heartbeat"
      namespace: default
      storageProvider:
        storageName: oss
        sink: happydaixing

将填写文件并保存,使用 kubectl apply -f 命令即可发起恢复实例的创建。

results matching ""

    No results matching ""