数据库操作的准备
1、开启 Binlog 写入功能,配置 binlog-format 为 ROW 模式,my.cnf 中配置如下:
vi /etc/my.cnf
[mysqld]
log-bin=mysql-bin # 开启 binlog
binlog-format=ROW # 选择 ROW 模式
server_id=1 # 配置 MySQL replaction 需要定义,不要和 canal 的 slaveId 重复重启 MySQL
[root@localhost etc]# systemctl restart mysql查看下binlog是否开启,如果值为on 代表开启。
SHOW VARIABLES LIKE 'log_bin';查看binlog的格式
show variables like '%binlog_format%';https://dev.mysql.com/doc/refman/8.4/en/
https://dev.mysql.com/doc/refman/8.4/en/show-master-status.html8.4中已经没有SHOW MASTER STATUS;这条命令,需要用SHOW BINARY LOG STATUS
SHOW MASTER STATUS; 是一条 MySQL 查询命令,用于获取当前 MySQL 服务器作为主服务器时的二进制日志状态。这条命令对于设置从服务器的复制非常有用,因为它提供了从服务器需要的信息,以便知道从哪里开始复制数据。SHOW BINARY LOG STATUS
binlog.000034   1582、授权 canal 链接 MySQL 账号具有作为 MySQL slave 的权限, 如果已有账户可直接 grantCREATE USER canal IDENTIFIED BY 'canal';
GRANT SELECT, REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'canal'@'%';
-- GRANT ALL PRIVILEGES ON *.* TO 'canal'@'%' ;
FLUSH PRIVILEGES;MySQL的slave需要的权限说明如下:
REPLICATION SLAVE权限,这是Slave服务器必须拥有的最重要的权限。它允许Slave服务器连接到Master服务器并获取复制数据。如果Slave服务器没有REPLICATION SLAVE权限,它将无法连接到Master服务器并执行复制操作。
REPLICATION CLIENT权限,这个权限允许Slave服务器向Master服务器发送查询语句以获取复制数据。如果Slave服务器没有REPLICATION CLIENT权限,它将无法向Master服务器发送查询语句,从而无法获取复制数据。
SELECT权限,Slave服务器需要SELECT权限来读取Master服务器上的数据。如果Slave服务器没有SELECT权限,它将无法获取Master服务器上的数据,从而无法保持与Master服务器的同步。查看权限
SHOW grants for 'canal'显示:GRANT SELECT, REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO `canal`@`%`1、下载用1.1.7这个版本比较稳定
1.1
https://github.com/alibaba/canal/releases/tag/canal-1.1.71.2 解压缩和修改配置
mkdir canal
mkdir canal-admin
tar -zxvf canal.deployer-1.1.7.tar.gz  -C canal/
tar -zxvf canal.admin-1.1.7.tar.gz   -C canal-admin/修改conf下的canal.properties,主要改绑定的IP,注意:最好改成IP,别用127.0.0.1,因为要是程序和代码没在一台机器的话连不上。
[root@localhost conf]# vi canal.properties
# tcp bind ip
canal.ip = 192.168.150.50修改/conf/example下的 instance.propertiescanal.instance.master.address=192.168.3.70:3306
# username/password这个是要同步的数据库的账号和密码这个里用的canal,前提是得提前在数据库里创建canal的账号和授权。
canal.instance.dbUsername=canal
canal.instance.dbPassword=canal1.3启动
/usr/local/software/canal/conf
/usr/local/software/canal/bin
看日志
/usr/local/software/canal/logs/canal/usr/local/software/canal/bin
./startup.sh
./stop.sh
使用注意事项:1)修改canal.admin-1.1.7\conf和/canal/conf下的application.yml 启动的驱动driver-class-name: com.mysql.cj.jdbc.Driver2) java21去掉admin和canal bin目录下startup.sh里的java8的参数。删除掉:-XX:+AggressiveOpts -XX:-UseBiasedLocking 3)启动提示druid找不到
将druid的jar包放在lib目录就可以了。druid-1.2.22.jar测试通过
https://repo1.maven.org/maven2/com/alibaba/druid/1.2.22/ 2、加入依赖,Canal TCP模式需要的依赖
<dependency><groupId>com.alibaba.otter</groupId><artifactId>canal.client</artifactId><version>1.1.7</version>
</dependency>
<dependency><groupId>com.alibaba.otter</groupId><artifactId>canal.protocol</artifactId><version>1.1.7</version>
</dependency>3、canal 1.1.7 只能同步mysql8.0下的版本,mysql8.4版本的收不到消息。版本的观念要建立起来,或者我哪弄的不对。4、RocketMQ 监听 canal的变化。
1)启动 RocketMQ
2)修改canal.properties
# tcp, kafka, rocketMQ, rabbitMQ, pulsarMQ
canal.serverMode = rocketMQ
3)写消费的监听者
参考RocketMQTool类import com.alibaba.fastjson2.JSON;
import com.alibaba.fastjson2.JSONObject;
import com.demo.demo.entity.CanalBinlog;
import org.apache.rocketmq.shaded.com.google.gson.Gson;
import org.apache.rocketmq.spring.annotation.RocketMQMessageListener;
import org.apache.rocketmq.spring.core.RocketMQListener;
import org.springframework.stereotype.Component;/*** canal.properties 设置生产者组rocketmq.producer.group = test 用的默认组* example/instance.properties 修改主题 canal.mq.topic=rocketmq_toppic_01*/
@Component
@RocketMQMessageListener(topic = "example", consumerGroup = "test", selectorExpression="*")
public class RocketMQTool implements RocketMQListener<String> {private Gson gson = new Gson();@Overridepublic void onMessage(String mqJson){CanalBinlog canalBinlog = gson.fromJson(mqJson, CanalBinlog.class);System.out.println(mqJson);System.out.println(canalBinlog);CanalBinlog canalBinlog2 = JSON.parseObject(mqJson, CanalBinlog.class);System.out.println("fastJson: "+JSON.toJSONString(canalBinlog2));}
}
import java.util.List;
import java.util.Map;@Data
public class CanalBinlog {// 数据private List<Map<String,Object>> data;// 数据库名称private String database;private long es;// 递增,从1开始private int id;// 是否是DDL语句private boolean isDdl;// 表结构的字段类型private Map<String,Object> mysqlType;private List<Map<String,Object>> old;// 主键名称private List<String> pkNames;// sql语句private String sql;private Map<String,Object> sqlType;// 表名private String table;private long ts;// INSERT、UPDATE、DELETE、ERASE(删除表)private String type;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/pingmian/90732.shtml
繁体地址,请注明出处:http://hk.pswp.cn/pingmian/90732.shtml
英文地址,请注明出处:http://en.pswp.cn/pingmian/90732.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

python---类型转换

文章目录1. 基本类型转换函数int() - 转换为整数float() - 转换为浮点数str() - 转换为字符串bool() - 转换为布尔值2. 其他类型转换list() - 转换为列表tuple() - 转换为元组set() - 转换为集合&#xff08;去重&#xff09;dict() - 转换为字典3. 注意事项1. 兼容性&#xff…

JVM terminated. Exit code=1

出现JVM terminated. Exit code1错误通常是因为 Eclipse 所需的 Java 版本与系统中配置的 Java 版本不匹配。从错误信息中可以看到关键线索&#xff1a;-Dosgi.requiredJavaVersion21&#xff0c;表示此 Eclipse 版本需要 Java 21 或更高版本&#xff0c;但系统当前使用的是 Ja…

20250727-1-Kubernetes 网络-Ingress介绍,部署Ingres_笔记

一、NodePort存在的不足 1. 四层负载均衡  实现技术: 基于iptables和ipvs实现 OSI层级: 位于传输层(第四层) 转发依据: 基于IP地址和端口进行转发 特点: 只能看到IP和端口信息 无法识别应用层协议内容 配置简单但功能有限 2. 七层负载均衡 1)七层负载均衡的概念 …

