docker安装部署Canal-监听mysql

news2024/9/23 1:33:23

文章目录

  • 安装和配置Canal
  • 1.开启MySQL主从
    • 1.1.开启binlog
    • 1.2.设置用户权限
  • 2.安装Canal
    • 2.1.创建网络
    • 2.3.安装Canal
  • 遇到的问题

安装和配置Canal

下面我们就开启mysql的主从同步机制,让Canal来模拟salve

1.开启MySQL主从

Canal是基于MySQL的主从同步功能,因此必须先开启MySQL的主从功能才可以。

这里以之前用Docker运行的mysql为例:

1.1.开启binlog

打开mysql容器挂载的日志文件,我的在/tmp/mysql/conf目录:

在这里插入图片描述

修改文件:

vi /tmp/mysql/conf/my.cnf

添加内容:

log-bin=/var/lib/mysql/mysql-bin
binlog-do-db=heima

配置解读:

  • log-bin=/var/lib/mysql/mysql-bin:设置binary log文件的存放地址和文件名,叫做mysql-bin
  • binlog-do-db=heima:指定对哪个database记录binary log events,这里记录heima这个库

最终效果:

[mysqld]
skip-name-resolve
character_set_server=utf8
datadir=/var/lib/mysql
server-id=1000
log-bin=/var/lib/mysql/mysql-bin
binlog-do-db=heima

1.2.设置用户权限

接下来添加一个仅用于数据同步的账户,出于安全考虑,这里仅提供对heima这个库的操作权限。

CREATE USER canal@'%' IDENTIFIED BY 'canal';
GRANT SELECT, REPLICATION SLAVE, REPLICATION CLIENT,SUPER ON *.* TO 'canal'@'%';
FLUSH PRIVILEGES;

运行完之后,我们可以查看用户,是不是真的添加进去了
在这里插入图片描述
或者使用指令查看用户

SELECT HOST,USER,PLUGIN FROM mysql.user ;

在这里插入图片描述

重启mysql容器即可

docker restart mysql

测试设置是否成功:在mysql控制台,或者Navicat中,输入命令:

show master status;

在这里插入图片描述

2.安装Canal

2.1.创建网络

我们需要创建一个网络,将MySQL、Canal、MQ放到同一个Docker网络中:

docker network create heima

让mysql加入这个网络:

docker network connect heima mysql

2.3.安装Canal

课前资料中提供了canal的镜像压缩包:

在这里插入图片描述

大家可以上传到虚拟机,然后通过命令导入:

docker load -i canal.tar

或者可以使用docker在线拉取:

docker pull canal/canal-server:v1.1.5

然后运行命令创建Canal容器:

docker run -p 11111:11111 --name canal \
-e canal.destinations=heima \
-e canal.instance.master.address=mysql:3306  \
-e canal.instance.dbUsername=canal  \
-e canal.instance.dbPassword=canal  \
-e canal.instance.connectionCharset=UTF-8 \
-e canal.instance.tsdb.enable=true \
-e canal.instance.gtidon=false  \
-e canal.instance.filter.regex=heima\\..* \
--network heima \
-d canal/canal-server:v1.1.5

说明:

  • -p 11111:11111:这是canal的默认监听端口
  • -e canal.destinations=heima : 集群,canal也可以搭建集群
  • -e canal.instance.master.address=mysql:3306:数据库地址和端口,如果不知道mysql容器地址,可以通过docker inspect 容器id来查看,注意端口,默认3306,我以为我的docker容器把端口改成3307了,这里要修改,但测试后发现,你改的是对外映射的端口,现在mysql和canal都在heima这个网络内,内部就是找的3306端口,所以不用做修改。
  • -e canal.instance.dbUsername=canal:数据库用户名
  • -e canal.instance.dbPassword=canal :数据库密码
  • -e canal.instance.filter.regex=:要监听的表名称

表名称监听支持的语法:

mysql 数据解析关注的表,Perl正则表达式.
多个正则之间以逗号(,)分隔,转义符需要双斜杠(\\) 
常见例子:
1.  所有表:.*   or  .*\\..*
2.  canal schema下所有表: canal\\..*
3.  canal下的以canal打头的表:canal\\.canal.*
4.  canal schema下的一张表:canal.test1
5.  多个规则组合使用然后以逗号隔开:canal\\..*,mysql.test1,mysql.test2 

canal启动之后,我们可以查看

docker logs -f canal

确定容器启动成功了
在这里插入图片描述
那如何确定canal和mysql连上了呢?
我们先进入canal容器

docker exec -it canal bash

然后查看canal运行日志

tail -f canal-server/logs/canal/canal.log

