广告
返回顶部
首页 > 资讯 > 数据库 >Canal监听MySQL的实现步骤
  • 680
分享到

Canal监听MySQL的实现步骤

Canal监听MySQLCanal MySQL监听 2022-08-11 16:08:12 680人浏览 安东尼
摘要

目录1、Mysql数据库开启binlog模式2、Docker下Canal容器安装3、Canal Client项目搭建1、mysql数据库开启binlog模式 注意:Mysql容器,此处Mysql版本为5.7 #进入容器

1、mysql数据库开启binlog模式

注意:Mysql容器,此处Mysql版本为5.7

#进入容器
docker exec -it mysql /bin/bash
#进入配置目录
cd /etc/mysql/mysql.conf.d
#修改配置文件
vi mysqld.cnf

(1) 修改mysqld.cnf配置文件,添加如下配置:

Canal监听MySQL的实现步骤

log-bin=mysql-bin
server-id=12345

(2) 创建账号 用于测试使用,使用root账号创建用户并授予权限

create user canal@'%' IDENTIFIED by 'canal';

GRANT SELECT, REPLICATioN SLAVE, REPLICATION CLIENT,SUPER ON *.* TO 'canal'@'%';

FLUSH PRIVILEGES;

(3) 重启mysql容器

docker restart mysql

2、Docker下Canal容器安装

(1)拉取canal镜像

docker pull docker.io/canal/canal-server

(2)创建Canal容器

docker run -p 11111:11111 --name canal -d docker.io/canal/canal-server

(3)进入容器,修改核心配置canal.properties 和instance.properties,canal.properties 是canal自身的配置,instance.properties是需要同步数据的数据库连接配置。

#进入容器
docker exec -it canal /bin/bash
cd canal-server/conf/
#修改 canal.properties
vi canal.properties
cd example/
#修改 instance.properties
vi instance.properties

修改canal.properties的id,不能和mysql的server-id重复,如下图:

Canal监听MySQL的实现步骤

修改instance.properties,配置数据库连接地址:

Canal监听MySQL的实现步骤

Canal监听MySQL的实现步骤

这里的canal.instance.filter.regex有多种配置,如下:

可以参考地址如下: https://GitHub.com/alibaba/canal/wiki/AdminGuide

mysql 数据解析关注的表,perl正则表达式.

多个正则之间以逗号(,)分隔,转义符需要双斜杠(\\) 

常见例子:

1.  所有表:.*   or  .*\\..*
2.  canal schema下所有表: canal\\..*
3.  canal下的以canal打头的表:canal\\.canal.*
4.  canal schema下的一张表:canal.test1
5.  多个规则组合使用:canal\\..*,mysql.test1,mysql.test2 (逗号分隔)
注意:此过滤条件只针对row模式的数据有效(ps. mixed/statement因为不解析sql,所以无法准确提取tableName进行过滤)

配置完成后,设置开机启动,并记得重启canal。

docker update --restart=always canal
docker restart canal

3、Canal Client项目搭建

(1)引入依赖

   <parent>
        <artifactId>spring-boot-parent</artifactId>
        <groupId>org.springframework.boot</groupId>
        <version>2.1.4.RELEASE</version>
    </parent>

    <dependencies>
  	<!--canal依赖-->
        <dependency>
            <groupId>com.xpand</groupId>
            <artifactId>starter-canal</artifactId>
            <version>0.0.1-SNAPSHOT</version>
        </dependency>
    </dependencies>

注意:canal依赖stater在中央仓库是不存在的,需要手动放进本地仓库或者你公司里面的nexus

这里以放进本地仓库为例:

Canal监听MySQL的实现步骤

  • 首先解压spring-boot-starter-canal-master.zip
  • 在spring-boot-starter-canal-master\starter-canal文件夹下执行mvn clean install
  • 此时在本地仓库就会存在jar
  • 引入依赖
 	<!--canal依赖-->
        <dependency>
            <groupId>com.xpand</groupId>
            <artifactId>starter-canal</artifactId>
            <version>0.0.1-SNAPSHOT</version>
        </dependency>

(2)启动类编写

@SpringBootApplication
@EnableCanalClient
public class CanalApplication {
    public static void main(String[] args) {
        SpringApplication.run(CanalApplication.class,args);
    }
}

(3)监听器编写