Javaweb————HTTP的九种请求方法介绍

❤️❤️❤️一.HTTP1.0定义的三种请求方式介绍 &#x1f3cd;️&#x1f3cd;️&#x1f3cd;️&#xff08;1&#xff09;GET请求 作用&#xff1a;向服务器获取资源&#xff0c;比如常见的查询请求 应用场景&#xff1a;绝大多数场景&#xff0c;比如我们访问商城首页查看图…

C++day06(练习题)

循序渐进-基础训练 格式化输入输出 【描述】格式化输入输出练习输入三个整数和一个浮点数&#xff0c;浮点数需要保留的不同小数点后面的数字。 【输入描述】三个正整数以及以一个浮点数 【输出描述】三个整数以及保留不同位数的浮点数 【样例输入】 1 2 3 9.12345678 【样例输…

基于大模型的预训练、量化、微调等完整流程解析

随着大语言模型&#xff08;LLM&#xff09;的飞速发展&#xff0c;模型的训练、部署与优化成为了AI工程领域的重要课题。本文将从 预训练、量化、微调 等关键步骤出发&#xff0c;详细介绍大模型的完整技术流程及相关实践。1. 预训练&#xff08;Pre-training&#xff09; 1.1…

AI入门学习-模型评估示例讲解

from sklearn.metrics import classification_report, confusion_matrix from sklearn.model_selection import train_test_split from sklearn.ensemble import RandomForestClassifier from sklearn.datasets import make_classification# 生成示例分类数据 # n_samples: 样本…

Python编程:初入Python魔法世界

一、常量表达式在编程中&#xff0c;常量指的是在程序执行期间其值不会改变的数据项。虽然 Python 并没有专门的语法来定义常量&#xff08;不像某些其他语言如 Java 中有 final 关键字&#xff09;&#xff0c;但在实践中&#xff0c;我们通常通过约定俗成的方式来表示一个变量…

