从零安装canal教程

学校的大作业要求用canal……所以接触了一下,记录之
首先给出canal的github地址 https://github.com/alibaba/canal

canal是什么

canal主要解析mysql的数据库增量日志binlog,然后根据binlog提供增量数据订阅和消费

canal的工作原理:

  1. canal 模拟 MySQL slave 的交互协议,伪装自己为 MySQL slave ,向 MySQL master 发送dump
    协议
  2. MySQL master 收到 dump 请求,开始推送 binary log 给 slave (即 canal )
  3. canal 解析 binary log 对象(原始为 byte 流)

从零安装canal

canal 特别设计了 client-server 模式,我的安装配置也是基于两台机器来的,一台做服务器和存储数据,另一台作为客户端,接受服务器传过来的增量信息,然后处理。

canal相关压缩包在https://github.com/alibaba/canal/releases下载

我的canal安装配置是:服务器centos7,安装mysql5.7+java8+canal.deployer-1.1.4

客户端个人PC windows10,安装maven+canal客户端(在https://github.com/alibaba/canal/releases下载source code.zip解压即可 )
从零安装canal教程

服务器canal环境安装:

服务器最开始我选择mysql8+jdk9,结果踩了两个坑,所以又换成了mysql5.7+jdk8,如果对版本没有特定要求的同学,就用我现在的配置吧hhh

由于是在DNS都没配好的服务器上安装的,所以都是使用源码tar包安装的,网络配置正常的服务器用yum可能会更快

mysql5.7源码tar包下载地址:https://downloads.mysql.com/archives/community/

选择版本5.7 os linux-generic 下载第二个(mysql-5.7.29-linux-glibc2.12-x86_64.tar.gz)

解压之后会有两个tar包,无视掉带test的那个,那是测试服务器的

mysql5.7源码tar包安装教程:https://blog.csdn.net/qq_40181063/article/details/90713153(虽然是8.0的,但是根据这个安装即可)

jdk8安装:这个网上找教程吧一大堆hhh

然后是canal的安装:

正式文档的quickstart:https://github.com/alibaba/canal/wiki/QuickStart

别人写的小白教程:https://blog.csdn.net/qq_32254003/article/details/76837638

客户端:

安装maven+部署source code

恬不知耻的推荐下我的安装maven的博客hhh:

windows上安装:https://blog.csdn.net/weixin_38857307/article/details/106404153

修改仓库地址和镜像:https://blog.csdn.net/weixin_38857307/article/details/106404486

部署source code:

不论用什么IDE,在import项目的时候记得带上maven框架!

然后看着它自己往仓库下载就行了,下载出错请参考上面换镜像

使用eclipse的同学也可以继续参考小白教程https://blog.csdn.net/qq_32254003/article/details/76837638

使用IDEA的同学请正确配置Maven

IDEA如果下载报错,清空仓库,修改镜像,在idea的右边边栏打开maven,点刷新按钮(reimport),然后等待下载即可
从零安装canal教程
最后参考quickstart或小白教程运行SimpleCanalClientTest.java,然后就成功检测到了数据库变化了hhhh
从零安装canal教程

为什么是mysql5.7+jdk8?

mysql8->mysql5.7:我根据quickstart开始canal之后,logs里面canal文件夹日志正常,但是example日志异常,会报数据库连接错误,小白没法解决,就换成了5.7
从零安装canal教程
图片有点模糊,但是错误就是caching_sha2_password Auth failed,mysql5.7和之前用户认证都是mysql_native_password,然后根据网上解决方法把数据库的canal用户换成了mysql_native_password认证之后还是不行,所以我就换数据库了hhh(其实我感觉大佬可以尝试解决一下)

jdk9->jdk8:运行canal,jdk版本不能过高,否则会报一个Unrecognized VM option 'UseCMSCompactAtFullCollection’的错误,这个错误是因为jdk9废弃了CMSCompactAtFullCollection,无法支持,所以我也换了jdk

其他问题:

maven下载的时候报项目"Dependency 'xxxx‘ not found"的错误:换镜像即可解决

客户端连接不上服务器:暂时关闭服务器防火墙或者给防火墙开放端口

如果之后还继续做的话就继续填坑hhh,不过官方文档还是蛮详细的,也是中文写的,非常适合进阶,我这里就给像我一样一点不懂的小白写的hh

再推一遍github地址https://github.com/alibaba/canal