MySql增量数据实时同步

 说明

  上篇整理了人大金仓增量数据实时同步的技术实现,本篇整理一下MySql增量数据实时同步的实现方案和使用问题汇总。

 

1、CDC技术简介

  上篇博文已经介绍了CDC技术的实现原理,这里对CDC技术进一步补充:

  CDC(Change Data Capture)变更数据捕获,是对源数据库的变更数据进行实时识别、抽取以及转化等操作,可以做到高效地监控变化数据。

  CDC的实现模式一般分为:

  (1)主动查询模式

  通常在源数据库表中,记录上次更新的时间戳或者版本号等信息,然后同步不断的查询和上次记录做对比,来判断数据是否变更。

  优点:实现简单,不涉及数据库底层特性;

  缺点:需对数据表改造,同步实时性不高,需频繁查询对比数据库,不能确保记录所有变更。

 

  (2)事件接收模式

  可以通过触发器(Trigger)或日志(如:Transaction log、Binary log、Write-ahead log)来实现。当源数据库表发生变动时,会通过表的触发器或者日志,将操作记录下来,然后通过订阅消费这些事件,对数据库变更记录进行重放。

  优点:实时性高,精确捕获;

  缺点:部署数据库事件接收组件和解码器,但是一般关系数据库提供了支持,有一定的学习和运维成本。

  下面来介绍一下MySql增量数据实时同步的实现:Canal

 

2、Canal简介

  Canal是阿里巴巴开发的 MySQL binlog 增量订阅&消费组件。Canal Server能够解析MySQL Binlog并订阅数据更改,Canal Client可以实现将更改广播到任何地方,提供了可靠的低延迟增量数据管道。更多信息: https://github.com/alibaba/canal

 

3、Canal Server安装配置

  (1)MySql开启binlog

  修改mysql的配置文件/mysql/config/mysql.cnf

#开启binlog
og-bin=mysql-bin 
#日志记录方式,设置为ROW模式
binlog-format=ROW 
#设置当前MySQL的server_id,不要和canal的slaveId 重复
server_id=1 

  (2)添加数据库用户

  输入命令连接到数据库

#进入mysql容器
docker exec -it mysql bash

#连接mysql数据库
mysql -uroot -p

  输入密码后,输入如下命令创建用户

-- 创建用户canal 密码默认为canal,修改成自己的密码
CREATE USER canal IDENTIFIED BY 'canal';  

--*.*表示:授权canal用户所有库
GRANT SELECT, REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'canal'@'%';

-- 重新加载权限
FLUSH PRIVILEGES;

  使用exit命令,退出容器。重启mysql

#重启mysql
docker restart mysql

  (3)安装canal

  执行如下命令,可拉取canal镜像进行安装

#拉取canal docker
docker pull canal/canal-server

#运行canal docker
docker run --name canal -d canal/canal-server

#复制docker文件映射
docker cp canal:/home/admin/canal-server/ /home/dockerdata/

#停止docker
docker stop canal

#删除docker
docker rm canal

  修改配置文件/home/dockerdata/can-server/conf/example/instance.properites,如下图所示:

  运行如下命令创建容器,挂载出配置文件路径

#运行canal docker
docker run --name canal -p 11111:11111 -d -v /home/dockerdata/canal-server/:/home/admin/canal-server/canal/canal-server

  至此,canal server部署完成。

 

4、Canal Client

   Canal提供了多语言的客户端源码案例,可根据需要进行下载,下载地址:https://github.com/alibaba/canal

 

 

5、使用问题汇总

   (1)当canal服务运行一段时间后关闭,Binlog日志清理掉了,导致canal服务重启后,无法解析日志

  解决方法:出现此类问题的原因是canal中记录的日志文件不存在了,可以删除掉/canal-server/conf/example/下的meta.dat文件和h2.mv.db文件,重启canal后恢复正常。针对未同步成功的数据,可选择进行全量同步后,再开启canal增量同步。

 

posted @ 2022-08-03 17:31  Hello牛顿  阅读(2369)  评论(0编辑  收藏  举报