GaussDB(DWS)DRS实时数据同步
GaussDB(DWS)DRS实时数据同步
1. 前言
-
适用版本:【Gauss 200以上】
新时代在移动互联网、电商、IoT等场景会产生大量实时数据,以往的离线批量计算时效性较差,业务人员无法根据自己的即时性需要获取几分钟之前甚至实时数据,为了快速获取实时或者准实时数据,数据发生后尽快的达到用户的手中,释放实时或者准实时数据价值,实时数仓的系统性构建需求也应运而生,本文以MYSQL库为例实时同步GaussDB(DWS)场景,分享使用华为云模式下DRS(数据复制服务)构建快速数据接入方案。
2. 背景介绍
我们知道传统的数仓系统会将业务数据集中进行存储后,以批量计算构建出各种不同的业务层报表基础数据,从而供上层应用进行查询和展示。这种业务典型的特点是构建T+1或者T + N的数据,通过定时任务每天拉取增量数据,然后创建各个业务相关的主题维度数据,对外提供T+1或者T+N的数据查询接口。新时代在移动互联网、电商、IoT等场景下会产生大量实时数据,以往的离线批量计算时效性较差,业务人员无法根据自己的即时性需要获取几分钟之前甚至实时数据,为了快速获取实时或者准实时数据,数据发生后尽快的达到用户的手中,释放实时或者准实时数据价值,实时数仓的系统性构建需求也应运而生,本文以MYSQL库为例实时同步GaussDB(DWS)场景,分享使用华为云模式下DRS(数据复制服务)构建快速数据接入方案,供有需求伙伴参考。
3. 原理介绍
MYSQL使用binlog日志进行数据库内容修改记录,DRS串行读取MYSQL的binlog日志进行解析,在处理完数据依赖后,并发进行数据入库DWS,针对MYSQL的binlog的三种模式日志简单说明如下:
日志模式 | 说明 | 优点 | 缺点 |
---|---|---|---|
Row level | 日志中会记录成每一行数据被修改的形式 | 日志中可以不记录执行的sql语句的上下文相关的信息,仅仅只需要记录那一条记录被修改的形式。 row level 的日志内容会非常清楚的记录下每一行数据修改的细节,而且不会出现某些特定情况下的存储过程或function及trigger的调用和触发无法被正确复制的问题 | 会产生大量的日志内容 |
Statement level | 每一条会修改数据的sql都会记录到master的bin-log中 | 解决了 row level 下的缺点,不需要记录每一行数据的变化,减少bin-log日志量,节约IO,提高性能 | MySQL数据库新功能的加入,修改数据的时候使用了某些特定的函数功能不能正确复制 |
Mixed | 前两种模式的结合。会根据执行的每一条具体的sql语句来区分对待记录的日志形式 |
DRS在解析binlog是要求MYSQL库将binlog的日志模式设置为Row level,由于实时同步对系统要求较高,这里list出实时同步场景对MYSQL库的要求表,这里大部分需求项已经自动化到DRS自动化检查任务里,可以大胆应用哈。
类型名称 | 使用限制(DRS自动检查) |
---|---|
数据库权限设置 | • 源数据库帐户需要具备如下权限:SELECT、SHOW VIEW、EVENT、LOCK TABLES、REPLICATION SLAVE、REPLICATION CLIENT。• 目标数据库帐号必须具有每张表的如下权限:INSERT、SELECT、UPDATE、DELETE、CONNECT、CREATE、REFERENCES。 |
同步对象约束 | • 支持表、索引、约束(主键、空、非空)的同步,不支持视图、外键、存储过程、触发器、函数、事件、虚拟列的同步。• 不支持的数据类型有:xml、geometry、point、lineString、polygon、geometrycollection、multipoint、multilinestring、multipolygon。• 不支持非MyISAM和非InnoDB表的同步。 |
源数据库要求 | • MySQL源数据库的binlog日志必须打开,且binlog日志格式必须为Row格式。• 在磁盘空间允许的情况下,建议源数据库binlog保存时间越长越好,建议为3天。• 源数据库expire_logs_days参数值为0,可能会导致同步失败。• 必须设置MySQL源数据库的server-id,server-id的取值范围在2-4294967296之间。• 源数据库中的库名不能包含:’.<>以及中文等其他非ASCII字符。• 源数据库中的表名、视图名不能包含:’<>以及中文等其他非ASCII字符。 |
目标数据库要求 | • 目标数据库实例的运行状态必须正常。• 目标数据库实例必须有足够的磁盘空间。• 目标数据库的时区设置必须与源数据库一致。 |
废话不多说,开始实操哈!
4. 前提条件
4.1 源端:
Mysql源端数据库,提供数据库连接IP、库、用户名和密码,需同步的表。示例:
以mysql5云上实例为例,IP为:192.168.0.33,端口:8000,
用户名:root,密码:xxxxxx
在源端数据库内新建原表test_t1,插入3条记录。
4.2 目标端:
DWS服务集群,提供数据库连接IP、库、用户名和密码,需同步的表。示例:
这里已DWS8.1.0云上实例为例,IP为:192.168.0.225,端口:8000,
用户名:dbadmin,密码:xxxxxx
5. DRS实时业务全量+增量同步
5.1 创建实时同步任务
我们通过DRS实时同步任务来进行MYSQL到DWS的实时同步功能实现,如下在实时同步管理中创建同步任务。
5.2 选择同步链路
建立DRS同步实例,选择region,给实时同步实例起名,选择好源MYSQL和目标库GaussDB(DWS)链路类型。
5.3 配置源端和目标端数据库IP、用户密码
配置源库和目标库的实例信息(用户名、密码),并测试连通性,由于链路内部会记录用户名和密码信息,点击同意后继续下一步。
5.4 选择需要同步的表
同步对象的设置,表级别同步,增量阶段冲突时覆盖,同步表结构和索引,限速和不限速等信息,针对我们新建的表test_t1需要选中,并同步到右边目标库中,这里DWS选中库realdb,同时制定schema名字为ry,用源表名,不做限速。
5.5 数据加工(可选)
数据表列的加工配置(可选,这里不做要求,直接下一步)
5.6 自动化预检查
预检查,进行同步任务预校验,校验是否可进行实时同步,如果有检查项不通过,需要根据检查结果提示信息,消除后重新校验,预检查必须通过才能满足进行下一步。
5.7 启动同步任务
DRS任务确认和启动,确认信息无误后可以稍后定时启动,也可以立即启动,我们选择立即启动,在弹出确认框勾选确认,立即启动。
5.8 观察任务状态
任务提交后,可以在实时同步管理页面,查看和管理刚才新建的同步任务,状态为“启动中”。
全量数据同步后,显示为“增量同步”,实时同步任务后续一直保持增量同步状态。
5.9 全量同步后观察数据实时同步情况
链接DWS目标库realdb,查看全量同步情况,schema、表结果和全量数据均以同步过来。
5.10 增量增删改后观察数据实时同步情况
在源数据库进行增删改,目标库实时同步到位。
源库:
目标库:
6. 总结
以上就是华为云数据复制服务(DRS)构建快速数据接入方案的介绍以及实操演示。
7. 参考文档
DWS菜鸟的私房菜の实时数据接入のDRS实时数据同步直通DWS: https://bbs.huaweicloud.cn/blogs/288337
- 点赞
- 收藏
- 关注作者
评论(0)