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

通过RDS的原生复制功能,您可以为现有数据库创建一个云上的MySQL备库。本文将指导您快速完成云上备库的创建,并搭建基于MySQL原生复制的数据同步。

前提条件

  • 已创建RDS MySQL 5.7基础系列实例,并开启原生复制功能,详情请参见开启原生复制功能

  • RDS MySQL实例已创建高权限账号,详情请参见创建账号

  • 已成功配置了主库与RDS原生复制实例所在VPC之间的网络连接,详情请参见网络配置

操作流程概述

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

  1. 源库进行全量备份。

  2. 将全量备份导入RDS MySQL原生复制实例。

  3. 通过MySQL命令搭建复制链路。

方案一:Xtrabackup流式备份 + OSS对象存储 + 重建原生复制实例

方案优势

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

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

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

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

费用

  • 数据库备份文件上传至OSS,会产生OSS存储费用,详情请参见OSS计费项

  • 购买RDS MySQL实例会产生RDS规格费用和存储空间费用,详情请参见RDS实例计费说明

操作步骤

  1. 源库执行xtrabackup流式备份。

    目前RDS原生复制仅支持MySQL 5.7版本,对应Percona XtraBackup 2.4版本。

    若您需要对备份进行压缩,目前支持QuickLZ格式,通过xtrabackup --compress命令可开启备份压缩。

    1. 安装xtrabackup。

      yum install -y https://repo.percona.com/yum/percona-release-latest.noarch.rpm
      # 检查是否有xtrabckup
      yum list | grep percona
      percona-release enable-only tools release
      yum install -y percona-xtrabackup-24
    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工具为例。

    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. 重建实例。

    1. 访问RDS实例列表,在目标RDS MySQL实例的基本信息页面,单击右上角重建实例

    2. 在重建实例页面,选择BucketOSS文件,并单击确定image

  4. 搭建原生复制链路。

    1. 自建MySQL数据库中创建复制账号。

      CREATE USER 'replica'@'%' IDENTIFIED BY 'Test123!';
      GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'replica'@'%';
      FLUSH PRIVILEGES;
    2. 执行以下命令连接RDS MySQL实例,详情请参见通过命令行、客户端连接RDS MySQL实例

      mysql -h连接地址 -P端口 -u用户名 -p
      重要

      需要使用RDS MySQL实例的高权限账号连接RDS MySQL数据库。

    3. RDS MySQL实例中执行以下命令,搭建原生复制链路。

      # 搭建复制
      CHANGE MASTER TO MASTER_HOST = '<自建MySQL主机IP>', MASTER_USER = '<自建MySQL的复制账号>',MASTER_PASSWORD ='<自建MySQL复制账号密码>', MASTER_PORT = 3306,MASTER_AUTO_POSITION = 1;
      # 开启复制
      START SLAVE;
    4. 调试原生复制。

      执行以下命令查看复制状态。

      SHOW SLAVE STATUS\G

      如果出现复制报错,您可以通过具体的报错信息调整复制。

      如果出现复制中断,您可以在RDS控制台日志管理页面的错误日志页签查看。具体复制中断的问题及处理方法,请参见网络配置

方案二:mysqldump逻辑备份 + DMS数据导入 + DMS命令执行

方案优势

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

费用

购买RDS MySQL实例会产生RDS规格费用和存储空间费用,详情请参见RDS实例计费说明

操作步骤

  1. 执行mysqldump逻辑备份并获取SQL文件。

    1. 设置SET GTID_PURGEDoff。目前RDS未开放修改SET GTID_PURGED的权限,启用该参数会导致SQL回放错误。

    2. 在使用mysqldump搭建从库复制时,通过添加--master-data=2选项可以自动生成包含CHANGE MASTER命令的注释信息,从而免去手动输入Binlog信息的步骤。例如:image.png

      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
  2. DMS导入逻辑备份。

    1. 通过DMS登录RDS MySQL数据库(需要使用高权限账号),详情请参见通过DMS登录RDS数据库

    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 = '<SQL文件名>',MASTER_LOG_POS = 190;
    # 开启复制
    START SLAVE;
    # 查看复制状态
    SHOW SLAVE STATUS\G