Android WorkManager 详解:高效管理后台任务

引言在现代移动应用开发中&#xff0c;后台任务处理是一个至关重要的功能。从同步数据到定期备份&#xff0c;从发送通知到处理耗时操作&#xff0c;后台任务无处不在。然而&#xff0c;Android系统对后台任务的限制越来越严格&#xff0c;开发者需要找到既高效又符合系统规范的…

MCU(微控制器)中的高电平与低电平?

MCU&#xff08;微控制器&#xff09;中的高电平与低电平&#xff1f; 在数字电路和MCU&#xff08;微控制器&#xff09;中&#xff0c;**高电平&#xff08;High Level&#xff09;和低电平&#xff08;Low Level&#xff09;**是两种基本的逻辑状态&#xff0c;用于表示二进…

前端项目下载发票pdf文件要求改文件名笔记

1、a链接&#xff08;修改失败&#xff0c;存在跨域&#xff09;<el-table-columnalignrightlabel"下载地址"width"200"><template slot-scope"{row}"><a :href"row.dataUrl" download"文件名">下载</…

Kotlin 数据容器 - List(List 概述、创建 List、List 核心特性、List 元素访问、List 遍历)

一、List 概述List 是一个不可变的有序集合&#xff0c;一旦创建就不能修改其内容&#xff0c;即不能添加、删除、更改元素List 提供了丰富的操作函数来处理数据二、创建 List 1、基础创建 通过 listOf 函数创建&#xff08;推荐&#xff09; // 创建一个 List&#xff0c;包含…

HarmonyOS NEXT 系列之规范开发三方共享包

规范开发三方共享包〇、前言一、了解评分规则二、规范开发共享包1、规范开源协议名称写法2、将 oh-package.json5 文件补充完整3、补充 example 目录4、基本的 README 和 CHANGELOG三、ohpm 包的源码隔离特性〇、前言 对于开发者来说&#xff0c;对外发布代码制品&#xff0c;…

[电网备考]计算机组成与原理

计算机系统概述 计算机发展历程 从数据表示: 计算机可以分为数字计算机与模拟计算机 1946 第一台电子数字计算机 ENIAC 在宾夕法尼亚大学诞生,标志进入电子计算机时代时间计算机发展阶段1946-1958电子管计算机时代1958-1964晶体管计算机时代1964-1971集成电路计算机时代1971-至…

8.c语言指针

内存管理C语言中&#xff0c;栈内存&#xff08;局部变量&#xff09;自动分配/释放&#xff0c;静态区&#xff08;全局、静态变量&#xff09;编译时分配&#xff1b;堆内存需手动分配/释放&#xff0c;核心函数有3个&#xff1a;malloc函数原型&#xff1a;void* malloc(siz…

使用GPU训练模型

本文代码详解参考&#xff1a; 模型训练基础流程-CSDN博客 目录 为什么要用GPU训练模型 什么是CUDA 利用GPU训练—方式一(.cuda()) 利用GPU训练—方式二 (.to()) Google Colaboratory 为什么要用GPU训练模型 用 GPU 训练模型的核心原因是GPU 的硬件架构和计算特性&#…

Matlab学习笔记:自定义函数

MATLAB 学习笔记&#xff1a;自定义函数自定义函数是MATLAB编程的基础&#xff0c;它允许你将重复代码封装成可重用的模块&#xff0c;提高代码的可读性和效率。本笔记将覆盖所有重点知识点&#xff0c;包括语法细节、输入输出处理、函数文件管理、错误处理等。我会用自然易懂的…

【数学建模 | Matlab】二维绘图 和 三维绘图

- 第 115 篇 - Date: 2025 - 07 - 23 Author: 郑龙浩&#xff08;仟墨&#xff09; 续写上一篇&#xff0c;如下文章&#xff1a; 【数学建模|Matlab】Matlab「基础知识」和「基础操作」 五 二维绘图 1 举例 % 二维平面绘图&#xff08;扩展至 -2π 到 2π&#xff09; x …

MCP (Model Context Protocol) 与 HTTP API:大模型时代的通信新范式

MCP (Model Context Protocol) 与 HTTP API&#xff1a;大模型时代的通信新范式在数字世界的两端&#xff0c;API 扮演着不可或缺的桥梁角色。我们熟知的 HTTP API 是 Web 互联互通的基石&#xff0c;驱动着无数应用程序的交互。然而&#xff0c;随着大型语言模型&#xff08;L…

CentOS 搭建 Docker 私有镜像仓库

CentOS 搭建 Docker 私有镜像仓库 搭建 Docker 私有镜像仓库能为团队提供高效、安全的镜像管理方案。下面将详细介绍每个步骤的操作细节&#xff0c;其中命令部分均用代码块展示。 一、环境准备 要搭建 Docker 私有镜像仓库&#xff0c;首先得确保服务器环境符合要求&#xff0…