在这里插入图片描述
可以看出运行正常
还可以查看另一个运行日志:

tail -f canal-server/logs/heima/heima.log

在这里插入图片描述
这就是正常连接了

遇到的问题

如果在这个地方遇到报错
在这里插入图片描述

java.io.IOException: caching_sha2_password Auth failed
        at com.alibaba.otter.canal.parse.driver.mysql.MysqlConnector.negotiate(MysqlConnector.java:260) ~[canal.parse.driver-1.1.5.jar:na]
        at com.alibaba.otter.canal.parse.driver.mysql.MysqlConnector.connect(MysqlConnector.java:82) ~[canal.parse.driver-1.1.5.jar:na]
        ... 4 common frames omitted
2021-11-20 16:43:40.852 [destination = example , address = /127.0.0.1:3306 , EventParser] ERROR com.alibaba.otter.canal.common.alarm.LogAlarmHandler - destination:example[com.alibaba.otter.canal.parse.exception.CanalParseException: java.io.IOException: connect /127.0.0.1:3306 failure

原因:
自MySQL 8.0.3开始,身份验证插件默认使用caching_sha2_password
也就是密码的验证方式变化了,我们前面创建的用户使用的密码验证方式不行。
恰好笔者这里就是使用了8.0.24的mysql,刚好遇到了这个问题,就在这里解决一下。
解决方案:
修改canal用户对应的身份验证插件为mysql_native_password

select host,user,plugin from mysql.user ;
ALTER USER 'canal'@'%' IDENTIFIED WITH mysql_native_password BY 'password';

在sqlyog中执行就行了,把其中的password 改成自己的密码哦,我们这里设置的密码是canal,所以我就要写canal。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

cheat:在终端中,在线查询Linux命令

cheat.sh 是一个命令查询网站,在终端中也能够使用。特点是返回简单易懂的代码示例和注解,可以帮助用户快速了解命令的使用方法。 ​​ 1.语法 curl cheat.sh/command2.示例 查询 ls 命令的用法 curl cheat.sh/ls查询 chmod 命令的用法 curl cheat.…

sqlite在Windows环境下安装、使用、node.js连接

sqlite在Windows环境下安装、使用、node.js连接 前言:2024年9月10日 1. 下载安装 sqlite 的安装非常简单 去官网下载对应压缩包 将两个压缩包解压,并将解压出来的文件放在同一目录下 将上面的目录路径配置到环境变量 path 中 2. 执行 sql sqlite …

Day7 | Java框架 | SpringMVC

Day7 | Java框架 | SpringMVC SpringMVC简介SpringMVC 概述入门案例入门案例工作流程分析Controller 加载控制与业务bean加载控制(SpringMVC & Spring)PostMan 请求与响应请求映射路径请求方式(不同类型的请求参数)&#xff1…

基于Linux文件编程实现处理Excel表格的数据

目录 前言 整体的代码框架 如何读取数据文件的数据 read_line 如何处理读取到的数据 process_data 运行结果 总结 前言 本文是基于Linux文件编程的一个小实验,用文件IO来读取Excel表格的数据,处理后写入另一个文件,本文只是对文件IO的…

一些硬件知识(二十二)

二极管(Diode)伏安特性、技术参数和项目中的应用 在正向偏置下,二极管呈现出良好的导电性能,可以允许电流通过;而在反向偏置下,二极管具有很高的阻断能力,几乎不允许电流通过。这是由构成二极管…

CC工具箱使用指南:【字段计算器学习版】

一、简介 这个工具算是Pro自带的字段计算器的扩展版。 工具预制了几种计算模式,通过可视化操作,帮你自动生成代码。 生成代码后,可以直接运行,也可以将代码复制到Pro自带的字段计算器中进行计算。 总之,这是给不会…

【CanMV K230 AI视觉】 人体检测

【CanMV K230 AI视觉】 人体检测 人体检测 动态测试效果可以去下面网站自己看。 B站视频链接:已做成合集 抖音链接:已做成合集 人体检测 人体检测是判断摄像头画面中有无出现人体,常用于人体数量检测,人流量监控以及安防监控等。…

研1日记9

1.理解conv1d和conv2d a. 1和2处理的数据不同,1维数据和图像 b. 例如x输入形状为(32,19,512)时,卷积公式是针对512的,而19应该变换为参数中指定的输出通道。 2.“SE块”(Squeeze-and-Excitation Block)它可以帮助模…

STM32-HAL库开发快速入门

注:本文主要记录一下STM32CubeMX软件的使用流程,记录内容以STM32外设(中断、I2C、USART、SPI等配置)在STM32CubeMX中的设置为主,对驱动代码编写不做记录,所以阅读本文最好有标准库开发经验。除第2节外,使用的都是韦东山…

鼠标hover过渡动画(已验证)

基于css中的grid方案实现的一个hover小动画&#xff0c;以下代码基于vue2&#xff0c;其他的可以直接复制html和css就可以&#xff0c;注意&#xff1a;以下代码在部分浏览器不兼容 注&#xff1a;部分代码来自我接入的GPT4o/Claude网站 <template><div class"h…

API安全测试 | Postman + BurpSuite 配置证书代理

img 在对使用基于证书的身份验证的 API进行安全你测试时&#xff0c;需要将证书添加到我们的工具&#xff08;如 Postman 和 Burp Suite&#xff09;中。这样我们才能够在客户端和服务器之间代理请求进行分析&#xff0c;以便评估 API 的安全性。 在本文我们将介绍将证书和私…

软硬链接 动静态库(深入地址空间)

文章目录 前言&#xff1a;软硬链接&#xff1a;动态库和静态库&#xff1a;如何制作静态库&#xff1f;如何制作动态库&#xff1f;动态库 VS 静态库 文本写入 && 二进制写入&#x1f680;动态库加载与可执行程序与地址空间的关系&#xff1a;&#x1f9db;‍♀️可执…

el-input设置type=‘number‘和v-model.number的区别

el-input设置typenumber’与设置.number修饰符的区别 1. 设置type‘number’ 使用el-input时想收集数字类型的数据&#xff0c;我们首先会想到typenumber&#xff0c;设置完type为number时会限制我们输入的内容只能为数字&#xff0c;不能为字符/汉字等非数字类型的数值&…

数据结构(7.2_3)——分块查找

分块查找的算法思想 分块查找&#xff0c;又称索引顺序查找&#xff0c;算法过程如下&#xff1a; 在索引表中确定待查记录所属的分块(可顺序、可折半)在块内顺序查找 "索引表"中保存每个分块的最大关键字和分块存储区间 特点&#xff1a;块内无序&#xff0c;块…

新的 PIXHELL 攻击从隔离系统中窃取机密

在一篇新发表的论文中&#xff0c;本古里安大学的 Mordechai Guri 博士揭露了“PIXHELL”攻击。 这是一种从隔离、音频隔离系统中窃取敏感数据的新方法。 此次攻击允许恶意攻击者通过 LCD 屏幕产生的声学信号泄露信息&#xff0c;利用线圈噪音和由操纵的像素模式引起的电容器…

【安全系列--处理挖矿】

现象&#xff1a;我们云上waf提示有台服务器存在挖矿行为 解决思路&#xff1a; 1、查看服务器的进程情况 top发现服务的CPU使用率非常高 2、使用性能分析工具perf查看占用的cpu进程 sudo apt install linux-tools-common发现一些kernel进程存在异常 3、使用find查一下这…

在广袤的数据通信旷野,“伙伴+华为”体系点亮星云

在浩浩荡荡的智能化变革中&#xff0c;从用户层面看&#xff0c;来自地市区县的各个行业与企业是真正的主体&#xff0c;以他们为主体的商业市场&#xff0c;提供了智能化进程中最为关键的广度。 而从技术角度看&#xff0c;数据通信是千行万业都需要的基本数字化能力。数据通信…

[Web安全 网络安全]-文件包含漏洞

文章目录&#xff1a; 一&#xff1a;前言 1.什么是文件包含漏洞 2.文件包含漏洞的成因 3.文件包含漏洞的分类 4.文件包含漏洞的防御策略 5.文件包含函数&#xff08;触发点Sink&#xff09; 6.环境 6.1 靶场 6.2 其他工具 二&#xff1a;文件包含LFI labs靶场实验…

组播 2024 9 11

PIM&#xff08;Protocol Independent Multicast&#xff09;是一种常用的组播路由协议&#xff0c;其独立于底层的单播路由协议&#xff0c;能够在多种网络环境中有效地实现多播路由功能。PIM主要有两种模式&#xff1a;PIM Sparse Mode (PIM-SM) 和 PIM Dense Mode (PIM-DM)&…

sqli-labs靶场自动化利用工具——第1关

文章目录 概要整体架构流程技术细节执行效果小结 概要 Sqli-Labs靶场对于网安专业的学生或正在学习网安的朋友来说并不陌生&#xff0c;或者说已经很熟悉。那有没有朋友想过自己开发一个测试脚本能实现自动化化测试sqli-labs呢&#xff1f;可能有些人会说不是有sqlmap&#xf…