将外部Mysql数据复制到Azure Database for MySQL

一、 简介
现在很多客户的项目需要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登陆用户:[email protected](用户可自定义设置)

复制部分参考文档: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(主)服务器的创建及配置

  1. 登陆阿里控制台,创建云数据库RDS版,按照需要创建相应的服务
    将外部Mysql数据复制到Azure Database for MySQL

  2. 创建完成后,添加允许访问网络段及开通内外网域名。
    将外部Mysql数据复制到Azure Database for MySQL
    将外部Mysql数据复制到Azure Database for MySQL

  3. 创建高级权限用户
    将外部Mysql数据复制到Azure Database for MySQL

  4. 设置完毕后,进行登陆测试。
    mysql -hrm-m5e53j1111s1sgfkqpo.mysql.rds.aliyuncs.com -uxnsd -pSinoagecom123
    将外部Mysql数据复制到Azure Database for MySQL

  5. 登陆正常, 返回控制台创建同步使用的账号“repl”
    将外部Mysql数据复制到Azure Database for MySQL

  6. 创建完同步账号“repl”,查看是否有以REPLICATION SLAVE 和 REPLICATION CLIENT权限。
    REPLICATION SLAVE 常用于建立复制时所需要用到的用户权限,也就是slave server必须被master server授权具有该权限的用户,才能通过该用户复制。
    REPLICATION CLIENT 不可用于建立复制,有该权限时,只是多了可以使用如"SHOW SLAVE STATUS"、"SHOW MASTER STATUS"等命令。
    将外部Mysql数据复制到Azure Database for MySQL

  7. 查看GTID是否开启,阿里RDS默认是开启的,如果为关闭状态,可以提工单开启。确保阿里云和微软Azure上的GTID同时保持开启或者关闭。
    将外部Mysql数据复制到Azure Database for MySQL

三、 Azure Database for MySQL 服务器(从)的创建及配置

  1. 登陆Azure门户,选择Azure Database for MySQL 服务器 ,创建 “常规用途” 定价层的Paas服务器,牢记用户名与密码。注意定价层为“基本”的服务器无复制命令!
    将外部Mysql数据复制到Azure Database for MySQL
    将外部Mysql数据复制到Azure Database for MySQL
  2. 创建完成后,添加允许访问网络段及开通内外网域名。
    将外部Mysql数据复制到Azure Database for MySQL
  3. 根据自己情况选择打开或者关闭SSL,本文以禁用SSL进行演示。
    将外部Mysql数据复制到Azure Database for MySQL
  4. 设置完毕后,进行登陆测试。
    mysql -hsinoage.mysql.database.chinacloudapi.cn [email protected] -pSinoagecom123
    将外部Mysql数据复制到Azure Database for MySQL
  5. 登陆 workbench 创建同步使用的账号“repl”(一般同步账号为主服务器创建,副本服务器只是建议创建)
    将外部Mysql数据复制到Azure Database for MySQL
    将外部Mysql数据复制到Azure Database for MySQL
    将外部Mysql数据复制到Azure Database for MySQL
  6. 为用户添加REPLICATION SLAVE 和 REPLICATION CLIENT权限。
    将外部Mysql数据复制到Azure Database for MySQL
  7. 查看GTID状态
    将外部Mysql数据复制到Azure Database for MySQL
    查看到Azure的GTID模块为关闭状态,需要给21V开工单,打开GTID模块及相应参数。确保微软Azure和阿里云上的GTID同时保持开启或者关闭。
    参考参数:
    –gtid_mode=ON
    –log-bin
    –log-slave-updates
    –enforce-gtid-consistency
  8. 开通后,会显示 “gtid_mode | ON ”
    将外部Mysql数据复制到Azure Database for MySQL

    四、 同步验证
  9. 在阿里RDS服务器(主)执行:
    show master status;
    记录File | Position 号,后面会用到。
    将外部Mysql数据复制到Azure Database for MySQL
  10. 在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
    将外部Mysql数据复制到Azure Database for MySQL
  11. 查看到以下参数为"Yes"为正常
    Slave_IO_Running: Yes
    Slave_SQL_Running: Yes
    将外部Mysql数据复制到Azure Database for MySQL
  12. 在阿里控制台上创建新的数据库
    将外部Mysql数据复制到Azure Database for MySQL
    将外部Mysql数据复制到Azure Database for MySQL
  13. 在AzurePaas服务器上执行show databases;查看已经同步过来了。
    将外部Mysql数据复制到Azure Database for MySQL