本文介绍如何新建RDS MySQL原生复制实例或将已有实例升级为RDS MySQL原生复制实例,同时说明MySQL原生复制实例的使用权限及使用限制。
前提条件
如需新建或将已有实例升级为原生复制实例,需满足以下条件(可在实例基本信息页面查看):
数据库版本:MySQL 5.7(小版本大于等于20240930)、8.0(小版本大于等于20250531)
产品系列:基础系列
计费方式:包年包月、按量付费
说明如需使用Serverless形态的原生复制实例,需先创建按量付费实例并开启原生复制,再将计费方式变更为Serverless。
支持地域:华东2(上海)、华北2(北京)、华南1(深圳)、华南3(广州)和西南1(成都)
重要RDS原生复制目前仅支持如上地域,其他地域陆续开放中,如有其他地域需求请提交工单。
费用说明
原生复制权限
RDS MySQL原生复制实例的高权限账号将拥有额外的操作权限,这些权限通常在常规RDS MySQL实例中不可用。
原生复制命令权限
原生复制实例允许高权限账号执行以下MySQL原生复制命令。
配置主库(Master)与从库(Slave)进行复制同步:
CHANGE MASTER TO
具体信息,请参见CHANGE MASTER TO。启动复制进程:
START SLAVE;
具体信息请参见START SLAVE。停止复制进程:
STOP SLAVE;
具体信息请参见STOP SLAVE。重置从库状态:
RESET SLAVE;
以便重新开始与主库的复制过程。具体信息请参见RESET SLAVE。
参数修改权限
原生复制实例允许高权限账号执行以下三个关于修改运行态参数的SQL语句。
设置数据库服务器的只读模式。
SET GLOBAL read_only = ON/OFF;
设置为ON时,服务器进入只读模式。设置为OFF时,解除只读状态,允许读写操作。
设置当前会话是否将其执行的SQL语句记录到二进制日志(Binary Log)中。
SET SESSION sql_log_bin = ON/OFF;
设置为ON时,会话中的SQL操作将被记录到二进制日志中。设置为OFF时,会话执行的SQL语句不会被记录到二进制日志中。
设置全局事务标识符(GTID)的下一个值。
SET SESSION GTID_NEXT = "your_gtid_value";
当实例发生跨机迁移,变配等运维操作时,原生复制命令操作权限和参数修改权限将会被临时收回,但不会影响实例的复制进程,运维任务完成后权限会再次放开。
注意事项
RDS MySQL原生复制实例存在以下限制:
使用限制
实例会变为只读。
不支持升级大版本。
不支持升级产品系列(如基础系列升级为高可用系列或集群系列)。
不支持切换专有网络VPC。
不支持库表恢复。
已有实例升级为原生复制实例期间,实例可能会出现一次30秒的短暂闪断,请在低峰期操作并确保应用具有重连机制。
权限限制
高权限账号限制
原生复制功能所拥有的部分Super权限绑定在RDS MySQL实例的高权限账号上,仅高权限账号才能执行
CHANGE MASTER
、START SLAVE
等原生命令。复制权限限制
原生复制功能在应用外部Binlog时,会先进行权限判断,所有超出下列权限的操作都不会被应用,并且导致复制中断。
GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, RELOAD, PROCESS, REFERENCES, INDEX, ALTER, SHOW DATABASES, CREATE TEMPORARY TABLES, LOCK TABLES, EXECUTE, REPLICATION SLAVE, REPLICATION CLIENT, CREATE VIEW, SHOW VIEW, CREATE ROUTINE, ALTER ROUTINE, CREATE USER, EVENT, TRIGGER ON *.* TO XXX;
系统库限制
所有针对系统库的操作都会被忽略,系统库包括
mysql
、sys
、information_schema
、performance_schema
、__recyclebin__
。说明CREATE USER,GRANT等间接修改系统库的操作不会被忽略,但SQL语句需要遵循复制权限限制,越权操作(如
GRANT super on *.* to xxx;
)会中断复制。GTID限制
在MySQL原生复制配置中,要求主库与从库的GTID模式必须一致,二者均启用或均禁用GTID。RDS MySQL实例不支持关闭GTID模式,因此,若要将RDS MySQL实例作为从库与外部主库建立复制关系,该外部主库必须开启GTID模式以保持兼容。
搭建复制关系前,需要先在外部主库执行
SHOW VARIABLES LIKE 'gtid_mode';
查看GTID是否开启。如果GTID未开启,执行SET GLOBAL gtid_mode=ON;
开启外部主库的GTID模式。
一、升级为原生复制实例
新购实例时开启原生复制
新购RDS MySQL实例(标准创建页面)时,在页面下方展开更多配置,开启原生复制开关。需注意,原生复制入口仅在实例满足前提条件时展示。
已有实例升级为原生复制实例
已有实例升级为原生复制实例期间,实例可能会出现一次30秒的短暂闪断,请在低峰期操作并确保应用具有重连机制。
二、搭建自建数据库至RDS MySQL的数据复制
在自建数据库中安装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
命令。xtrabackup --backup \ --host=127.0.0.1 \ --port=3306 \ --user=<自建MySQL的账号> \ --password=<账号密码> \ --stream=xbstream \ --compress > ./<备份文件名称,如backup_1206.xb>
导入全量数据并自动搭建数据复制
说明导入数据前,请先打通自建MySQL数据库和RDS MySQL实例的网络配置。
方式一:从OSS导入备份文件
自建数据库备份上传至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
自建数据库安装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
权限。复制账号密码
输入源自建数据库的账号密码。
如您在导入全量数据时未选择自动搭建复制,或自动复制链路出现问题暂无法恢复,您可参考以下步骤,手动建立自建MySQL数据库到RDS MySQL实例的数据复制链路。
查看复制状态
返回RDS实例详情页的原生复制页面,查看数据复制链路信息。当复制状态显示为Running时,表示数据复制链路已成功搭建。
关闭原生复制
相关内容与API
通过API(CreateDBInstance)新建RDS MySQL原生复制实例,需注意:
实例基本配置需满足前提条件,其余参数按需配置即可。
设置ExternalReplication为ON。
通过API(ImportUserBackupFile)为已有实例搭建原生复制链路。
附录:网络配置
更多网络连接问题,请参见连接/网络。
业务场景 | 适用场景 | 配置方法 | 费用 |
同VPC互相访问 | ECS中的自建MySQL | 在同一个VPC内,网络默认连通,无需额外配置,只需设置安全组即可,开放该ECS对应安全组的3306端口给RDS的IP地址。 连接到RDS MySQL原生复制实例后执行 | 无 |
跨VPC互相访问 | 阿里云跨VPC、跨地域数据同步 |
| |
线下IDC与云上RDS互相访问 | IDC自建数据库到RDS原生复制实例 | 可通过VPN网关或专线接入等方式,连接IDC网络与RDS原生复制实例所在的VPC。 | 不同方式的费用不同,可查看官网文档。 |
跨云互相访问 | 他云数据库到RDS原生复制实例 | 在多云环境中,需建立跨云网络连接以实现互访。对于RDS原生复制场景,当RDS作为源端、他云数据库作为目标端时,可通过他云提供的网络服务,利用VPN或专线等方式来建立网络连接。 | 不同方式的费用不同,可查看官网文档。 |
公网访问(不推荐) | / | RDS原生复制实例支持通过公网访问外部节点。但需注意,外网链路存在安全隐患,不推荐使用。 | 不同方式的费用不同,可查看官网文档。 |