JAVA进阶之路-canal搭建

java整合Canal实现数据库监听(附完整的踩坑总结) 如下图所示:需要检查下地址的配置,确认能ping通如果可以ping通但是仍然无法连接,查看是否是虚拟机的防火墙是否打开,11111端口可能被拦截。 阅读详情

canal介绍

canal是阿里巴巴旗下的一款开源项目,纯Java开发。基于数据库增量日志解析,提供增量数据订阅&消费,目前主要支持了MySQL(也支持mariaDB)。简单来说就是用户监听数据库,只要数据库有增删改的操作canal都会监听到,届时我们就可以做我们对应的操作。

支持的业务

  1. 数据库镜像
  2. 数据库实时备份
  3. 多级索引 (卖家和买家各自分库索引)
  4. search build
  5. 业务cache刷新
  6. 价格变化等重要业务消息

运行原理

引用自网络
从上图可以看出一主从分库是如何做到数据同步的。而我们的canal基本与上面一致,基本就是将自己模拟成为一个从库,从而一直监听主库的数据变化然后写入外界(通过消息队列发送给外界、或者通过tcp连接canal获取增量数据)

搭建canal

简单的熟悉下canal后我们可以直接开始搭建canal,canal的搭建过程很简单,废话不多,说我们开始吧!

工具准备

  1. 数据库
  2. canal
  3. 一台linux服务器(本文暂时只介绍linux的安装方法)

数据库操作

canal监听最开始的前提就是读取binlog的数据来进行监控。一般数据库的binlog是默认关了的,所以需要我们打开来.
在my.cnf 加入如下:

     [mysqld]

     og-bin=mysql-bin #添加这一行就ok

     binlog-format=ROW #选择row模式

     server_id=1 #配置mysql replaction需要定义,不能和canal的slaveId重复

ps:binlog模式总共有三种

  1. Statement : 记录每一条修改数据的SQL语句(批量修改时,记录的不是单条SQL语句,而是批量修改的SQL语句事件)
  2. row:记录的方式是行,即如果批量修改数据,记录的不是批量修改的SQL语句事件,而是每条记录被更改的SQL语句,因此,ROW模式的binlog日志文件会变得很“重”。
  3. Mixed:实际上就是前两种模式的结合。在Mixed模式下,MySQL会根据执行的每一条具体的sql语句来区分对待记录的日志形式,也就是在Statement和Row之间选择一种。

以上三个模式的解释来自于https://blog.51cto.com/13691477/2150178该blog的大佬,如果想继续深入了解可以直接看下他的原帖.
改完以后咱们可以进入数据库输入show variables like "%bin%;这条sql查看咱们的binlog是否开启
引用自网络
开启完binlog以后咱们需要给从库(canal)一个管理员账户:

    CREATE USER canal IDENTIFIED BY 'canal'; 
    
    GRANT SELECT, REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'canal'@'%';

    -- GRANT ALL PRIVILEGES ON *.* TO 'canal'@'%' ;

    FLUSH PRIVILEGES;

进入数据库输入上面这些sql回车即刻。创建了一个canal 密码为canal的一个账户。到这里,数据库的操作就已经做完了,咱们就可以开始做canal的相关操作了。

canal操作