@CanalEventListener
public class CanalDataEventListener {

    
    @InsertListenPoint
    public void onEventInsert(CanalEntry.EventType eventType, CanalEntry.RowData rowData) {
        rowData.getAfterColumnsList().forEach((c) -> System.out.println("By--Annotation: " + c.getName() + " ::   " + c.getValue()));
    }

    
    @UpdateListenPoint
    public void onEventUpdate(CanalEntry.RowData rowData) {
        System.out.println("UpdateListenPoint");
        rowData.getAfterColumnsList().forEach((c) -> System.out.println("By--Annotation: " + c.getName() + " ::   " + c.getValue()));
    }

    
    @DeleteListenPoint
    public void onEventDelete(CanalEntry.EventType eventType) {
        System.out.println("DeleteListenPoint");
    }

    
    @ListenPoint(destination = "example", schema = "torlesse_test", table = {"tb_user", "tb_order"}, eventType = CanalEntry.EventType.UPDATE)
    public void onEventCustomUpdate(CanalEntry.EventType eventType, CanalEntry.RowData rowData) {
        System.err.println("DeleteListenPoint");
        rowData.getAfterColumnsList().forEach((c) -> System.out.println("By--Annotation: " + c.getName() + " ::   " + c.getValue()));
    }


    @ListenPoint(destination = "example",
            schema = "test_canal", //所要监听的数据库名
            table = {"tb_user"}, //所要监听的数据库表名
            eventType = {CanalEntry.EventType.UPDATE, CanalEntry.EventType.INSERT, CanalEntry.EventType.DELETE})
    public void onEventCustomUpdateForTbUser(CanalEntry.EventType eventType, CanalEntry.RowData rowData){
        getChangeValue(eventType,rowData);
    }

    public static void getChangeValue(CanalEntry.EventType eventType, CanalEntry.RowData rowData){
        if(eventType == CanalEntry.EventType.DELETE){
            rowData.getBeforeColumnsList().forEach(column -> {
                //获取删除前的数据
                System.out.println(column.getName() + " == " + column.getValue());
            });
        }else {
            rowData.getBeforeColumnsList().forEach(column -> {
                //打印改变前的字段名和值
                System.out.println(column.getName() + " == " + column.getValue());
            });

            rowData.getAfterColumnsList().forEach(column -> {
                //打印改变后的字段名和值
                System.out.println(column.getName() + " == " + column.getValue());
            });
        }
    }
}

到此就可以实现Canal监听Mysql

项目gitee地址:test-canal

详情可以查看:

Https://github.com/alibaba/canal (阿里官方)

https://github.com/alibaba/canal/wiki/AdminGuide (阿里官方)

https://github.com/chenqian56131/spring-boot-starter-canal (自制starter)

到此这篇关于Canal监听MySQL的实现步骤的文章就介绍到这了,更多相关Canal监听MySQL内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

您可能感兴趣的文档:

--结束END--

本文标题: Canal监听MySQL的实现步骤

