DWS菜鸟的私房菜の实时数据接入のDRS实时数据同步直通DWS
目 录
1 背景介绍
我们知道传统的数仓系统会将业务数据集中进行存储后,以批量计算构建出各种不同的业务层报表基础数据 , 从而供上层应用进行查询和展示 。 这种业务典型的特点是构建T+1 或者T + N 的 数据,通过定时任务每天拉取增量数据,然后创建各个业务相关的主题维度数据,对外提供T+1 或者T+N 的数据查询接口。新时代在移动互联网、电商 、 IoT等场景下会产生大量实时数据,以往的离线批量计算 时效性 较差,业务人员无法根据自己的即时性需要获取几分钟之前 甚至 实时数据 , 为了快速获取实时或者准实时数据 , 数据发生后 尽快的达到用户的手中, 释放实时或者准实时数据价值 ,实时数仓的系统性构建需求也应运而生 , 本文 以 MYSQL库为例实时同步GaussDB(DWS) 场景 , 分享 使用 华为云模式下 DRS (数据复制服务) 构建快速数据接入方案 , 供有需求伙伴参考 。
2 原理介绍
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字符。 |
目标数据库要求 |
• 目标数据库实例的运行状态必须正常。 • 目标数据库实例必须有足够的磁盘空间。 • 目标数据库的时区设置必须与源数据库一致。 |
废话不多说,开始实操哈!
3 前提条件
3.1 源端 :
Mysql源端数据库,提供数据库连接IP、库、用户名和密码, 需 同步的表。 示例 :
以mysql 5云上实例为例 , IP为 : 192.168.0.33 , 端口 :8 000 ,
用户名 : root , 密码 : xxxxxx
在源端数据库内新建原表test_t1 , 插入 3条记录。
3.2 目标端 :
DWS服务集群,提供数据库连接IP、库、用户名和密码, 需同步的表 。 示例 :
这里已DWS 8.1.0云上实例为例 , IP为 :192.168.0.225, 端口 :8000 ,
用户名 :dbadmin, 密码 : xxxxxx
4 DRS 实时业务全量 + 增量 同步
4.1 创建实时同步任务
我们通过DRS实时同步任务来进行MYSQL到DWS的实时同步功能实现 , 如下在实时同步管理 中创建同步任务 。
4.2 选择同步链路
建立 DRS 同步实例 , 选择region,给实时同步实例起名, 选择好源 MYSQL 和目标库 GaussDB( DWS) 链路类型。
4.3 配置源端和目标端数据库 IP 、 用户密码
配置 源库 和目标库的实例信息 (用户名、密码) ,并测试连通性 ,由于链路内部会记录用户名和密码信息,点击同意后继续下一步。
4.4 选择需要同步的表
同步 对象的 设置 , 表级别同步 , 增量阶段冲突时覆盖 ,同步表结构和索引, 限速和 不限速等信息 ,针对我们新建的表test_t1需要选中,并同步到右边目标库中,这里DWS选中库realdb,同时制定schema名字为ry,用源表名 ,不做限速 。
4.5 数据加工 (可选)
数据表列的加工配置 (可选 ,这里不做要求,直接下一步 )
4.6 自动化预检查
预检查 , 进行同步任务预校验,校验是否可进行实时同步 , 如果有检查项不通过 , 需要根据检查结果提示信息 , 消除后重新校验 , 预检查必须通过才能满足 进行下一步 。
4.7 启动同步任务
DRS任务确认和启动 ,确认信息无误后可以 稍后 定时启动,也可以立即启动 ,我们选择立即启动 ,在弹出确认框勾选确认,立即启动 。
4.8 观察任务状态
任务提交后,可以在实时同步管理页面,查看和管理刚才新建的同步任务 ,状态为 “ 启动中 ” 。
全量数据同步后 , 显示为 “增量同步”,实时同步任务后续一直保持增量同步状态。
4.9 全量同步后观察数据 实时 同步情况
链接DWS目标库realdb,查看全量同步情况,schema、表结果和全量数据均以同步过来。
4.10 增量增删改后观察数据 实时 同步情况
在源数据库进行 增删改 ,目标库实时同步到位。
源库:
目标库 :
完 !
- 点赞
- 收藏
- 关注作者
评论(0)