一、下载及安装

   下载:docker pull docker.io/canal/canal-server
   安装:docker run -p 11111:11111 --name 容器名(canal)-d docker.io/canal/canal-server
   设置定时自启动:docker update --restart=always canal

二、配置

  1、执行 docker exec -it canal /bin/bash命令进入容器中 ,如下图:
  
  2、执行cd canal-server/conf进入配置文件目录,执行vi canal.properties命令编辑系统根配置文件:
   在这里插入图片描述
   在这里插入图片描述   

参数名称 参数说明
canal.id 每个canal server实例的唯一标识,默认值为1
canal.ip canal server绑定的本地IP信息,如果不配置,默认选择一个本机IP进行启动服务
canal.port canal server提供socket服务的端口,默认值11111

   3、执行vi canal-server/conf/example/instance.properties命令编辑instance级别的配置文件:
  在这里插入图片描述
  4、此图为配置主数据库的IP及端口,默认IP为127.0.0.1,使用默认地址时可能会报java.io.IOException: connect /127.0.0.1:3306 failure,这时将默认IP改为主机真实IP地址就可以解决这个错误。
   在这里插入图片描述
  5、 此图为配置主数据库分配的用户名、密码及编码
  在这里插入图片描述
  6、此图为配置匹配表的正则表达式:
    canal.instance.filter.regex=.*\\..*,其中.*表示配置连接中所有的数据库,\\..*  表示数据库中所有的表,.*\\..*表示所有数据库中的所有的表的变化都被监听。
    canal.instance.filter.regex=test.*表示只对test数据库中所有的表进行监听。
  在这里插入图片描述
  7、此图表示自定义微服务监听需要指定example的名称

三、启动

  1、执行sh canal-server/bin/startup.sh命令启动canal
在这里插入图片描述  2、 执行vi canal-server/log/canal/canal.log查看canal启动日志信息
在这里插入图片描述  3、执行sh canal-server/bin/stop.sh命令关闭canal
在这里插入图片描述

四、Demo

1、引入服务所依赖jar包

<description>Canal微服务,实现对数据库数据进行监控</description>
<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter</artifactId>
    </dependency>
    <dependency>
        <groupId>com.xpand</groupId>
        <artifactId>starter-canal</artifactId>
        <version>0.0.1-SNAPSHOT</version>
    </dependency>
</dependencies>

2、application.yml配置文件中进行相关配置如下:

canal:
  client:
    instances:
      example:   #此处为上图2.7配置的example名称
        host: 192.168.160.129 #服务IP地址
        port: 11111	#服务端口

3、创建启动类并添加相关注解,并排除数据库自动加载

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

4、创建一个类实现对mysql的增删改进行监听

package cn.changgou.listen;

import com.alibaba.otter.canal.protocol.CanalEntry;
import com.xpand.starter.canal.annotation.CanalEventListener;
import com.xpand.starter.canal.annotation.DeleteListenPoint;
import com.xpand.starter.canal.annotation.InsertListenPoint;
import com.xpand.starter.canal.annotation.UpdateListenPoint;

/**
 * 实现mysql数据监听
 */
@CanalEventListener
public class CanalDataEventListen {

    /**
     * SQL增加监听
     * @param data 发生变更的一行数据
     * @param type 当前操作的类型,增加数据
     */
    @InsertListenPoint
    public void onEventInsert(CanalEntry.EventType type,CanalEntry.RowData data){
        for (CanalEntry.Column column : data.getAfterColumnsList()) {
            System.out.println("列名:" + column.getName() + "--------->数据:" + column.getValue());
        }
    }

    /**
     * SQL删除监听
     */
    @DeleteListenPoint
    public void onEventDel(CanalEntry.EventType type,CanalEntry.RowData data){
        for (CanalEntry.Column column : data.getBeforeColumnsList()) {
            System.out.println("列名:" + column.getName() + "--------->数据:" + column.getValue());
        }
    }

    /**
     * SQL修改监听
     */
    @UpdateListenPoint
    public void onEventUpdate(CanalEntry.EventType type,CanalEntry.RowData data){
        for (CanalEntry.Column column : data.getAfterColumnsList()) {
            System.out.println("列名:" + column.getName() + "--------->数据:" + column.getValue());
        }
    }
}

到此一个canal的配置及其小demo已经结束了,记录一下,方便查阅。

GitHub 加速计划 / ca / canal
53
10
下载
alibaba/canal: Canal 是由阿里巴巴开源的分布式数据库同步系统,主要用于实现MySQL数据库的日志解析和实时增量数据订阅与消费,广泛应用于数据库变更消息的捕获、数据迁移、缓存更新等场景。
最近提交(Master分支:4 个月前 )
8a4199a7 * 1. Fix compressed OSS binlog data 2. Fix first second data loss caused by dumping from OSS binlog * Fix CI failed test cases 17 天前
79338be0 - String.format is lower than StringBuilder. Benchmark like below: code snippet: String str = String.format("%s-%s-%s", 0, 1, 10); Benchmark Mode Cnt Score Error Units StringBenchmark.append thrpt 46431458.255 ops/s StringBenchmark.format thrpt 985724.313 ops/s StringBenchmark.append avgt ≈ 10⁻⁸ s/op StringBenchmark.format avgt ≈ 10⁻⁶ s/op StringBenchmark.append sample 364232 ≈ 10⁻⁷ s/op StringBenchmark.append:p0.00 sample ≈ 10⁻⁸ s/op StringBenchmark.append:p0.50 sample ≈ 10⁻⁷ s/op StringBenchmark.append:p0.90 sample ≈ 10⁻⁷ s/op StringBenchmark.append:p0.95 sample ≈ 10⁻⁷ s/op StringBenchmark.append:p0.99 sample ≈ 10⁻⁷ s/op StringBenchmark.append:p0.999 sample ≈ 10⁻⁷ s/op StringBenchmark.append:p0.9999 sample ≈ 10⁻⁵ s/op StringBenchmark.append:p1.00 sample 0.001 s/op StringBenchmark.format sample 336220 ≈ 10⁻⁶ s/op StringBenchmark.format:p0.00 sample ≈ 10⁻⁶ s/op StringBenchmark.format:p0.50 sample ≈ 10⁻⁶ s/op StringBenchmark.format:p0.90 sample ≈ 10⁻⁶ s/op StringBenchmark.format:p0.95 sample ≈ 10⁻⁶ s/op StringBenchmark.format:p0.99 sample ≈ 10⁻⁶ s/op StringBenchmark.format:p0.999 sample ≈ 10⁻⁵ s/op StringBenchmark.format:p0.9999 sample ≈ 10⁻⁴ s/op StringBenchmark.format:p1.00 sample 0.001 s/op StringBenchmark.append ss ≈ 10⁻⁶ s/op StringBenchmark.format ss ≈ 10⁻⁵ s/op 17 天前
Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