基于RDS原生复制创建云上备库

RDS MySQL支持创建原生复制实例,用于在云上为自建MySQL数据库构建高可用的只读备库。本文介绍原生复制实例的创建方法,以及配置自建数据库至RDS MySQL原生复制实例的数据复制链路。

前提条件

  • 新建或将已有实例升级为原生复制实例,实例需满足如下条件(可在实例基本信息页面查看):

    • 数据库版本:MySQL 5.7(小版本大于等于20240930)、8.0(小版本大于等于20250531)

    • 产品系列:基础系列

    • 计费方式:包年包月、按量付费

      说明

      如需使用Serverless形态的原生复制实例,需先创建按量付费实例并开启原生复制,再将计费方式变更为Serverless

    • 支持地域:华东2(上海)、华北2(北京)、华南1(深圳)、华南3(广州)和西南1(成都)

      重要

      RDS原生复制目前仅支持如上地域,其他地域陆续开放中,如有其他地域需求请提交工单

  • 已为RDS MySQL实例创建高权限账号

  • 自建MySQL数据库和RDS MySQL实例的网络配置已成功打通。

操作流程概述

基于RDS原生复制创建云上备库的操作流程包含三个步骤:

  1. 自建MySQL数据库进行全量备份。

  2. 将自建MySQL数据库的全量备份导入RDS MySQL原生复制实例。

  3. 通过MySQL命令搭建自建MySQL数据库到RDS MySQL原生复制实例间的复制链路。

方案一:XtraBackup流式备份+OSS对象存储+数据导入原生复制实例

方案优势

RDS MySQL原生复制实例现已良好兼容XtraBackup物理备份,具体支持以下特性:

  • 自动识别备份文件中的GTID,实现位点自动对齐以搭建复制链路。

  • 支持将备份文件上传至OSS,并启用服务端加密,确保数据安全。

  • 可通过选定的备份集重建原生复制实例,有效解决复杂的复制中断问题。

费用说明

  • 新购实例开启原生复制时会收取新实例费用,已有实例升级为原生复制实例不额外收取费用。

  • 在导入全量数据至RDS MySQL实例的过程中,如果您选择先将自建数据库备份上传至OSS,再从OSS下载备份至RDS,则备份存储在OSS的期间会产生OSS存储费用

操作步骤

  1. 在自建数据库中安装XtraBackup并执行备份

    1. 安装XtraBackup:

      CentOS安装

      • MySQL 5.7

        wget https://downloads.percona.com/downloads/Percona-XtraBackup-2.4/Percona-XtraBackup-2.4.29/binary/redhat/8/x86_64/percona-xtrabackup-24-2.4.29-1.el8.x86_64.rpm
        yum localinstall percona-xtrabackup-24-2.4.29-1.el8.x86_64.rpm
      • MySQL 8.0

        wget https://downloads.percona.com/downloads/Percona-XtraBackup-8.0/Percona-XtraBackup-8.0.35-31/binary/redhat/8/x86_64/percona-xtrabackup-80-8.0.35-31.1.el8.x86_64.rpm
        yum localinstall percona-xtrabackup-80-8.0.35-31.1.el8.x86_64.rpm

      Ubuntu安装

      1. 安装XtraBackup

        • MySQL 5.7

          wget https://downloads.percona.com/downloads/Percona-XtraBackup-2.4/Percona-XtraBackup-2.4.29/binary/redhat/8/x86_64/percona-xtrabackup-24-2.4.29-1.el8.x86_64.rpm
          yum localinstall percona-xtrabackup-24-2.4.29-1.el8.x86_64.rpm
        • MySQL 8.0

          wget https://downloads.percona.com/downloads/Percona-XtraBackup-8.0/Percona-XtraBackup-8.0.35-31/binary/redhat/8/x86_64/percona-xtrabackup-80-8.0.35-31.1.el8.x86_64.rpm
          yum localinstall percona-xtrabackup-80-8.0.35-31.1.el8.x86_64.rpm
      2. 安装qpress:由于Ubuntu系统安装的XtraBackup不会集成qpress,因此需要单独进行安装。

        sudo apt-get install -y qpress
    2. 执行备份:XtraBackup命令支持InnoDB引擎,若源库含有MyISAM存储引擎,请使用innobackupex命令。

      xtrabackup --backup \
        --host=127.0.0.1 \
        --port=3306 \
        --user=<自建MySQL的账号> \
        --password=<账号密码> \
        --stream=xbstream \
        --compress > ./<备份文件名称,如backup_1206.xb>
  2. 自建数据库备份上传至OSS

    支持通过不同工具上传备份文件,例如ossutil 工具、OSS SDK等。本文以ossutil工具为例。

    重要

    请确保目标OSS Bucket所在地域和RDS MySQL实例保持一致,否则后续OSS备份文件上传至RDS时将检索失败。

    1. 安装ossutil。

      yum install -y unzip
      sudo -v ; curl https://gosspublic.alicdn.com/ossutil/install.sh | sudo bash
      ossutil config
    2. 上传备份数据至OSS。

      ossutil -e <OSSEndpoint> -i <your_AccessKeyId> -k <your_AccessKeySecret> cp <备份文件名> oss://<Bucket_name>/
  3. OSS导入备份文件至RDS,并搭建自动复制链路

    1. 访问RDS实例列表,选择地域,点击目标实例ID进入详情页。

    2. 单击左侧导航栏中的原生复制

    3. 在原生复制页面中单击导入全量数据,配置如下参数,并单击确定

      配置类别

      参数名

      说明

      备份上传方式配置(必填)

      MySQL版本

      系统自动显示5.78.0,无需配置。

      方式

      选择OSS下载

      OSS Bucket

      选择自建库备份文件所在的OSS Bucket。关于OSS Bucket的更多信息,请参见上传文件

      OSS文件名

      选择OSS Bucket中的自建库备份文件。若备份在OSS Bucket子目录中,需手动输入完整路径名进行搜索。支持以下三种格式的备份文件:

      • Xtrabackup直接生成的xbstream文件。

      • 使用Xtrabackup自带quicklz压缩生成的_qp.xb文件。

      • zstd压缩的xbstream文件(后缀为.xb.zst)。

      推荐开启自动搭建复制,系统将按照如下配置自动搭建数据复制链路。如您未开启自动搭建复制,在导入全量数据后需手动搭建复制链路

      自动复制链路配置(选填)

      自动搭建复制

      开启开关,将自动搭建自建MySQL库到RDS MySQL实例的复制关系。

      复制源IP

      输入源自建数据库IP。

      复制源端口

      输入源自建数据库端口号。

      复制源账号

      输入源自建数据库的账号,源账号需具备REPLICATION CLIENTREPLICATION SLAVE权限。

      复制账号密码

      输入源自建数据库的账号密码。

  4. 查看复制状态

    返回RDS实例详情页的原生复制页面,查看数据复制链路信息。当复制状态显示为Running时,表示数据复制链路已成功搭建。

    image

