开发者学堂课程【微服务+全栈在线教育实战项目演练(SpringCloud Alibaba+SpringBoot):Canal 数据同步(应用场景)】学习笔记,与课程紧密连接,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/667/detail/11515
Canal 数据同步(应用场景)
目录:
一、canal 数据同步工具
二、Canal 介绍
一、canal 数据同步工具
把远程库里面内容同步到本地库里面
1、应用场景
分库
比如,现在两个模块,第一个模块叫 edu-sta。比如第二模块叫 edu-ucenter,就是用户模块。
按照实际的操作中,经常会做一件事情分库的。分库的解释,比如现在在 edu-sta这是一个统计模块,那现在就可以把统计模块数据存到一个数据库,假如说统计模块,它的数据库就是这个叫 edu-sta 数据库,然后里边有数据库表,然后现在也是有一个数据库,它的数据库叫 edu-ucenter,做一个分库的处理,之前为了方便把所有表放到都放入一个库中,现在是每个模块专门建一个数据库,比如现在建一个模块叫 edu-sta,这数据库中专门存统计模块,又建一个数据库叫 edu-ucenter这数据库中专门存用户信息,现在有两个数据,在 ucenter 得到数据 STA 通过远程调用。
有两个数据库,通过 edu-sta 这个库中调用 edu-ucenter 数据库内容。
它的缺点,因为要调共同库里面,比如说实际项目中,项目比较大时,自身开发的sta数据库,另一家公司开发的 edu-ucenter 数据库,公司有自己数据库,那这个时候因为公司肯定不可能去,直接访问另一家数据库,所以必须要用远程调用才可以,这是一个场景,而这个过程是一个要让偶合度很高,第二个要调远程库,它的效率也并不是很高。
解决方法是使用数据同步工具,举个例子,现在在 edu-ucenter 里面还有一张表,这个表比如叫 users,可以把这个表同步到中 edu-sta,就是同步 user 表,在 edu-sta 中可以创建一张跟这数据库中相同一样的表的结构,此时两边的数据可同步变化,比如一表中添加一条数据这边也会同步加入数据,这个数据进行了修改,另一边也会修改。
也就是说远程库中的发生变化,本地库会跟着变化。那再操作可以直接操作本库,而就不需要再做远程调用过程。
canal 是阿里巴巴旗下的一款开源项目,纯 Java 开发,目前支持 mySQL 数据库。
举个例子,访问移动的数据库,想得到里面数据那怎么做呢?可以把移动数库中一些核心部分通过到本地库中,当它发生变化,那本地库也会跟着发生变化。这过程就叫数据同步,把远程同步到本地库中。这也称为数据同步。
其实这个过程,更具体点,它是大数据中这种实验过程,但是在java中这个过程也会经常用到。
canal 是阿里巴巴项目,它是用 JAVA 开发的,可以做到数据同步,目前只支持mysql 还不支持别的数据库。
二、Canal介绍
1、应用场景
在前面的统计分析功能中,我们采取了服务调用获取统计数据,这样耦合度高,效率相对较低,目前我采职另一种实现方式,通过实时同步数据库表的方式实现,例如我们要统计每天注册与登录人数,我们只需把会员表同步到统计库中,实现本地统计就可以了,这样效率更高,耦合度更低,Canal 就是一个很好的数据库同步工具。
canal 是阿里巴巴旗下的款开源项目,纯 Java 开发。 基于数据库增量日志解析,提供增量数据订阅&消费,目前主要支持了 MySQL。
2、Canal 环境搭建
canal 的原理是基于 mysql binlog 技术,所以这里-定需要开启 mysql 的 binlog 写入功能开启 mysqI 服务: service mysql start ( 或者 systemctl start mysqld.service )
(1 )检查 binlog 功能是否有开启
代码如下:
mysql> shaw varlables like 'log_bin';
+---------------+-------+
| Variable _name | Value|
+---------------+-------+
| log_bin | OFF |
+--------------+-------+