开始我们需要下载canal并解压下来。(我们这里使用的1.1.3的版本。如果想用其他版本你可以访问官网https://github.com/alibaba/canal/releases 下载自己需要的版本。)
进入canal官方的github下载地址为: https://github.com/alibaba/canal/releases/download/canal-1.1.3/canal.deployer-1.1.3.tar.gz
如果下载速度慢可以试试复制这个连接去迅雷下载 可能会比浏览器下载稍快些。
下载后我们需要解压

mkdir ./canal
tar -zxvf ./canal.deployer-1.1.3.tar.gz -C ./canal

因为压缩包里面压缩的不是一个整的文件夹 我们需要指定压缩到一个文件夹里面 要不然会很杂乱。
在这里插入图片描述
进入canal文件夹里面后会有这么几个文件
bin:执行文件
conf: 配置文件
lib:canal所使用的java包(因为canal本身就是java开发出来的,所以用到了一些jar包)
logs:canal产生的日志
接下来就直接该配置文件就行了。
修改 conf下面example的instance.properties文件

#################################################
## mysql serverId
canal.instance.mysql.slaveId=1
# position info
canal.instance.master.address=127.0.0.1:3306 #输入自己数据库的ip地址
canal.instance.master.journal.name=
canal.instance.master.position=
canal.instance.master.timestamp=


# table meta tsdb info
#canal.instance.tsdb.enable=false
#canal.instance.tsdb.dir=${canal.file.data.dir:../conf}/${canal.instance.destination:}
#canal.instance.tsdb.url=jdbc:h2:${canal.instance.tsdb.dir}/h2;CACHE_SIZE=1000;MODE=MYSQL;
#canal.instance.tsdb.url=jdbc:mysql://127.0.0.1:3306/canal_tsdb
#canal.instance.tsdb.dbUsername=canal
#canal.instance.tsdb.dbPassword=canal


#canal.instance.standby.address =   
#canal.instance.standby.journal.name =	
#canal.instance.standby.position =	
#canal.instance.standby.timestamp =	
# username/password
canal.instance.dbUsername=canal	#这里就输入我们上面新增的数据库用户就可以了
canal.instance.dbPassword=canal
canal.instance.defaultDatabaseName=   #去除test
canal.instance.connectionCharset=UTF-8
# table regex
canal.instance.filter.regex=.*\\..*
# table black regex
canal.instance.filter.black.regex=
#################################################

修改上面文件就可以直接进入bin目录执行启动文件

root@lvvyi:~/canal/bin ./startup.sh
cd to /root/canal/bin for workaround relative path
LOG CONFIGURATION : /root/canal/bin/../conf/logback.xml
canal conf : /root/canal/bin/../conf/canal.properties
CLASSPATH :/root/canal/bin/../conf:/root/canal/bin/../lib/zookeeper-3.4.5.jar:/r                                                                                                                                                             oot/canal/bin/../lib/zkclient-0.10.jar:/root/canal/bin/../lib/spring-tx-3.2.18.R                                                                                                                                                             ELEASE.jar:/root/canal/bin/../lib/spring-orm-3.2.18.RELEASE.jar:/root/canal/bin/                                                                                                                                                             ../lib/spring-jdbc-3.2.18.RELEASE.jar:/root/canal/bin/../lib/spring-expression-3                                                                                                                                                             .2.18.RELEASE.jar:/root/canal/bin/../lib/spring-core-3.2.18.RELEASE.jar:/root/ca                                                                                                                                                             nal/bin/../lib/spring-context-3.2.18.RELEASE.jar:/root/canal/bin/../lib/spring-b                                                                                                                                                             eans-3.2.18.RELEASE.jar:/root/canal/bin/../lib/spring-aop-3.2.18.RELEASE.jar:/ro                                                                                                                                                             ot/canal/bin/../lib/snappy-java-1.1.7.1.jar:/root/canal/bin/../lib/slf4j-api-1.7                                                                                                                                                             .12.jar:/root/canal/bin/../lib/simpleclient_pushgateway-0.4.0.jar:/root/canal/bi                                                                                                                                                             n/../lib/simpleclient_httpserver-0.4.0.jar:/root/canal/bin/../lib/simpleclient_h                                                                                                                                                             otspot-0.4.0.jar:/root/canal/bin/../lib/simpleclient_common-0.4.0.jar:/root/cana                                                                                                                                                             l/bin/../lib/simpleclient-0.4.0.jar:/root/canal/bin/../lib/scala-reflect-2.11.12                                                                                                                                                             .jar:/root/canal/bin/../lib/scala-logging_2.11-3.8.0.jar:/root/canal/bin/../lib/                                                                                                                                                             scala-library-2.11.12.jar:/root/canal/bin/../lib/rocketmq-remoting-4.3.0.jar:/ro                                                                                                                                                             ot/canal/bin/../lib/rocketmq-logging-4.3.0.jar:/root/canal/bin/../lib/rocketmq-c                                                                                                                                                             ommon-4.3.0.jar:/root/canal/bin/../lib/rocketmq-client-4.3.0.jar:/root/canal/bin                                                                                                                                                             /../lib/protobuf-java-3.6.1.jar:/root/canal/bin/../lib/oro-2.0.8.jar:/root/canal                                                                                                                                                             /bin/../lib/netty-tcnative-boringssl-static-1.1.33.Fork26.jar:/root/canal/bin/..                                                                                                                                                             /lib/netty-all-4.1.6.Final.jar:/root/canal/bin/../lib/netty-3.2.2.Final.jar:/roo                                                                                                                                                             t/canal/bin/../lib/mysql-connector-java-5.1.47.jar:/root/canal/bin/../lib/metric                                                                                                                                                             s-core-2.2.0.jar:/root/canal/bin/../lib/lz4-java-1.4.1.jar:/root/canal/bin/../li                                                                                                                                                             b/logback-core-1.1.3.jar:/root/canal/bin/../lib/logback-classic-1.1.3.jar:/root/                                                                                                                                                             canal/bin/../lib/kafka-clients-1.1.1.jar:/root/canal/bin/../lib/kafka_2.11-1.1.1                                                                                                                                                             .jar:/root/canal/bin/../lib/jsr305-3.0.2.jar:/root/canal/bin/../lib/jopt-simple-                                                                                                                                                             5.0.4.jar:/root/canal/bin/../lib/jctools-core-2.1.2.jar:/root/canal/bin/../lib/j                                                                                                                                                             cl-over-slf4j-1.7.12.jar:/root/canal/bin/../lib/jackson-databind-2.9.6.jar:/root                                                                                                                                                             /canal/bin/../lib/jackson-core-2.9.6.jar:/root/canal/bin/../lib/jackson-annotati                                                                                                                                                             ons-2.9.0.jar:/root/canal/bin/../lib/ibatis-sqlmap-2.3.4.726.jar:/root/canal/bin                                                                                                                                                             /../lib/httpcore-4.4.3.jar:/root/canal/bin/../lib/httpclient-4.5.1.jar:/root/can                                                                                                                                                             al/bin/../lib/h2-1.4.196.jar:/root/canal/bin/../lib/guava-18.0.jar:/root/canal/b                                                                                                                                                             in/../lib/fastsql-2.0.0_preview_855.jar:/root/canal/bin/../lib/fastjson-1.2.28.j                                                                                                                                                             ar:/root/canal/bin/../lib/druid-1.1.9.jar:/root/canal/bin/../lib/disruptor-3.4.2                                                                                                                                                             .jar:/root/canal/bin/../lib/commons-logging-1.1.3.jar:/root/canal/bin/../lib/com                                                                                                                                                             mons-lang3-3.4.jar:/root/canal/bin/../lib/commons-lang-2.6.jar:/root/canal/bin/.                                                                                                                                                             ./lib/commons-io-2.4.jar:/root/canal/bin/../lib/commons-compress-1.9.jar:/root/c                                                                                                                                                             anal/bin/../lib/commons-codec-1.9.jar:/root/canal/bin/../lib/commons-beanutils-1                                                                                                                                                             .8.2.jar:/root/canal/bin/../lib/canal.store-1.1.3.jar:/root/canal/bin/../lib/can                                                                                                                                                             al.sink-1.1.3.jar:/root/canal/bin/../lib/canal.server-1.1.3.jar:/root/canal/bin/                                                                                                                                                             ../lib/canal.protocol-1.1.3.jar:/root/canal/bin/../lib/canal.prometheus-1.1.3.ja                                                                                                                                                             r:/root/canal/bin/../lib/canal.parse.driver-1.1.3.jar:/root/canal/bin/../lib/can                                                                                                                                                             al.parse.dbsync-1.1.3.jar:/root/canal/bin/../lib/canal.parse-1.1.3.jar:/root/can                                                                                                                                                             al/bin/../lib/canal.meta-1.1.3.jar:/root/canal/bin/../lib/canal.instance.spring-                                                                                                                                                             1.1.3.jar:/root/canal/bin/../lib/canal.instance.manager-1.1.3.jar:/root/canal/bi                                                                                                                                                             n/../lib/canal.instance.core-1.1.3.jar:/root/canal/bin/../lib/canal.filter-1.1.3                                                                                                                                                             .jar:/root/canal/bin/../lib/canal.deployer-1.1.3.jar:/root/canal/bin/../lib/cana                                                                                                                                                             l.common-1.1.3.jar:/root/canal/bin/../lib/aviator-2.2.1.jar:/root/canal/bin/../l                                                                                                                                                             ib/aopalliance-1.0.jar:/root/canal/bin/../lib/aliware-apache-rocketmq-cloud-1.0.                                                                                                                                                             jar:
cd to /root/canal/bin for continue
root@lvvyi:~/canal/bin

然后去log里面查看下启动日志;

root@lvvyi:~/canal# ls
bin  conf  lib  logs
root@lvvyi:~/canal# cd logs/
root@lvvyi:~/canal/logs# ls
canal  canalQueue  example  metrics
root@lvvyi:~/canal/logs# cd canal
root@lvvyi:~/canal/logs/canal# ls
2020-08-17  2020-08-18  2020-08-19  2020-08-20  2020-08-24  2020-08-25  2020-08-26  2020-08-27  begin  canal.log  init
root@lvvyi:~/canal/logs/canal# tail -f canal.log
        at com.alibaba.fastsql.sql.parser.SQLStatementParser.parseStatementList(SQLStatementParser.java:228) ~[fastsql-2.0.0_preview_855.jar:2.0.0_preview_855]
        at com.alibaba.fastsql.sql.SQLUtils.parseStatements(SQLUtils.java:536) ~[fastsql-2.0.0_preview_855.jar:2.0.0_preview_855]
        at com.alibaba.fastsql.sql.repository.SchemaRepository.console(SchemaRepository.java:439) ~[fastsql-2.0.0_preview_855.jar:2.0.0_preview_855]
        at com.alibaba.otter.canal.parse.inbound.mysql.tsdb.MemoryTableMeta.apply(MemoryTableMeta.java:81) ~[canal.parse-1.1.3.jar:na]
        at com.alibaba.otter.canal.parse.inbound.mysql.tsdb.DatabaseTableMeta.applyHistoryOnMemory(DatabaseTableMeta.java:463) [canal.parse-1.1.3.jar:na]
        at com.alibaba.otter.canal.parse.inbound.mysql.tsdb.DatabaseTableMeta.rollback(DatabaseTableMeta.java:174) [canal.parse-1.1.3.jar:na]
        at com.alibaba.otter.canal.parse.inbound.mysql.AbstractMysqlEventParser.processTableMeta(AbstractMysqlEventParser.java:106) [canal.parse-1.1.3.jar:na]
        at com.alibaba.otter.canal.parse.inbound.AbstractEventParser$3.run(AbstractEventParser.java:192) [canal.parse-1.1.3.jar:na]
        at java.lang.Thread.run(Thread.java:748) [na:1.8.0_261]
2020-08-31 16:14:29.624 [destination = example , address = /127.0.0.1:3306 , EventParser] WARN  c.a.o.c.p.inbound.mysql.rds.RdsBinlogEventParserProxy - ---> find start position successfully, EntryPosition[included=false,journalName=mysql-bin.000113,position=58895318,serverId=123,gtid=,timestamp=1598861649000] cost : 651ms , the next step is binlog dump
the next step is binlog dump

出现上面这句话就说明是一家启动成功了 我这边是因为数据库有些问题上面才会报些waring,但是并不影响使用。

结束

以上就是canal的搭建方式 非常简单,但是也有很多的坑,如果你在搭建中遇到了些什么问题,欢迎在本文章下面留言,可以一起探讨下!

java使用阿里巴巴cancal直接同步mysql表到redis,包含增删改查 mysql表下的数据可以直接通过阿里的cancal同步至redis 阅读详情

相关推荐

超详细的Canal入门,看这篇就够了!

Canal入门看这篇就够了!

yehongzhi1994的博客 22万+

Canal Java 入门与使用

​ 在如今时代数据是最关键的,大的数据量势必会影响用户体验,在我的日常开发中遇到了一个类似的问题,由于数据库中数据量过于庞大造成查询效率低,决定采用redis来存取最新的数据,由于系统为其它语言编写本人并不擅长,便采取canal来通过增量的方式更新数据。下面让我们了解一下canal。以上介绍来自于官网介绍。我们可以简单把canal理解为一个同步增量数据的工具。上图为官方给出的示意图,可以看到canal把自己伪装成一个mysql的slave,架起了MySQL与其他软件之间的桥梁。canal的工作原理就是把自

a56546的博客 4786

Windows 搭建 Canal admin 和 Canal Server

windows 搭建 Canal admin UI 和Canal Server 实战

Julie的博客 2081

Java开发 - Canal的基本用法

译意为水道/管道/沟渠,主要用途是基于 MySQL 数据库增量日志解析,提供增量数据订阅和消费。下面这张图可以代表Canal的用途,就染我们来一起瞻仰一下:基于日志增量订阅和消费的业务包括数据库镜像数据库实时备份索引构建和实时维护(拆分异构索引、倒排索引等)业务 cache 刷新带业务逻辑的增量数据处理当前的 canal 支持源端 MySQL 版本包括 5.1.x , 5.5.x , 5.6.x , 5.7.x , 8.0.x。

CodingFire的博客 5917

docker搭建canal-server和canal-admin

上面两步完成后,使用java的canal客户端进行连接,可以看到定时获取binlog的日志打印,如果监控的库有更新插入,则会有相应的日志打印出来,要注意的问题是,使用了admin客户端和server连接后,我们的java客户端在连接的时候不能使用之前用的明文的密码canal进行连接,需要使用密文。再次启动java的canal-client,可以看到连接成功,正在定时获取binlog,如果监听的库有表的插入或更新,客户端就会打印出来。确实有,在mysql里面看看日志,到这里mysql就配置好了!...

weixin_40715787的博客 5786

canal快速搭建(我已为你近乎避掉所有坑)

按照我的步骤来: 首先我们不使用Linux自带的Mysql5.1,需要自己去安装5.7版本(要先卸载5.1),这个版本不需要自己去设置UTF-8了自带(所以不会出现乱码问题)!但5.7版本的密码设置需要自己去谷歌修改方法以及怎样设置简单的密码。 我选择的是canal.deployer-1.1.1.tar.gz(之前的版本配置文件似乎有的地方不一样) jdk1.8 centOS6.9 1.开启mys...

wxy’的博客 1万+

JAVA进阶之路-canal搭建2(配置一台canal监控不同服务器的数据库)

JAVA进阶之路-canal搭建2(配置一台canal监控不同服务器的数据库) 前言 因为公司有不同的环境,例如开发环境,测试环境等等,这时候我们canal就需要监控不同服务器的数据库,所以就有了需求。下面我们开始配置吧! 修改canal.properties文件 canal.destinations = example 就是conf文件下面的canal.properties 文件里面的的上面这个参数.这个参数代表支持多个配置文件,默认是有个examper所以才会有上面我们的examper文件夹你多加一个

阿猪的博客 889

canal本地搭建以及运行

canal可实现基于binlog日志进行增量数据同步

程序媛-jjl的博客 1817

Java开发 - Canal进阶之和Redis的数据同步

本篇是对单节点的应用,但从中我们也能推断出一些关于集群的应用,不过大多数公司能搞个主从就已经是不错了,所以你能学会这个已经算是很有用了,关于ES,博主前面也讲过一些基础应用,创建一个工具类利用ES的数据模型进行存储就可以达到一个canal同时对Redis和ES的同步,如果担心出问题,可以把Canal搞成集群的形式,这个后续有时间博主再给大家做讲解。今天就到这里了,觉得不错就支持一下吧。

CodingFire的博客 4805

canal实战(二)|canal java客户端

## 本文章改编于阿里开源工具Canal,原版网址https://github.com/alibaba/canal 在前面canal搭建并启动后(传送站),我们就可以开始进行第二步canal java客户端 建立maven工程,maven工程创建如有不会的童鞋可参考传送站 pom.xml依赖添加 <dependency> <groupId>com.alibaba.otter</groupId> <artifactId>canal....

神芷迦蓝寺 2590

Java中的详细Canal入门指南

它基于MySQL的日志解析,能够实时捕获数据库的数据变更,并将变更事件发送到消息队列或其他存储介质中。最后,我们提供了一个使用Canal客户端API进行数据同步的示例代码。本文将带您深入了解Canal的基本概念和使用方法,并提供相应的Java示例代码。首先,您需要使用Canal的客户端API连接到Canal服务器,并订阅感兴趣的数据库和表。在上述示例代码中,我们创建了一个Canal连接器,并使用连接器订阅了所有的数据库和表。此外,您还可以配置消息队列的类型和地址,以及其他可选的参数。

TechWhizZ的博客 419

mysql进阶:通过canal-admin来管理canal集群

canal-admin的设计初衷就是为了canal提供整体的配置管理、节点运维等功能。针对多节点的情况,不需要相同的配置每个节点都要操作一遍。为运维人员节约时间。集群:也就是一组canal服务端deployer,也称为Server,同一集群的Server的配置文件可以在admin中统一集中管理。也就是说admin是面向多集群的管理。

55555的博客 2451

springboot整合canal

springboot整合canal

congge 1万+

Canal学习(1)Canal环境搭建以及多数据库配置和Java代码整合Canal

Canal环境搭建以及多数据库配置和Java代码整合Canal 1、Canal基本了解 Canal是阿里巴巴出的一个基于binlog增量订阅的一个组件。主要是做mysql数据库增量或全量同步的。 1、github地址 https://github.com/alibaba/canal 2、官方的快速使用 https://github.com/alibaba/canal/wiki/QuickStar...

Leeue李月 3868

搭建本地Canal中间件进行数据迁移 —— 从缓存击穿得到的启发

文章目录先从缓存击穿说起MySQL数据同步Canal工作原理搭建本地Canal中间件进行数据迁移 先从缓存击穿说起 所谓缓存击穿,就是热点数据在缓存中没有数据,大量用户请求直接打在数据库上,这是一种非常危险的情况,我们应该在开发过程中避免此过程的发生。 目前我们经常使用的解决方案一共有3种: 缓存过期策略方案: 使用读写分离架构,读取永远从缓存里读,DB和缓存之间的同步使用Canal 热点缓存策略: 甄别出热点数据后,将针对热点数据的请求打到特别的一个区域 互斥锁: 在数据快要到期之前,给key

如切如磋,如琢如磨 3989

支持mysql5.6.19的canal版本

解决现在开源版本canal使用mysql5.6.19版本以上bug,mysql连接不断开的bug

彻底理解Canal,看这篇就够了

思维导图 前言 我们都知道一个系统最重要的是数据,数据是保存在数据库里。但是很多时候不单止要保存在数据库中,还要同步保存到Elastic Search、HBase、Redis等等。 这时我注意到阿里开源的框架Canal,他可以很方便地同步数据库的增量数据到其他的存储应用。所以在这里总结一下,分享给各位读者参考~ 一、什么是canal 我们先看官网的介绍 canal,译意为水道/管道/沟渠,主要用途是基于 MySQL 数据库增量日志解析,提供增量数据订阅和消费。 这句介绍有几个关键字..

专注自动化、性能测试、测试架构学习交流 3万+

canal1.1.4版本的所有安装包资源

阿里巴巴的canal的1.1.4版本的安装包。里面包含了canal.admin-1.1.4.tar.gz、canal.deployer-1.1.4.tar.gz、canal.example-1.1.4.tar.gz、canal-canal-1.1.4.tar.gz、canal-canal-1.1.4.zip

上一篇: JAVA进阶之路-nginx设置密码
下一篇: JAVA进阶之路-canal搭建2(配置一台canal监控不同服务器的数据库)
丘下两点vvv
博客等级 码龄9年 3粉丝 12原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值