当前位置: 首页 > news >正文

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中类的构造方法的描述&#xff0c;正确的是&#xff08;&#xff09; A.构造方法的返回类型为void B.可以定义一个类而在代码中不写构造方法。 C.在同一个类中定义的重载构造方法不可以相互调用。 D.子类不允许调用父类的构造方法。 正确答案…...

C# TreeView

添加 TreeView 控件&#xff1a;定义节点&#xff1a;添加节点&#xff1a;设置节点属性&#xff1a;处理节点事件&#xff1a;自定义节点绘制&#xff1a;数据绑定&#xff1a;节点选择&#xff1a;节点展开和折叠&#xff1a;搜索和过滤&#xff1a;示例代码总结 C# 中的 Tre…...

通过xshell使用密钥连接阿里云服务器

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

<数据集>路面坑洼识别数据集<目标检测>

数据集格式&#xff1a;VOCYOLO格式 图片数量&#xff1a;681张 标注数量(xml文件个数)&#xff1a;681 标注数量(txt文件个数)&#xff1a;681 标注类别数&#xff1a;1 标注类别名称&#xff1a;[pothole] 使用标注工具&#xff1a;labelImg 标注规则&#xff1a;对类…...

几个常用脚本

系统初始化 #!/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&#xff08;Google Test&#xff09;是Google开发的一个开源的C测试框架&#xff0c;它提供了多种宏来支持不同类型的测试。其中&#xff0c;TEST、TEST_F和TEST_P是三个常用的宏&#xff0c;它们各自有不同的用途和特性。以下是它们之间的主要区别&#xff1a; TEST 用…...

VS2022如何调出输出窗口,并在输出窗口打印日志

在输出窗口打印 System.Diagnostics.Debug.WriteLine("这是一行自定义的输出。Debug.WriteLine");System.Diagnostics.Debug.Write("这是第二行自定义的输出&#xff0c;Debug.Write");System.Diagnostics.Debug.WriteLine("换行");System.Diagn…...

【全国大学生电子设计竞赛】2021年I题

&#x1f970;&#x1f970;全国大学生电子设计大赛学习资料专栏已开启&#xff0c;限时免费&#xff0c;速速收藏~...

【项目】基于Vue2+Router+Vant 前端面经项目

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

【论文阅读】YOLOv10: Real-Time End-to-End Object Detection

题目&#xff1a;YOLOv10: Real-Time End-to-End Object Detection 作者&#xff1a;Ao Wang Hui Chen∗ Lihao Liu Kai Chen Zijia Lin Jungong Han Guiguang Ding∗ 清华大学的 motivation: 作者觉得YOLO系列的NMS和某些结构非常的耗时&#xff0c;提出NMS-free和一些列高效…...

计算资源消耗

计算资源消耗 计算资源的消耗分成&#xff1a; 模型参数本身的存储。模型参数的梯度以及梯度momentum的存储。token的传播过程 例如以llama3-7b为例&#xff1a; 模型参数存储&#xff1a; 模型参数量 * fp32 例如llama3-70b为例&#xff0c;7 * 10^9 * 4 模型参数的梯度以…...

企业微信推送消息的Java实现教程

在这篇教程中&#xff0c;我们将介绍如何使用Java实现企业微信的消息推送功能&#xff0c;特别是在完成任务后&#xff0c;将结果信息通过企业微信推送给指定的用户。我们将基于您提供的代码进行说明。 1. 环境准备 1.1 依赖库 在开始编写代码之前&#xff0c;确保您的项目中…...

强化学习之Actor-Critic算法(基于值函数和策略的结合)——以CartPole环境为例

0.简介 DQN算法作为基于值函数的方法代表&#xff0c;基于值函数的方法只学习一个价值函数。REINFORCE算法作为基于策略的方法代表&#xff0c;基于策略的方法只学习一个策略函数。Actor-Critic算法则结合了两种学习方法&#xff0c;其本质是基于策略的方法&#xff0c;因为其目…...

Linux学习记录(五)-------三类读写函数

文章目录 三种读写函数1.行缓存2.无缓存3.全缓存4.fgets和fputs5.gets和puts 三种读写函数 1.行缓存 遇到新行&#xff08;\n&#xff09;,或者写满缓存时&#xff0c;即调用系统函数 读&#xff1a;fgets,gets,printf,fprintf,sprintf写&#xff1a;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实现水滴效果图

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

接口测试面试题目,你都会了吗?

面试题 什么是接口测试&#xff1f; 接口自动化测试的流程是什么&#xff1f; GET请求和POST请求区别是什么&#xff1f; 接口测试的常用工具有哪些&#xff1f; HTTP接口的请求参数类型有哪些&#xff1f; 如何从上一个接口获取相关的响应数据传递到下一个接口&#xff1…...