本文链接: https://www.lsjlt.com/news/33655.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Canal监听MySQL的实现步骤
    目录1、mysql数据库开启binlog模式2、docker下Canal容器安装3、Canal Client项目搭建1、Mysql数据库开启binlog模式 注意:Mysql容器,此处Mysql版本为5.7 #进入容器 ...
    99+
    2022-08-11
    Canal监听MySQL Canal MySQL监听
  • Mysql数据库如何监听binlog的开启步骤
    这篇文章主要介绍Mysql数据库如何监听binlog的开启步骤,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!前言我们经常需要根据用户对自己数据的一些操作来做一些事情.比如如果用户删除...
    99+
    2022-10-18
  • Canal+Kafka实现Mysql数据同步
    Canal介绍 canal [kə'næl],译意为水道/管道/沟渠,主要用途是基于 MySQL 数据库增量日志解析,提供增量数据订阅和消费 canal可以用来监控数据库数据的变化,从而获得新增数据,或者修改的数据。 canal是应阿里巴巴...
    99+
    2023-09-05
    kafka mysql 分布式
  • canal如何实现mysql的数据同步
    这篇文章将为大家详细讲解有关canal如何实现mysql的数据同步,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。canal是什么?canal [kə'næl],译...
    99+
    2022-10-18
  • 如何实现Spring事件发布监听、顺序监听和异步监听
    这篇文章给大家分享的是有关如何实现Spring事件发布监听、顺序监听和异步监听的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。1. Spring的事件通知Spring的事件通知本质上就是发布-订阅,即生产者-消费者...
    99+
    2023-06-22
  • Flume监听oracle表增量的步骤详解
    需求:获取oracle表增量信息,发送至udp514端口,支持ip配置 步骤: (1)需要的jar  oracle的 odbc5.jar(oracle安装目录  /jdbc/lib下查找...
    99+
    2022-10-18
  • springBoot + mybatis-plus 实现监听 mysql的数据增删改的监听
    在Spring Boot + MyBatis-Plus中实现MySQL数据增删改的监听,可以通过以下步骤: 添加MyBatis-Plus依赖,在pom.xml文件中添加以下依赖:       com.baomidou    mybati...
    99+
    2023-09-13
    mybatis spring boot mysql
  • redis监听key过期事件的详细步骤
    目录1、配置Redis.conf文件2、 配置一个key过期事件的监听器3、订阅key过期事件4、发起订阅1、配置redis.conf文件 配置文件默认是#注释了的,改为notify-keyspace-even...
    99+
    2022-08-10
    redis监听key过期事件 redis监听key
  • zabbix下载percona插件实现监控MySQL步骤
    本篇文章给大家主要讲的是关于zabbix下载percona插件实现监控MySQL步骤的内容,感兴趣的话就一起来看看这篇文章吧,相信看完zabbix下载percona插件实现监控MySQL步骤对大家多少有点参...
    99+
    2022-10-18
  • MySQL高性能实现Canal数据同步神器
    目录简介配置mysqlCentos7 安装 canalJava客户端简介 Canal是阿里巴巴基于Java开源的数据同步工具。平时业务场景使用比较多的如下: 同步数据到ES、Redis缓存中。 数据同步。 业务需要监听数...
    99+
    2022-08-11
    MySQLCanal数据同步 MySQLCanal
  • 搭建Lepus监控MySQL的步骤
    这篇文章主要讲解了“搭建Lepus监控MySQL的步骤”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“搭建Lepus监控MySQL的步骤”吧!Part1:Le...
    99+
    2022-10-18
  • Oracle之 11gR2 RAC 修改监听器端口号的步骤
    Oracle 11gR2 RAC 修改监听器端口号的步骤 说明: 192.168.188.181 为public ip1 192.168.188.182 为public ip2 192.168.1...
    99+
    2022-10-18
  • 基于Canal实现MySQL 8.0 数据库数据同步
    前言 服务器说明 主机名称操作系统说明192.168.11.82Ubuntu 22.04主库所在服务器192.168.11.28Oracle Linux Server 8.7从库所在服务器 版本说明 ...
    99+
    2023-10-25
    数据库 mysql 服务器
  • 详解SpringBoot实现事件同步与异步监听
    目录简介事件监听简述实例同步监听(无序)同步监听(有序)异步监听(无序)简介 说明 本文用示例介绍SpringBoot中的事件的用法及原理。 事件监听简述 事件的发布与监听从属于观察...
    99+
    2022-11-13
  • Canal中怎么实现MySQL数据库实时数据同步
    这期内容当中小编将会给大家带来有关Canal中怎么实现MySQL数据库实时数据同步,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。1.1 canal介绍Canal是一个基于...
    99+
    2022-10-18
  • MySQL同步数据Replication的实现步骤
    目录一、同步复制数据基本原理二、同步数据示例1、修改主从mysql配置文件2、主机建立同步账号,并查看主库状态信息3、从机同步配置4、查看同步配置效果MySQL提供了Replication功能,可以实现将一个数据库的数据...
    99+
    2023-03-24
    MySQL同步数据Replication MySQL Replication同步
  • MySQL迁移KingbaseESV8R2的实现步骤
    目录1. 使用Oracle中转2. 使用KingbaseESV8R3中转3. 其他问题1.自增2.uuid4. 已发现的 SQL 问题1. 使用Oracle中转 KingbaseES...
    99+
    2022-11-13
  • 基于Canal以及消息队列实现MySQL的Binlog近实时同步
    基于Canal以及消息队列实现MySQL的Binlog近实时同步 1.canal的应用场景 目前普遍基于日志增量订阅和消费的业务,主要包括 基于数据库增量日志解析,提供增量数据订阅和消费数据库镜像数据库实时备份索引构建和实时维护(拆分异构索...
    99+
    2023-08-21
    mysql 数据库 java
  • MySQL实现JDBC详细步骤
    目录JDBC基础入门概念本质JDBC的7个步骤JDBC入门示例代码JDBC基础入门 概念 JDBC(Java DataBase Connectivity,java数据库连接)是一种用...
    99+
    2022-11-13
  • 使用canal监控mysql数据库实现elasticsearch索引实时更新问题
    目录业务场景安装下载安装数据库启用row binlog使用修改配置文件canal.properties配置单个连接配置多个连接配置rabbitMQ程序改动canal源码微服务消费mq...
    99+
    2022-11-13
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作