【大数据学习笔记-3】将阿里云上的mysql数据库实时自动化复制到华为云mysql数据库,分析行为数据

【学习背景】

近期在给一个电商客户做用户行为分析的大数据平台,计划使用华为云的mapreduce服务中的spark和hive组件。当使用华为云数据迁移服务CDM迁移完在源端阿里云的数据库后,发现没有触发增量迁移的相关功能,那么问题来了:源端阿里云上的数据库发生更新后,华为云如何感知到数据变化,如何自动实时复制增量数据呢?分析用户行为数据(检测薅羊毛、预警店铺当日最大转账额度等)都需要实时数据分析后进行预警。

本文主要探讨用阿里云DTS服务如何将RDS mysql的增量数据复制到华为云RDS mysql中。

整体架构如下:

【大数据学习笔记-3】将阿里云上的mysql数据库实时自动化复制到华为云mysql数据库,分析行为数据

 

【原因分析】

华为云CDM作为一个通用的迁移框架,为了考虑每种迁移场景的增量复制需求,通过源数据的文件或表中的时间字段的更新情况来判断数据更新,从而进行的增量复制。 华为云CDM(云迁移服务)的说明如下:

【大数据学习笔记-3】将阿里云上的mysql数据库实时自动化复制到华为云mysql数据库,分析行为数据

【增量数据自动复制到华为云的解决方案】

方案1:在源数据库中每张表增加变更时间记录或者业务程序在更新源数据库时,同时双写一份到华为云。

结论:不可行,涉及源数据库或业务程序的改动,工作量大,风险大,无法确认哪些业务更新了什么字段

 

方案2:通过华为云DMS服务将mysql数据库的binlog日志进行识别差异数据和增量复制。详细架构图如下。

结论:需要阿里云数据库主库的root权限,这样才能访问到binlog日志,进行增量复制。

考虑到root账号的敏感性,本文选择使用阿里云DTS迁移工具来将数据迁出阿里云。 如果使用华为DRS迁移工具将数据从阿里云迁移过程,意味着客户要提供数据库root账号给华为,客户肯定会有担忧。

只读实例因为不记录日志无法增量同步,只读实例本身就是利用mysql的binlog进行数据更新的。阿里云官网说明:https://help.aliyun.com/knowledge_detail/43535.html

另外只读实例与主库存在不同步的情况,主要原因如下。由于用户行为分析并不需要精确到秒级,只需分钟级的准确度即可。

https://help.aliyun.com/knowledge_detail/41767.html

【关键思路】

  1. 在阿里云上创建RDS mysql数据库,构造测试数据,设置只读账号,配置白名单,开通外网访问权限。配置只读数据库实例。
  2. 在华为云上购买RDS MySQL数据库。
  3. 使用阿里云DTS服务将数据库从阿里云复制到华为云。
  4. 更新主库的数据,检查是否自动复制到华为云上了。

【操作步骤】

1、在阿里云上创建RDS mysql数据库,构造测试数据,设置只读账号,配置白名单,开通外网访问权限。配置只读数据库实例。

<1> 在阿里云上购买按需付费,最低配置的测试数据库实例。

【大数据学习笔记-3】将阿里云上的mysql数据库实时自动化复制到华为云mysql数据库,分析行为数据

分别创建root 和 readonly权限的数据库账号。创建一个测试数据库,并将只读权限的账号和数据库关联

【大数据学习笔记-3】将阿里云上的mysql数据库实时自动化复制到华为云mysql数据库,分析行为数据

使用root账户登录数据库,创建test1表,随机生成10条数据,作为原始数据。

【大数据学习笔记-3】将阿里云上的mysql数据库实时自动化复制到华为云mysql数据库,分析行为数据

【大数据学习笔记-3】将阿里云上的mysql数据库实时自动化复制到华为云mysql数据库,分析行为数据

2、在华为云上购买RDS MySQL数据库。

新用户在华为云活动页面https://activity.huaweicloud.com/dbmove/index.html可免费领取10天的数据库体验版,区域选择北京区域。

【大数据学习笔记-3】将阿里云上的mysql数据库实时自动化复制到华为云mysql数据库,分析行为数据

在mysql数据库的控制台中为实例开通公网访问权限,本文仅测试功能,免费的1M空间即可。

【大数据学习笔记-3】将阿里云上的mysql数据库实时自动化复制到华为云mysql数据库,分析行为数据

创建一个测试数据库,用于存放阿里云的数据。

【大数据学习笔记-3】将阿里云上的mysql数据库实时自动化复制到华为云mysql数据库,分析行为数据

