Canal单机部署
目录
一、前期准备
1、配置binlog日志
2、配置MQ服务
二、搭建canal
1、下载安装包
2、部署canal-admin的UI管理界面
2-1、创建&解压admin
2-2、配置UI管理界面
2-3、初始化元数据库
2-4、启动Canal Admin
3、部署canal-server服务
3-1、创建&解压deployer包
3-2、配置关联admin
3-3、启动canalServer&修改配置
三、集成springboot验证
1、必要依赖
2、配置文件
3、监听消息
4、验证
一、前期准备
1、配置binlog日志
前期检查:mysql是否开启了binlog日志
SHOW VARIABLES LIKE '%log_bin%';
如果为OFF,则需要配置开启。
进入mysql的配置文件,window版5.7.43,在安装目录找到my.ini,添加
[mysqld]
log-bin= H:\\binlog\mysql-bin
server-id=100
binlog_format = ROW
然后重启服务,重新验证查看。
2、配置MQ服务
自行搭建一套可用的MQ服务,可参考RocketMq单机部署,这里跳过
二、搭建canal
1、下载安装包
官网地址:https://github.com/alibaba/canal/releaseshttps://github.com/alibaba/canal/releaseshttps://github.com/alibaba/canal/releases
国内直接下载比较慢,建议使用加速器GitHub 文件加速 ,复制官网地址对应包的下载链接粘贴到输入框中,点击下载,可加速下载。建议下载 1.1.7
2、部署canal-admin的UI管理界面
2-1、创建&解压admin
# mkdir /usr/local/share/canalFolder/canalAdmin
# cd /usr/local/share/canalFolder/canalAdmin
# tar zxvf canal.admin-1.1.7-SNAPSHOT.tar.gz
2-2、配置UI管理界面
# cd /usr/local/share/canalFolder/canalAdmin/conf
# vim application.yml
2-3、初始化元数据库
如果服务器没有mysql客户端,可以将canal_manager.sql内容拷贝出来单独执行(即把建表语句直接复制到本地mysql客户端如navicat执行即可)
2-4、启动Canal Admin
# sh startup.sh
查看端口 8089 是否有启动
# nc -zv 192.168.152.128 8089
如下表示成功
!!若出现下方这种很长串的提示。。端口又没启动成功,详细细节进入logs目录查看
# cat /usr/local/share/canalFolder/canalAdmin/logs/admin.log
错误内容是所要链接的数据权限不支持
a.原因:因为虚拟机部署把canal服务和数据库分开进行,所以有2台服务器,直接修改连接池ip后,出现了java.sql.SQLException: null, message from server: “Host ‘xxx’ is not allowed to connect这样的错误,它的意思就是安装了数据库的服务器不允许部署项目的服务器进行远程连接。也就是权限问题,修改权限就可以了,
b修改方法:
登录mysql : mysql -uroot -p; 并输入密码
b-1.打开mysql控制台,输入:进入mysql库
use mysql;
b-2.输入:查询mysql库的表
show tables;
b-3.输入:查看user表的host
select host from user;
b-4.输入:修改可以远程访问
update user set host ='%' where user ='root';
b-5.输入:
flush privileges;
flush privileges; 命令本质上的作用是将当前user和privilige表中的用户信息/权限设置从mysql库(MySQL数据库的内置库)中提取到内存里。
MySQL用户数据和权限有修改后,希望在"不重启MySQL服务"的情况下直接生效,那么就需要执行这个命令。
通常是在修改ROOT帐号的设置后,怕重启后无法再登录进来,那么直接flush之后就可以看权限设置是否生效。而不必冒太大风险。
成功后访问页面地址信息:http://192.168.152.128:8089/
登录一开始设置的 账号密码: admin/123456
这里只做单机版,所以不进行集群配置,有需要可安装ZK自行配置
进入“Server管理”配置Server方式有2种:
第一种是直接手动在管理界面配置
第二种是在通过设定配置文件,启动后运行,因为都要监听,建议直接使用第二种方式(配置如第3项所列)
3、部署canal-server服务
3-1、创建&解压deployer包
# mkdir /usr/local/share/canalFolder/canalDeployer
# cd /usr/local/share/canalFolder/canalDeployer
# tar zxvf canal.deployer-1.1.7-SNAPSHOT.tar.gz
3-2、配置关联admin
# cd conf
# mv canal.properties canal.properties_bak
# mv canal_local.properties canal.properties
# vim canal.properties
# register ip
canal.register.ip = 192.168.152.128# canal admin config canalAdmin 的链接、端口、用户名和MD5密码
canal.admin.manager = 192.168.152.128:8089
canal.admin.port = 11110
canal.admin.user = admin
canal.admin.passwd = 6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9
# admin auto register
canal.admin.register.auto = true
# 需要注册到canalAdmin的集群名,对应集群管理里面创建的集群名
canal.admin.register.cluster =
# 当前canalServer在Server管理里面创建的Server名称
canal.admin.register.name = canalServer
canal.admin.passwd 密码可参考一开始导入的表结构,也可修改
3-3、启动canalServer&修改配置
# sh ../bin/startup.sh
启动后,通过canal-admin管理界面,进入server管理,修改server配置
里面的配置内容修改只改几个地方
29行: canal.serverMode = rocketMQ (这里设置了rocketMQ所以需要配置162行有关的内容,不同选择修改不同地方的配置)
86行: canal.instance.tsdb.enable = false
127行: canal.mq.flatMessage = true(flatMessage 为true 生产到mq的消息就是json的, 否则就是protobuf二进制的)
PS:如果server管理中server中的状态显示“断开”,应该是密码验证问题:
canal server 与 canal admin 的认证机制
canal admin 的 conf/application.yml 里面定义了账号密码明文
canal.adminUser: admin
canal.adminPasswd:admin
canal server 的 conf/canal_local.properties 里面定义了账号密码密文
canal.admin.user: admin
canal.admin.passwd:6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9 密文的生成方式: select password(‘123456’);
双向认证: canal server 向 canal admin 注册的时候会以密码密文做认证, canal admin 对 canal server 做连通性测试的时候也会将密码明文加密之后做认证 (连通性测试失败的时候,canal admin web 会显示对应的canal server 处于 “断开” 状态)
接下来通过UI界面到 Instance管理 新增配置,内容如下
#################################################
## mysql serverId , v1.0.26+ will autoGen
# canal.instance.mysql.slaveId=0# enable gtid use true/false 是否开启全局事务id
canal.instance.gtidon=false
canal.instance.master.gtid=# position info
# 需要同步binlog的数据库地址及端
canal.instance.master.address=172.16.12.68:3306
# 需要读取的起始的binlog文件
canal.instance.master.journal.name=
# 需要读取的起始的binlog文件的偏移量
canal.instance.master.position=
# 需要读取的起始的binlog的时间戳
canal.instance.master.timestamp=# rds oss binlog
canal.instance.rds.accesskey=
canal.instance.rds.secretkey=
canal.instance.rds.instanceId=# table meta tsdb info
# 是否开启table meta的时间序列版本记录功能
canal.instance.tsdb.enable=true
# 存储canal记录表结构日志的数据库jdbc
#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 =
#canal.instance.standby.gtid=# username/password 需要同步binlog的数据库的用户名和密码
canal.instance.dbUsername=root
canal.instance.dbPassword=123456
canal.instance.connectionCharset = UTF-8
# enable druid Decrypt database password
canal.instance.enableDruid=false
#canal.instance.pwdPublicKey=MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBALK4BUxdDltRRE5/zXpVEVPUgunvscYFtEip3pmLlhrWpacX7y7GCMo2/JM6LeHmiiNdH1FWgGCpUfircSwlWKUCAwEAAQ==# table regex # mysql 数据解析关注的表,Perl正则表达式, .*\\..*默认所有库所有表
canal.instance.filter.regex=test\\.exc_user
# table black regex # 过滤那些不符合要求的table,这些table的数据将不会被解析和传送
canal.instance.filter.black.regex=mysql\\..*,sys\\..*,performance_schema\\..*,information_schema\\..*,seata\\..*,.*\\.undo_log
# table field filter(format: schema1.tableName1:field1/field2,schema2.tableName2:field1/field2)
#canal.instance.filter.field=test1.t_product:id/subject/keywords,test2.t_company:id/name/contact/ch
# table field black filter(format: schema1.tableName1:field1/field2,schema2.tableName2:field1/field2)
#canal.instance.filter.black.field=test1.t_product:subject/product_image,test2.t_company:id/name/contact/ch# mq config, 要监听的 topic
canal.mq.topic=test-top
# dynamic topic route by schema or table regex
#canal.mq.dynamicTopic=mytest1.user,mytest2\\..*,.*\\..*
canal.mq.partition=0
# hash partition config
#canal.mq.partitionsNum=3
#canal.mq.partitionHash=test.table:id^name,.*\\..*
#################################################
截止到此,canal,部署完成。
三、集成springboot验证
1、必要依赖
<!-- 这里要考虑版本兼容问题,这是与jdk8匹配的jar版本 --><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-stream-rocketmq</artifactId><version>2021.0.4.0</version></dependency><!-- Canal 相关 --><dependency><groupId>com.alibaba.otter</groupId><artifactId>canal.protocol</artifactId><version>1.1.7</version><exclusions><exclusion><groupId>com.alibaba.fastjson2</groupId><artifactId>fastjson2</artifactId></exclusion><exclusion><groupId>com.google.protobuf</groupId><artifactId>protobuf-java</artifactId></exclusion></exclusions></dependency><dependency><groupId>com.alibaba.otter</groupId><artifactId>canal.client</artifactId><version>1.1.7</version></dependency>
2、配置文件
# rocket配置
spring:cloud:stream:function:definition: twoConsumer # 方法定义bindings:# 发送必须配置此处producerInfo-out-0:destination: test_topic # topic消息主题# 配置channel消息通道 (接收必须配置此处)twoConsumer-in-0:destination: test-top # topic消息主题group: consumer-group # 消费者组rocketmq:binder:name-server: 192.168.152.130:9876 # rocketmq服务地址# 配置消息通道独特属性(仅适用于rocketmq)bindings:# 发送必须配置此处# 配置channel消息通道(生产者:[functionName]-out-[index],消费者:[functionName]-in-[index])producerInfo-out-0:producer:group: consumer-group #生产者的组名称(一般与消费者组相同),用于负载均衡sync: true # 是否开启同步发送
3、监听消息
消息消费者类 TwoConsumer
import com.alibaba.fastjson.JSONObject;
import lombok.extern.slf4j.Slf4j;
import org.springframework.context.annotation.Configuration;
import org.springframework.messaging.Message;import java.util.Collection;
import java.util.function.Consumer;/*** 消息消费者类*/
@Configuration
@Slf4j
public class TwoConsumer implements Consumer<Message<Object>> {/*** 本方法处理监听 canal 服务的操作变更 (对二进制进行转化含protobuf和JSON)* @param message*/@Overridepublic void accept(Message< Object > message) {log.info("收到消息:{}", message);// 获取消息 IDString msgId = message.getHeaders().get("ROCKET_MQ_MESSAGE_ID", String.class);// 获取消息体Object payload = message.getPayload();System.out.println(JSONObject.toJSON(payload));// 这里进行业务处理}
}
4、验证
在数据库进行修改操作
接收结果如下:
OVER!
参考文献:
异常message from server: “Host ‘xx.xx.xx.xx’
CanalAdmin部署文档
协议转化处理
Canal配置
相关文章:

Canal单机部署
目录 一、前期准备 1、配置binlog日志 2、配置MQ服务 二、搭建canal 1、下载安装包 2、部署canal-admin的UI管理界面 2-1、创建&解压admin 2-2、配置UI管理界面 2-3、初始化元数据库 2-4、启动Canal Admin 3、部署canal-server服务 3-1、创建&解压deployer…...
java,每日练习02
题目 选自牛客网 1.下列关于Java中类的构造方法的描述,正确的是() A.构造方法的返回类型为void B.可以定义一个类而在代码中不写构造方法。 C.在同一个类中定义的重载构造方法不可以相互调用。 D.子类不允许调用父类的构造方法。 正确答案…...
C# TreeView
添加 TreeView 控件:定义节点:添加节点:设置节点属性:处理节点事件:自定义节点绘制:数据绑定:节点选择:节点展开和折叠:搜索和过滤:示例代码总结 C# 中的 Tre…...

通过xshell使用密钥连接阿里云服务器
目录 步骤1:创建密钥对 步骤2:连接服务器 步骤3:连接服务器 连接阿里云服务器有几种方式,例如有密码进行连接,但是密码连接安全风险较大,所以我们选择密钥方式进行连接。操作简单且安全性高 步骤1&…...

<数据集>路面坑洼识别数据集<目标检测>
数据集格式:VOCYOLO格式 图片数量:681张 标注数量(xml文件个数):681 标注数量(txt文件个数):681 标注类别数:1 标注类别名称:[pothole] 使用标注工具:labelImg 标注规则:对类…...
几个常用脚本
系统初始化 #!/bin/bash # 定义颜色常量 RED\033[0;31m GREEN\033[0;32m NC\033[0m # No Color #功能菜单 menu() {clearecho "请选择要执行的操作:"echo "1. 检查网络"echo "2. 关闭防火墙和SELinux"echo "3. 替换YUM源"echo "…...
gtest中TEST和TEST_F和TEST_P的区别是什么
gtest(Google Test)是Google开发的一个开源的C测试框架,它提供了多种宏来支持不同类型的测试。其中,TEST、TEST_F和TEST_P是三个常用的宏,它们各自有不同的用途和特性。以下是它们之间的主要区别: TEST 用…...

VS2022如何调出输出窗口,并在输出窗口打印日志
在输出窗口打印 System.Diagnostics.Debug.WriteLine("这是一行自定义的输出。Debug.WriteLine");System.Diagnostics.Debug.Write("这是第二行自定义的输出,Debug.Write");System.Diagnostics.Debug.WriteLine("换行");System.Diagn…...

【全国大学生电子设计竞赛】2021年I题
🥰🥰全国大学生电子设计大赛学习资料专栏已开启,限时免费,速速收藏~...

【项目】基于Vue2+Router+Vant 前端面经项目
环境配置 Vue脚手架的创建 在终端中打开输入 vue create 项目包名 -m npm注意⚠️:项目名称不再允许包含大写字母。 选择第三项 3.选择要安装的模块 从上到下的功能模块: Babel - ES:降级处理Router-Vue:路由插件CSS预处理器E…...

【论文阅读】YOLOv10: Real-Time End-to-End Object Detection
题目:YOLOv10: Real-Time End-to-End Object Detection 作者:Ao Wang Hui Chen∗ Lihao Liu Kai Chen Zijia Lin Jungong Han Guiguang Ding∗ 清华大学的 motivation: 作者觉得YOLO系列的NMS和某些结构非常的耗时,提出NMS-free和一些列高效…...
计算资源消耗
计算资源消耗 计算资源的消耗分成: 模型参数本身的存储。模型参数的梯度以及梯度momentum的存储。token的传播过程 例如以llama3-7b为例: 模型参数存储: 模型参数量 * fp32 例如llama3-70b为例,7 * 10^9 * 4 模型参数的梯度以…...
企业微信推送消息的Java实现教程
在这篇教程中,我们将介绍如何使用Java实现企业微信的消息推送功能,特别是在完成任务后,将结果信息通过企业微信推送给指定的用户。我们将基于您提供的代码进行说明。 1. 环境准备 1.1 依赖库 在开始编写代码之前,确保您的项目中…...

强化学习之Actor-Critic算法(基于值函数和策略的结合)——以CartPole环境为例
0.简介 DQN算法作为基于值函数的方法代表,基于值函数的方法只学习一个价值函数。REINFORCE算法作为基于策略的方法代表,基于策略的方法只学习一个策略函数。Actor-Critic算法则结合了两种学习方法,其本质是基于策略的方法,因为其目…...

Linux学习记录(五)-------三类读写函数
文章目录 三种读写函数1.行缓存2.无缓存3.全缓存4.fgets和fputs5.gets和puts 三种读写函数 1.行缓存 遇到新行(\n),或者写满缓存时,即调用系统函数 读:fgets,gets,printf,fprintf,sprintf写:fputs,puts,scanf 2.无缓…...
2024年8月13日(lvs NAT脚本 RS脚本 ds脚本)
lvs-nat模式的优点配置简单,缺点是请求和响应都必须经过ds,容易称为性能瓶颈 希望有这样的模式,请求的时候使用input链进行负载均衡,响应的时候就不要经过ds,直接由rs响应给客户端 在nat模式的时候,请求vip,接收vip的响应 构想 请求vip,接受rip响应,这是不允许lvs-dr模式 NAT脚…...

css实现水滴效果图
效果图: <template><div style"width: 100%;height:500px;padding:20px;"><div class"water"></div></div> </template> <script> export default {data() {return {};},watch: {},created() {},me…...

接口测试面试题目,你都会了吗?
面试题 什么是接口测试? 接口自动化测试的流程是什么? GET请求和POST请求区别是什么? 接口测试的常用工具有哪些? HTTP接口的请求参数类型有哪些? 如何从上一个接口获取相关的响应数据传递到下一个接口࿱…...

jmeter-beanshell学习16-自定义函数
之前写了一个从文件获取指定数据,用的时候发现不太好用,写了一大段,只能取出一个数,再想取另一个数,再粘一大段。太不好看了,就想到了函数。查了一下确实可以写。 public int test(a,b){return ab; } ctes…...

LogicFlow工作流在React和Vue3中的使用
LogicFlow 是一款流程图编辑框架,提供了一系列流程图交互、编辑所必需的功能和简单灵活的节点自定义、插件等拓展机制,方便我们快速在业务系统内满足类流程图的需求。 核心能力 可视化模型:通过 LogicFlow 提供的直观可视化界面,…...
conda相比python好处
Conda 作为 Python 的环境和包管理工具,相比原生 Python 生态(如 pip 虚拟环境)有许多独特优势,尤其在多项目管理、依赖处理和跨平台兼容性等方面表现更优。以下是 Conda 的核心好处: 一、一站式环境管理:…...
逻辑回归:给不确定性划界的分类大师
想象你是一名医生。面对患者的检查报告(肿瘤大小、血液指标),你需要做出一个**决定性判断**:恶性还是良性?这种“非黑即白”的抉择,正是**逻辑回归(Logistic Regression)** 的战场&a…...

智慧工地云平台源码,基于微服务架构+Java+Spring Cloud +UniApp +MySql
智慧工地管理云平台系统,智慧工地全套源码,java版智慧工地源码,支持PC端、大屏端、移动端。 智慧工地聚焦建筑行业的市场需求,提供“平台网络终端”的整体解决方案,提供劳务管理、视频管理、智能监测、绿色施工、安全管…...

循环冗余码校验CRC码 算法步骤+详细实例计算
通信过程:(白话解释) 我们将原始待发送的消息称为 M M M,依据发送接收消息双方约定的生成多项式 G ( x ) G(x) G(x)(意思就是 G ( x ) G(x) G(x) 是已知的)࿰…...
Java - Mysql数据类型对应
Mysql数据类型java数据类型备注整型INT/INTEGERint / java.lang.Integer–BIGINTlong/java.lang.Long–––浮点型FLOATfloat/java.lang.FloatDOUBLEdouble/java.lang.Double–DECIMAL/NUMERICjava.math.BigDecimal字符串型CHARjava.lang.String固定长度字符串VARCHARjava.lang…...
spring:实例工厂方法获取bean
spring处理使用静态工厂方法获取bean实例,也可以通过实例工厂方法获取bean实例。 实例工厂方法步骤如下: 定义实例工厂类(Java代码),定义实例工厂(xml),定义调用实例工厂ÿ…...

前端开发面试题总结-JavaScript篇(一)
文章目录 JavaScript高频问答一、作用域与闭包1.什么是闭包(Closure)?闭包有什么应用场景和潜在问题?2.解释 JavaScript 的作用域链(Scope Chain) 二、原型与继承3.原型链是什么?如何实现继承&a…...

AI书签管理工具开发全记录(十九):嵌入资源处理
1.前言 📝 在上一篇文章中,我们完成了书签的导入导出功能。本篇文章我们研究如何处理嵌入资源,方便后续将资源打包到一个可执行文件中。 2.embed介绍 🎯 Go 1.16 引入了革命性的 embed 包,彻底改变了静态资源管理的…...

算法笔记2
1.字符串拼接最好用StringBuilder,不用String 2.创建List<>类型的数组并创建内存 List arr[] new ArrayList[26]; Arrays.setAll(arr, i -> new ArrayList<>()); 3.去掉首尾空格...
Java 二维码
Java 二维码 **技术:**谷歌 ZXing 实现 首先添加依赖 <!-- 二维码依赖 --><dependency><groupId>com.google.zxing</groupId><artifactId>core</artifactId><version>3.5.1</version></dependency><de…...