通过RDS的原生复制功能,您可以为现有数据库创建一个云上的MySQL备库。本文将指导您快速完成云上备库的创建,并搭建基于MySQL原生复制的数据同步。
前提条件
操作流程概述
基于RDS原生复制创建云上备库的操作流程包含三个步骤:
源库进行全量备份。
将全量备份导入RDS MySQL原生复制实例。
通过MySQL命令搭建复制链路。
方案一:Xtrabackup流式备份 + OSS对象存储 + 重建原生复制实例
方案优势
RDS MySQL原生复制实例现已良好兼容Xtrabackup物理备份,具体支持以下特性:
自动识别备份文件中的GTID,实现位点自动对齐以搭建复制链路。
支持将备份文件上传至OSS,并启用服务端加密,确保数据安全。
可通过选定的备份集重建原生复制实例,有效解决复杂的复制中断问题。
费用
操作步骤
源库执行xtrabackup流式备份。
目前RDS原生复制仅支持MySQL 5.7版本,对应Percona XtraBackup 2.4版本。
若您需要对备份进行压缩,目前支持QuickLZ格式,通过
xtrabackup --compress
命令可开启备份压缩。安装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
执行备份。
xtrabackup命令支持InnoDB引擎,若源库含有MyISAM存储引擎,请使用
innobackupex
命令。xtrabackup --backup \ --host=127.0.0.1 \ --port=3306 \ --user=<自建MySQL的账号> \ --password=<账号密码> \ --stream=xbstream \ --compress > ./<备份文件名称,如backup_1206.xb>
上传备份数据至OSS。
您可以通过不同工具上传备份文件,例如ossutil 工具、OSS SDK等。本文以ossutil工具为例。
安装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>/
重建实例。
访问RDS实例列表,在目标RDS MySQL实例的基本信息页面,单击右上角重建实例。
在重建实例页面,选择Bucket和OSS文件,并单击确定。
搭建原生复制链路。
自建MySQL数据库中创建复制账号。
CREATE USER 'replica'@'%' IDENTIFIED BY 'Test123!'; GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'replica'@'%'; FLUSH PRIVILEGES;
执行以下命令连接RDS MySQL实例,详情请参见通过命令行、客户端连接RDS MySQL实例。
mysql -h连接地址 -P端口 -u用户名 -p
重要需要使用RDS MySQL实例的高权限账号连接RDS MySQL数据库。
RDS MySQL实例中执行以下命令,搭建原生复制链路。
# 搭建复制 CHANGE MASTER TO MASTER_HOST = '<自建MySQL主机IP>', MASTER_USER = '<自建MySQL的复制账号>',MASTER_PASSWORD ='<自建MySQL复制账号密码>', MASTER_PORT = 3306,MASTER_AUTO_POSITION = 1; # 开启复制 START SLAVE;
调试原生复制。
执行以下命令查看复制状态。
SHOW SLAVE STATUS\G
如果出现复制报错,您可以通过具体的报错信息调整复制。
如果出现复制中断,您可以在RDS控制台日志管理页面的错误日志页签查看。具体复制中断的问题及处理方法,请参见网络配置。
方案二:mysqldump逻辑备份 + DMS数据导入 + DMS命令执行
方案优势
控制台界面操作,易用性高。
费用
购买RDS MySQL实例会产生RDS规格费用和存储空间费用,详情请参见RDS实例计费说明。
操作步骤
执行mysqldump逻辑备份并获取SQL文件。
设置
SET GTID_PURGED
为off。目前RDS未开放修改SET GTID_PURGED
的权限,启用该参数会导致SQL回放错误。在使用mysqldump搭建从库复制时,通过添加
--master-data=2
选项可以自动生成包含CHANGE MASTER
命令的注释信息,从而免去手动输入Binlog信息的步骤。例如: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
DMS导入逻辑备份。
通过DMS登录RDS MySQL数据库(需要使用高权限账号),详情请参见通过DMS登录RDS数据库。
单击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 = '<SQL文件名>',MASTER_LOG_POS = 190; # 开启复制 START SLAVE; # 查看复制状态 SHOW SLAVE STATUS\G