创建一个读写权限的账号,用于阿里云的DTS迁移服务,将数据从阿里云复制到华为云上。

【大数据学习笔记-3】将阿里云上的mysql数据库实时自动化复制到华为云mysql数据库,分析行为数据

3、在阿里云网站上,打开数据迁移服务DTS控制台,新建一个华北2-北京区域的迁移任务

【大数据学习笔记-3】将阿里云上的mysql数据库实时自动化复制到华为云mysql数据库,分析行为数据

在目标数据库中,选择实例类型:有公网IP的自建数据库。实例地区:华北2(北京),即华为云上RDS数据库所在的区域。点击DTS IP,在弹出的窗口中复制所有的IP,用于添加到华为云RDS的白名单中。

【大数据学习笔记-3】将阿里云上的mysql数据库实时自动化复制到华为云mysql数据库,分析行为数据

4、将DTS IP网段添加到华为云的RDS mysql的白名单中。注意要把DTS网段都加上,或者全开放,否则可能DTS服务器集群进行连接测试会很长时间。本文图方便,直接填IP和掩码都是0,测试功能即可。

【大数据学习笔记-3】将阿里云上的mysql数据库实时自动化复制到华为云mysql数据库,分析行为数据

5、同样将DTS IP段添加到阿里云的数据库实例的白名单中。测试阿里云DTS连接华为云RDS数据库是否网络打通。

【大数据学习笔记-3】将阿里云上的mysql数据库实时自动化复制到华为云mysql数据库,分析行为数据

6、用阿里云数据库只读账号测试与DTS服务的连接状态。注意:如果密码输入错误,DTS提示ping失败,这个提示很容易误导人。

【大数据学习笔记-3】将阿里云上的mysql数据库实时自动化复制到华为云mysql数据库,分析行为数据

7、在创建DTS的界面中,测试连接源库和目标库成功后,下一步中迁移类型选择“结构迁移”,“全量数据迁移”和“增量数据迁移”,迁移对象只选择用户自己创建的数据库,系统数据库不选。

【大数据学习笔记-3】将阿里云上的mysql数据库实时自动化复制到华为云mysql数据库,分析行为数据

点击测试,发现目标数据库(华为云RDS)的权限不足,缺乏创建数据库的权限。

【大数据学习笔记-3】将阿里云上的mysql数据库实时自动化复制到华为云mysql数据库,分析行为数据

解决办法:

<1>提供root权限给阿里云DTS进行访问。

<2>根据DTS提示,通过sql语句,给用于复制的账号开通相应的create、delete、insert、update、select命令的权限。

本文采用办法2,最小权限原则,给复制账号开通权限。

在RDS数据库的控制台种,并使用root账户登录数据库,复制阿里云DTS提示的解决方案种的命令,在华为云数据库的SQL命令行中执行,给测试账号copyuser开通相应的权限。注意:阿里云DTS提示的命令中没有包含SELECT,需要手工增加。

grant CREATE on *.* TO 'copyuser'@'%';

grant DELETE,CREATE,INSERT,UPDATE,SELECT on sys.* TO 'copyuser'@'%'

【大数据学习笔记-3】将阿里云上的mysql数据库实时自动化复制到华为云mysql数据库,分析行为数据

再次执行阿里云DTS的复制检查,全部通过。

【大数据学习笔记-3】将阿里云上的mysql数据库实时自动化复制到华为云mysql数据库,分析行为数据

确认测试数据库连接成功,购买最低配置进行测试即可。

【大数据学习笔记-3】将阿里云上的mysql数据库实时自动化复制到华为云mysql数据库,分析行为数据

确认购买后自动开启结构迁移和全量迁移。

【大数据学习笔记-3】将阿里云上的mysql数据库实时自动化复制到华为云mysql数据库,分析行为数据

8、迁移完成,检查两边数据表test1内容一致。

【大数据学习笔记-3】将阿里云上的mysql数据库实时自动化复制到华为云mysql数据库,分析行为数据

9、在阿里云上新增数据表2,随机生成10个名字,模拟增量数据。几分钟后观察华为云的自动增加了表2,说明增量自动复制成功。

【大数据学习笔记-3】将阿里云上的mysql数据库实时自动化复制到华为云mysql数据库,分析行为数据

【结论】

  1. 增量复制需要通过阿里云源库的读写权限访问,华为云目标库需要使用root账户。
  2. 使用阿里云DTS服务进行复制。

【遗留问题】

  1. 阿里云只读实例是否支持增量复制,阿里官网资料貌似不支持,待测试。
  2. 目标数据库华为云用只读账户是否可以支持复制,待详细测试。