简介
现在很多客户的项目需要Mysql跨云数据迁移/同步服务。本文介绍如何通过配置主服务器和副本服务器在 Azure Database for MySQL 服务中设置“数据传入复制”。 凭借“数据传入复制(Data In Replication)”功能,可以将在本地或虚拟机中运行的主 MySQL 服务器或其他云提供程序托管的数据库服务中的数据同步到 Azure Database for MySQL 服务中的副本。
以下通过一个具体的示例来展示如何实现外部Mysql数据迁移或复制到Azure Database for MySQL。示例中将阿里云RDS Mysql作为主库,Azure Database for MySQL作为从库,实现数据迁移/复制。本文提供了具体的操作实现步骤,同时也起到举一反三的作用,同样适用于其他公有云的Mysql PaaS服务、公有云/私有云/自建的Mysql数据复制到Azure Database for MySQL。
注:本文所有内容均为测试内容,不涉及敏感信息,账号/密码等信息可以自行指定。
环境说明:
阿里RDS(主):一台
Azure Database for MySQL 服务器 (从):一台
Mysql版本:mysql 5.6
同步账户:repl
同步账户密码:z3pX2j$1(用户可自定义设置)
阿里RDS服务器域名:rm-m5e53j1111s1sgfkqpo.mysql.rds.aliyuncs.com
mysql登陆用户:xnsd (用户可自定义设置)
Azure Database for MySQL 服务器域名:sinoage.mysql.database.chinacloudapi.cn
mysql登陆用户:xnsd@sinoage(用户可自定义设置)
复制部分参考文档:https://docs.azure.cn/zh-cn/mysql/howto-data-in-replication
其他配置:
需要开通允许访问网段,本文为测试环境,所以开放为网段为0.0.0.0-255.255.255.255全网段
Azure Database for MySQL 服务器测试时候,配置为禁止SSL访问
Workbench 工具
名词解释:
REPLICATION SLAVE 常用于建立复制时所需要用到的用户权限,也就是slave server必须被master server授权具有该权限的用户,才能通过该用户复制。
REPLICATION CLIENT 不可用于建立复制,有该权限时,只是多了可以使用如"SHOW SLAVE STATUS"、"SHOW MASTER STATUS"等命令。
GTID 即全局事务ID(global transaction identifier),GTID实际上是由UUID+TID组成的。其中UUID是一个MySQL实例的唯一标识。TID代表了该实例上已经提交的事务数量,并且随着事务提交单调递增,所以GTID能够保证每个MySQL实例事务的执行(不会重复执行同一个事务,并且会补全没有执行的事务)。
阿里RDS(主)服务器的创建及配置
- 登陆阿里控制台,创建云数据库RDS版,按照需要创建相应的服务。
- 创建完成后,添加允许访问网络段及开通内外网域名。
- 创建高级权限用户。
- 设置完毕后,进行登陆测试。 mysql -hrm-m5e53j1111s1sgfkqpo.mysql.rds.aliyuncs.com -uxnsd -pSinoagecom123
- 登陆正常, 返回控制台创建同步使用的账号“repl”
- 创建完同步账号“repl”,查看是否有以REPLICATION SLAVE 和 REPLICATION CLIENT权限。
REPLICATION SLAVE 常用于建立复制时所需要用到的用户权限,也就是slave server必须被master server授权具有该权限的用户,才能通过该用户复制。
REPLICATION CLIENT 不可用于建立复制,有该权限时,只是多了可以使用如"SHOW SLAVE STATUS"、"SHOW MASTER STATUS"等命令。 - 查看GTID是否开启,阿里RDS默认是开启的,如果为关闭状态,可以提工单开启。确保阿里云和微软Azure上的GTID同时保持开启或者关闭。
Azure Database for MySQL 服务器(从)的创建及配置
- 登陆Azure门户,选择Azure Database for MySQL 服务器 ,创建 “常规用途” 定价层的Paas服务器,牢记用户名与密码。注意定价层为“基本”的服务器无复制命令!
- 创建完成后,添加允许访问网络段及开通内外网域名。
- 根据自己情况选择打开或者关闭SSL,本文以禁用SSL进行演示。
- 设置完毕后,进行登陆测试。 mysql -hsinoage.mysql.database.chinacloudapi.cn -uxnsd@sinoage -pSinoagecom123
- 登陆 workbench 创建同步使用的账号“repl”(一般同步账号为主服务器创建,副本服务器只是建议创建)。
- 为用户添加REPLICATION SLAVE 和 REPLICATION CLIENT权限。
- 查看GTID状态,查看到Azure的GTID模块为关闭状态,需要给21V开工单,打开GTID模块及相应参数。确保微软Azure和阿里云上的GTID同时保持开启或者关闭。
参考参数: --gtid_mode=ON --log-bin --log-slave-updates --enforce-gtid-consistency
- 开通后,会显示 “gtid_mode | ON ”
同步验证
- 在阿里RDS服务器(主)执行:show master status; 记录 File | Position ID号,后面会用到。
- 在AzurePaas服务器上依次执行:
格式为:CALL mysql.az_replication_change_master('<master_host>', '<master_user>', '<master_password>', 3306, '<master_log_file>', <master_log_pos>, '<master_ssl_ca>'); mysql>CALL mysql.az_replication_change_master('rm-m5e53j1111s1sgfkqpo.mysql.rds.aliyuncs.com', 'repl', 'z3pX2j$1', 3306, 'mysql-bin.000008', 63786, ''); mysql>CALL mysql.az_replication_start; mysql>show slave status\G
- 查看到以下参数为"Yes"为正常
Slave_IO_Running: Yes
Slave_SQL_Running: Yes - 在阿里控制台上创建新的数据库
- 在AzurePaas服务器上执行show databases;查看已经同步过来了。