方案二:XtraBackup流式备份+流式备份直传+数据导入原生复制实例

方案优势

控制台界面操作,复制链路自动搭建,易用性高。

费用说明

新购实例开启原生复制时会收取新实例费用,已有实例升级为原生复制实例不额外收取费用。

操作步骤

  1. 在自建数据库中安装XtraBackup并执行备份

    1. 安装XtraBackup:

      CentOS安装

      • MySQL 5.7

        wget https://downloads.percona.com/downloads/Percona-XtraBackup-2.4/Percona-XtraBackup-2.4.29/binary/redhat/8/x86_64/percona-xtrabackup-24-2.4.29-1.el8.x86_64.rpm
        yum localinstall percona-xtrabackup-24-2.4.29-1.el8.x86_64.rpm
      • MySQL 8.0

        wget https://downloads.percona.com/downloads/Percona-XtraBackup-8.0/Percona-XtraBackup-8.0.35-31/binary/redhat/8/x86_64/percona-xtrabackup-80-8.0.35-31.1.el8.x86_64.rpm
        yum localinstall percona-xtrabackup-80-8.0.35-31.1.el8.x86_64.rpm

      Ubuntu安装

      1. 安装XtraBackup

        • MySQL 5.7

          wget https://downloads.percona.com/downloads/Percona-XtraBackup-2.4/Percona-XtraBackup-2.4.29/binary/redhat/8/x86_64/percona-xtrabackup-24-2.4.29-1.el8.x86_64.rpm
          yum localinstall percona-xtrabackup-24-2.4.29-1.el8.x86_64.rpm
        • MySQL 8.0

          wget https://downloads.percona.com/downloads/Percona-XtraBackup-8.0/Percona-XtraBackup-8.0.35-31/binary/redhat/8/x86_64/percona-xtrabackup-80-8.0.35-31.1.el8.x86_64.rpm
          yum localinstall percona-xtrabackup-80-8.0.35-31.1.el8.x86_64.rpm
      2. 安装qpress:由于Ubuntu系统安装的XtraBackup不会集成qpress,因此需要单独进行安装。

        sudo apt-get install -y qpress
    2. 执行备份:XtraBackup命令支持InnoDB引擎,若源库含有MyISAM存储引擎,请使用innobackupex命令。

      xtrabackup --backup \
        --host=127.0.0.1 \
        --port=3306 \
        --user=<自建MySQL的账号> \
        --password=<账号密码> \
        --stream=xbstream \
        --compress > ./<备份文件名称,如backup_1206.xb>
  2. 自建数据库数据备份传输到RDS

    1. 自建数据库安装backup-helper工具,并建立备份传输进程

      # 安装backup-helper工具
      wget -O backup-helper https://mysql-backup-helper.oss-cn-beijing.aliyuncs.com/v1.0.0-alpha/backup-helper && chmod +x backup-helper
      
      # 通过工具建立备份传输进程(需确保环境中有运行中的MySQL,并根据自建库版本安装了对应版本的XtraBackup)
      ./backup-helper --backup --mode=stream --host=<MySQL ip> --port=<MySQL端口> --user=<MySQL账户> --password=<MySQL密码>
    2. RDS内导入数据

      1. 登录RDS管理控制台,在上方选择地域,单击实例ID进入详情页。

      2. 单击左侧导航栏中的原生复制

      3. 在原生复制页面中单击导入全量数据,配置如下参数,并单击确定

        配置类别

        参数名

        说明

        备份上传方式配置(必填)

        MySQL版本

        系统自动显示5.78.0,无需配置。

        方式

        选择流式备份直传

        备份源IP

        输入传输备份的IP地址。

        备份源端口

        输入传输备份的端口,默认为9999。

        推荐开启自动搭建复制,系统将按照如下配置自动搭建数据复制链路。如您未开启自动搭建复制,在导入全量数据后需手动搭建复制链路

        自动复制链路配置(选填)

        自动搭建复制

        开启开关,将自动搭建自建MySQL库到RDS MySQL实例的复制关系。

        复制源IP

        输入源自建数据库IP。

        复制源端口

        输入源自建数据库端口号。

        复制源账号

        输入源自建数据库的账号,源账号需具备REPLICATION CLIENTREPLICATION SLAVE权限。

        复制账号密码

        输入源自建数据库的账号密码。

  3. 查看复制状态

    返回RDS实例详情页的原生复制页面,查看数据复制链路信息。当复制状态显示为Running时,表示数据复制链路已成功搭建。

    image

