RDS MySQL支持创建原生复制实例,用于在云上为自建MySQL数据库构建高可用的只读备库。本文介绍原生复制实例的创建方法,以及配置自建数据库至RDS MySQL原生复制实例的数据复制链路。
前提条件
已新建或将已有实例升级为原生复制实例,实例需满足如下条件(可在实例基本信息页面查看):
-
数据库版本:MySQL 5.7(小版本大于等于20240930)、8.0(小版本大于等于20250531)
-
产品系列:基础系列
-
计费方式:包年包月、按量付费
说明如需使用Serverless形态的原生复制实例,需先创建按量付费实例并开启原生复制,再将计费方式变更为Serverless。
-
支持地域:华东2(上海)、华北2(北京)、华南1(深圳)、华南3(广州)和西南1(成都)
重要RDS原生复制目前仅支持如上地域,其他地域陆续开放中,如有其他地域需求请提交工单。
-
自建MySQL数据库与RDS MySQL实例的数据库大版本保持一致(例如均为MySQL 8.0)。原生复制不支持跨大版本搭建备库,若大版本不一致(如将自建MySQL 5.7的备份导入RDS MySQL 8.0实例),导入备份任务将中断,并出现类似如下报错:
[ERROR] [MY-011825] [Xtrabackup] This version of Percona XtraBackup can only perform backups and restores against MySQL 8.0 and Percona Server 8.0, please use Percona XtraBackup 2.4 for this database.已为RDS MySQL实例创建高权限账号。
自建MySQL数据库和RDS MySQL实例的网络配置已成功打通。
操作流程概述
基于RDS原生复制创建云上备库的操作流程包含三个步骤:
自建MySQL数据库进行全量备份。
将自建MySQL数据库的全量备份导入RDS MySQL原生复制实例。
通过MySQL命令搭建自建MySQL数据库到RDS MySQL原生复制实例间的复制链路。
方案一:XtraBackup流式备份+OSS对象存储+数据导入原生复制实例
方案优势
RDS MySQL原生复制实例现已良好兼容XtraBackup物理备份,具体支持以下特性:
自动识别备份文件中的GTID,实现位点自动对齐以搭建复制链路。
支持将备份文件上传至OSS,并启用服务端加密,确保数据安全。
可通过选定的备份集重建原生复制实例,有效解决复杂的复制中断问题。
费用说明
操作步骤
-
在自建数据库中安装XtraBackup并执行备份
-
安装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安装
-
安装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
-
-
安装qpress:由于Ubuntu系统安装的XtraBackup不会集成qpress,因此需要单独进行安装。
sudo apt-get install -y qpress
-
-
执行备份:
以下三种压缩方案均基于
XtraBackup命令实现,适用于以InnoDB为主引擎的实例。若您的数据库包含MyISAM表,请使用innobackupex命令。方案一:默认qpress压缩
xtrabackup --backup \ --host=127.0.0.1 \ --port=3306 \ --user=<自建MySQL的账号> \ --password=<账号密码> \ --stream=xbstream \ --compress > ./<备份文件名称,如backup_1206.xb>方案二:QuickLZ压缩
本方案要求您所使用的XtraBackup版本为8.0.34-29或更早版本,详情请参见Percona XtraBackup官网教程。
xtrabackup --backup \ --host=127.0.0.1 \ --port=3306 \ --user=<自建MySQL的账号> \ --password=<账号密码> \ --stream=xbstream \ --compress > ./<备份文件名称,如backup_1206_qp.xb>方案三:ZSTD外部压缩
xtrabackup --backup \ --host=127.0.0.1 \ --port=3306 \ --user=<自建MySQL的账号> \ --password=<账号密码> \ --stream=xbstream \ | zstd -q - > ./<备份文件名称,如backup_1206.xb.zstd>
-
-
自建数据库备份上传至OSS
支持通过不同工具上传备份文件,例如ossutil 工具、OSS SDK等。本文以ossutil工具为例。
重要请确保目标OSS Bucket所在地域和RDS MySQL实例保持一致,否则后续OSS备份文件上传至RDS时将检索失败。
-
安装ossutil。
yum install -y unzip sudo -v ; curl https://gosspublic.alicdn.com/ossutil/install.sh | sudo bash ossutil config -
上传备份数据至OSS。
ossutil -e <OSS的Endpoint> -i <your_AccessKeyId> -k <your_AccessKeySecret> cp <备份文件名> oss://<Bucket_name>/
-
-
从OSS导入备份文件至RDS,并搭建自动复制链路
-
访问RDS实例列表,选择地域,点击目标实例ID进入详情页。
-
单击左侧导航栏中的原生复制。
-
在原生复制页面中单击导入全量数据,配置如下参数,并单击确定。
配置类别
参数名
说明
备份上传方式配置(必填)
MySQL版本
系统自动显示5.7或8.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 CLIENT、REPLICATION SLAVE权限。复制账号密码
输入源自建数据库的账号密码。
-
-
-
查看复制状态
返回RDS实例详情页的原生复制页面,查看数据复制链路信息。当复制状态显示为Running时,表示数据复制链路已成功搭建。
方案二:XtraBackup流式备份+流式备份直传+数据导入原生复制实例
方案优势
控制台界面操作,复制链路自动搭建,易用性高。
费用说明
新购实例开启原生复制时会收取新实例费用,已有实例升级为原生复制实例不额外收取费用。
操作步骤
-
在自建数据库中安装XtraBackup并执行备份
-
安装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安装
-
安装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
-
-
安装qpress:由于Ubuntu系统安装的XtraBackup不会集成qpress,因此需要单独进行安装。
sudo apt-get install -y qpress
-
-
执行备份:
以下三种压缩方案均基于
XtraBackup命令实现,适用于以InnoDB为主引擎的实例。若您的数据库包含MyISAM表,请使用innobackupex命令。方案一:默认qpress压缩
xtrabackup --backup \ --host=127.0.0.1 \ --port=3306 \ --user=<自建MySQL的账号> \ --password=<账号密码> \ --stream=xbstream \ --compress > ./<备份文件名称,如backup_1206.xb>方案二:QuickLZ压缩
本方案要求您所使用的XtraBackup版本为8.0.34-29或更早版本,详情请参见Percona XtraBackup官网教程。
xtrabackup --backup \ --host=127.0.0.1 \ --port=3306 \ --user=<自建MySQL的账号> \ --password=<账号密码> \ --stream=xbstream \ --compress > ./<备份文件名称,如backup_1206_qp.xb>方案三:ZSTD外部压缩
xtrabackup --backup \ --host=127.0.0.1 \ --port=3306 \ --user=<自建MySQL的账号> \ --password=<账号密码> \ --stream=xbstream \ | zstd -q - > ./<备份文件名称,如backup_1206.xb.zstd>
-
自建数据库数据备份传输到RDS
-
自建数据库安装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密码> -
在RDS内导入数据
-
登录RDS管理控制台,在上方选择地域,单击实例ID进入详情页。
-
单击左侧导航栏中的原生复制。
-
在原生复制页面中单击导入全量数据,配置如下参数,并单击确定。
配置类别
参数名
说明
备份上传方式配置(必填)
MySQL版本
系统自动显示5.7或8.0,无需配置。
方式
选择流式备份直传。
备份源IP
输入传输备份的IP地址。
备份源端口
输入传输备份的端口,默认为9999。
推荐开启自动搭建复制,系统将按照如下配置自动搭建数据复制链路。如您未开启自动搭建复制,在导入全量数据后需手动搭建复制链路。
自动复制链路配置(选填)
自动搭建复制
开启开关,将自动搭建自建MySQL库到RDS MySQL实例的复制关系。
复制源IP
输入源自建数据库IP。
复制源端口
输入源自建数据库端口号。
复制源账号
输入源自建数据库的账号,源账号需具备
REPLICATION CLIENT、REPLICATION SLAVE权限。复制账号密码
输入源自建数据库的账号密码。
-
-
-
查看复制状态
返回RDS实例详情页的原生复制页面,查看数据复制链路信息。当复制状态显示为Running时,表示数据复制链路已成功搭建。
方案三:mysqldump逻辑备份+DMS数据导入+SQL搭建复制链路
方案优势
控制台界面操作,易用性高。
费用说明
新购RDS MySQL实例会产生RDS规格费用和存储空间费用。
操作步骤
使用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文件名和位置,避免手动查询和输入复制位点。
DMS导入逻辑备份。
通过DMS登录RDS MySQL数据库(使用高权限账号)。
单击DMS控制台左上角的
图标,选择。说明若您使用的是非极简模式的控制台,在顶部菜单栏中,选择。
在数据变更工单申请页面,选择批量数据导入,并选择目标RDS MySQL数据库,上传逻辑备份SQL文件。数据导入的其他详细配置参数,请参见数据导入。
在DMS中执行命令搭建复制链路。
重要DMS导入逻辑备份会在云上备库生成独立的Binlog和GTID。若将此备库切换为主节点,可能会导致这些多余的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