jmeter-beanshell学习16-自定义函数

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

LogicFlow工作流在React和Vue3中的使用

LogicFlow 是一款流程图编辑框架&#xff0c;提供了一系列流程图交互、编辑所必需的功能和简单灵活的节点自定义、插件等拓展机制&#xff0c;方便我们快速在业务系统内满足类流程图的需求。 核心能力 可视化模型&#xff1a;通过 LogicFlow 提供的直观可视化界面&#xff0c…...

Cursor实现用excel数据填充word模版的方法

cursor主页&#xff1a;https://www.cursor.com/ 任务目标&#xff1a;把excel格式的数据里的单元格&#xff0c;按照某一个固定模版填充到word中 文章目录 注意事项逐步生成程序1. 确定格式2. 调试程序 注意事项 直接给一个excel文件和最终呈现的word文件的示例&#xff0c;…...

C++_核心编程_多态案例二-制作饮品

#include <iostream> #include <string> using namespace std;/*制作饮品的大致流程为&#xff1a;煮水 - 冲泡 - 倒入杯中 - 加入辅料 利用多态技术实现本案例&#xff0c;提供抽象制作饮品基类&#xff0c;提供子类制作咖啡和茶叶*//*基类*/ class AbstractDr…...

智慧工地云平台源码,基于微服务架构+Java+Spring Cloud +UniApp +MySql

智慧工地管理云平台系统&#xff0c;智慧工地全套源码&#xff0c;java版智慧工地源码&#xff0c;支持PC端、大屏端、移动端。 智慧工地聚焦建筑行业的市场需求&#xff0c;提供“平台网络终端”的整体解决方案&#xff0c;提供劳务管理、视频管理、智能监测、绿色施工、安全管…...

Python爬虫(二):爬虫完整流程

爬虫完整流程详解&#xff08;7大核心步骤实战技巧&#xff09; 一、爬虫完整工作流程 以下是爬虫开发的完整流程&#xff0c;我将结合具体技术点和实战经验展开说明&#xff1a; 1. 目标分析与前期准备 网站技术分析&#xff1a; 使用浏览器开发者工具&#xff08;F12&…...

ardupilot 开发环境eclipse 中import 缺少C++

目录 文章目录 目录摘要1.修复过程摘要 本节主要解决ardupilot 开发环境eclipse 中import 缺少C++,无法导入ardupilot代码,会引起查看不方便的问题。如下图所示 1.修复过程 0.安装ubuntu 软件中自带的eclipse 1.打开eclipse—Help—install new software 2.在 Work with中…...

全面解析各类VPN技术:GRE、IPsec、L2TP、SSL与MPLS VPN对比

目录 引言 VPN技术概述 GRE VPN 3.1 GRE封装结构 3.2 GRE的应用场景 GRE over IPsec 4.1 GRE over IPsec封装结构 4.2 为什么使用GRE over IPsec&#xff1f; IPsec VPN 5.1 IPsec传输模式&#xff08;Transport Mode&#xff09; 5.2 IPsec隧道模式&#xff08;Tunne…...

重启Eureka集群中的节点,对已经注册的服务有什么影响

先看答案&#xff0c;如果正确地操作&#xff0c;重启Eureka集群中的节点&#xff0c;对已经注册的服务影响非常小&#xff0c;甚至可以做到无感知。 但如果操作不当&#xff0c;可能会引发短暂的服务发现问题。 下面我们从Eureka的核心工作原理来详细分析这个问题。 Eureka的…...

IP如何挑?2025年海外专线IP如何购买?

你花了时间和预算买了IP&#xff0c;结果IP质量不佳&#xff0c;项目效率低下不说&#xff0c;还可能带来莫名的网络问题&#xff0c;是不是太闹心了&#xff1f;尤其是在面对海外专线IP时&#xff0c;到底怎么才能买到适合自己的呢&#xff1f;所以&#xff0c;挑IP绝对是个技…...

Git 3天2K星标:Datawhale 的 Happy-LLM 项目介绍(附教程)

引言 在人工智能飞速发展的今天&#xff0c;大语言模型&#xff08;Large Language Models, LLMs&#xff09;已成为技术领域的焦点。从智能写作到代码生成&#xff0c;LLM 的应用场景不断扩展&#xff0c;深刻改变了我们的工作和生活方式。然而&#xff0c;理解这些模型的内部…...

在鸿蒙HarmonyOS 5中使用DevEco Studio实现企业微信功能

1. 开发环境准备 ​​安装DevEco Studio 3.1​​&#xff1a; 从华为开发者官网下载最新版DevEco Studio安装HarmonyOS 5.0 SDK ​​项目配置​​&#xff1a; // module.json5 {"module": {"requestPermissions": [{"name": "ohos.permis…...