方案三:mysqldump逻辑备份+DMS数据导入+SQL搭建复制链路

方案优势

控制台界面操作,易用性高。

费用说明

新购RDS MySQL实例会产生RDS规格费用和存储空间费用

操作步骤

  1. 使用mysqldump对自建MySQL数据库进行逻辑备份,并获取SQL文件。命令如下:

    mysqldump --all-databases \
        --single-transaction \
        --order-by-primary \
        --set-gtid-purged=off \
        --master-data=2 \
        -u local_user \
        -p local_password \
        -h 127.0.0.1
        -P 3306 > data.sql
    • 由于RDS MySQL未开放修改SET GTID_PURGED的权限,启用该参数会导致SQL回放错误,因此需要在命令中设置set-gtid-purged=off

    • 使用mysqldump搭建从库时,通过添加--master-data=2选项,可自动生成包含CHANGE MASTER TO语句的注释信息,便于直接获取主库的Binlog文件名和位置,避免手动查询和输入复制位点。例如:

      image.png

  2. DMS导入逻辑备份。

    1. 通过DMS登录RDS MySQL数据库使用高权限账号)。

    2. 单击DMS控制台左上角的2023-01-28_15-57-17.png图标,选择全部功能 > 数据库开发 > 数据变更 > 数据导入

      说明

      若您使用的是非极简模式的控制台,在顶部菜单栏中,选择数据库开发 > 数据变更 > 数据导入

    3. 数据变更工单申请页面,选择批量数据导入,并选择目标RDS MySQL数据库,上传逻辑备份SQL文件。数据导入的其他详细配置参数,请参见数据导入

  3. DMS中执行命令搭建复制链路。

    重要

    DMS导入逻辑备份会在云上备库生成独立的BinlogGTID。若将此备库切换为主节点,可能会导致这些多余的GTID被复制到其他节点,从而引发复制中断。为避免这一问题,可采取以下任意一种措施:

    • 在搭建复制前,先关闭再重新开启原生复制,该操作会执行RESET MASTER

    • 在复制拓扑中的其他节点插入空事务,覆盖冗余的GTID,起到占位的效果

    # 搭建复制
    CHANGE MASTER TO MASTER_HOST = '<自建MySQL主机IP>', MASTER_USER = '<自建MySQL的复制账号>',MASTER_PASSWORD ='<自建MySQL复制账号密码>', MASTER_PORT = 3306,MASTER_LOG_FILE = '<Binlog文件名>',MASTER_LOG_POS = 190;
    # 开启复制
    START SLAVE;
    # 查看复制状态
    SHOW SLAVE STATUS\G