mac m1 docker本地部署canal 监听mysql的binglog日志

mac m1 docker本地部署canal监听mysql的binglog日志(虚拟机同理)

根据黑马视频部署

1.docker 部署mysql

1.docker拉取mysql 镜像

因为m1是arm架构.需要多加一条信息

正常拉取
docker pull mysql:tagm1拉取 5.7的版本. tag需要自己指定版本
docker pull --platform linux/x86_64 mysql:tag(5.7)

2.数据挂载宿主机

为什么要挂载到宿主机.

​ 1.容器被删除.那么容器内的数据.就全部被删除了.

​ 2.修改数据. 可以直接在宿主机上直接修改.不需要直接进入到容器内部去修改.

1.先再宿主机上建立需要挂载的路径

配置文件
mkdir /Users/lin/dev/docker/vol/mysqlvol/conf数据
mkdir /Users/lin/dev/docker/vol/mysqlvol/data

在这里插入图片描述

2.把修改配置文件放到/Users/lin/dev/docker/vol/mysqlvol/conf

my.cnf

实在不行就自己创建文件.把内容贴进去

[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
binlog_format = ROW

编辑配置文件

vi /Users/lin/dev/docker/vol/mysqlvol/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这个库(监听heima这个库)

3.启动容器

创建一个docker 网络.

#创建一个叫 heima 的网络
docker network create heima

让你创建的mysql容器 ,加入到这个网络

docker network connect heima mysql
docker run -d --name mysql-1 --network heima -p 3309:3306 \
-v /Users/lin/dev/docker/vol/mysqlvol/conf/my.cnf:/etc/mysql/conf.d/hmy.cnf \
-v /Users/lin/dev/docker/vol/mysqlvol/data:/var/lib/mysql \
-e MYSQL_ROOT_PASSWORD=root mysql:5.7

解读:

启动用

  • docker run -d 后台启动
  • –name mysql-1 取名叫mysql-1 (这个根据自己随意启动.不和其他容器同名就好)
  • –network heima指定用 heima 这个网络 .可以不加
  • -p 3309:3306 端口映射. 宿主机 3309映射到容器内部的3306
  • -v /Users/lin/dev/docker/vol/mysqlvol/conf/my.cnf:/etc/mysql/conf.d/hmy.cnf 配置文件映射,宿主机/Users/lin/dev/docker/vol/mysqlvol/conf/my.cnf 映射容器的/etc/mysql/conf.d/hmy.cnf ,宿主机的根据自己具体路径更变.容器路径不变
  • -v /Users/lin/dev/docker/vol/mysqlvol/data:/var/lib/mysql 和上面不同. data 是存储数据的
  • -e MYSQL_ROOT_PASSWORD=root 账号为root 密码也为root .可以自己设置
  • mysql:5.7 mysql的版本

4.配置cannal 账号

设置canna 账号密码,添加一个仅用于数据同步的账户,出于安全考虑,这里仅提供对heima这个库的操作权限。

create user canal@'%' IDENTIFIED by 'canal';
GRANT SELECT, REPLICATION SLAVE, REPLICATION CLIENT,SUPER ON *.* TO 'canal'@'%' identified by 'canal';
FLUSH PRIVILEGES;

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

docker restart mysql

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

show master status;

在这里插入图片描述

2.安装cannal

可参考官方文档部署

1.docker拉取cannal 镜像

#自动拉取最新的版本
docker pull cannal 

2.启动cannal 容器

docker run -p 11111:11111 --name canal \
-e canal.destinations=heima \
-e canal.instance.master.address=mysql-1: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

解读

-e canal.destinations=heima \ 集群名叫heima

-e canal.instance.master.address=mysql-1:3306 \ 因为加入了同一个网桥. 所以ip直接就是加入网桥的容器名.docker network connect heima mysql-1 ->容器的端口3306(不是宿主机的,踩过坑)

-e canal.instance.dbUsername=canal
-e canal.instance.dbPassword=canal \ 之前mysql创建了一个canal的账号密码

-e canal.instance.filter.regex=heima\…* \ 监听heima这个库下面的所有表
–network heima \ 用heima 这个网络.之前创建过1.3

-d canal/canal-server后台启动canal

mysql 数据解析关注的表,Perl正则表达式.
多个正则之间以逗号(,)分隔,转义符需要双斜杠(\)
常见例子:

  1. 所有表:.* or .\…
  2. canal schema下所有表: canal\…*
  3. canal下的以canal打头的表:canal\.canal.*
  4. canal schema下的一张表:canal.test1
  5. 多个规则组合使用然后以逗号隔开:canal\…*,mysql.test1,mysql.test2

3.查看cannal是否正常启动和是否监听mysql正常

1.查看canal是否正常启动

2.查看canal是否正常启动

  1. docker exec -it canal bash
    
  2. 查看canal服务是否启动

    1. cat /home/admin/canal-server/logs/canal/canal.log
      在这里插入图片描述

3.查看canal是否监听mysql

cat /home/admin/canal-server/logs/heima/heima.log 在这里插入图片描述

3.集成到项目中

依赖

        <!--集成canal 起步依赖--><dependency><groupId>top.javatool</groupId><artifactId>canal-spring-boot-starter</artifactId><version>1.2.1-RELEASE</version></dependency>

导入对应建表语句

create table tb_item
(id          bigint auto_increment comment '商品id'primary key,title       varchar(264)            not null comment '商品标题',name        varchar(128) default '' not null comment '商品名称',price       bigint                  not null comment '价格(分)',image       varchar(200)            null comment '商品图片',category    varchar(200)            null comment '类目名称',brand       varchar(100)            null comment '品牌名称',spec        varchar(200)            null comment '规格',status      int(1)       default 1  null comment '商品状态 1-正常,2-下架,3-删除',create_time datetime                null comment '创建时间',update_time datetime                null comment '更新时间'
)comment '商品表' row_format = COMPACT;create index statuson tb_item (status);create index updatedon tb_item (update_time);INSERT INTO heima.tb_item (id, title, name, price, image, category, brand, spec, status, create_time, update_time) VALUES (10001, 'RIMOWA 21寸托运箱拉杆箱 SALSA AIR系列果绿色 820.70.36.4', 'SALSA AIR', 16900, 'https://m.360buyimg.com/mobilecms/s720x720_jfs/t6934/364/1195375010/84676/e9f2c55f/597ece38N0ddcbc77.jpg!q70.jpg.webp', '拉杆箱', 'RIMOWA', '{"颜色": "红色", "尺码": "26寸"}', 1, '2019-05-01 00:00:00', '2019-05-01 00:00:00');
INSERT INTO heima.tb_item (id, title, name, price, image, category, brand, spec, status, create_time, update_time) VALUES (10002, '安佳脱脂牛奶 新西兰进口轻欣脱脂250ml*24整箱装*2', '脱脂牛奶', 68600, 'https://m.360buyimg.com/mobilecms/s720x720_jfs/t25552/261/1180671662/383855/33da8faa/5b8cf792Neda8550c.jpg!q70.jpg.webp', '牛奶', '安佳', '{"数量": 24}', 1, '2019-05-01 00:00:00', '2019-05-01 00:00:00');
INSERT INTO heima.tb_item (id, title, name, price, image, category, brand, spec, status, create_time, update_time) VALUES (10003, '唐狮新品牛仔裤女学生韩版宽松裤子 A款/中牛仔蓝(无绒款) 26', '韩版牛仔裤', 84600, 'https://m.360buyimg.com/mobilecms/s720x720_jfs/t26989/116/124520860/644643/173643ea/5b860864N6bfd95db.jpg!q70.jpg.webp', '牛仔裤', '唐狮', '{"颜色": "蓝色", "尺码": "26"}', 1, '2019-05-01 00:00:00', '2019-05-01 00:00:00');
INSERT INTO heima.tb_item (id, title, name, price, image, category, brand, spec, status, create_time, update_time) VALUES (10004, '森马(senma)休闲鞋女2019春季新款韩版系带板鞋学生百搭平底女鞋 黄色 36', '休闲板鞋', 10400, 'https://m.360buyimg.com/mobilecms/s720x720_jfs/t1/29976/8/2947/65074/5c22dad6Ef54f0505/0b5fe8c5d9bf6c47.jpg!q70.jpg.webp', '休闲鞋', '森马', '{"颜色": "白色", "尺码": "36"}', 1, '2019-05-01 00:00:00', '2019-05-01 00:00:00');

实体类

package com.lin.user.entry;import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;import javax.persistence.Column;
import javax.persistence.Id;
import javax.persistence.Transient;
import java.util.Date;@Data
@TableName("tb_item")
public class Item {@TableId(type = IdType.AUTO)@Idprivate Long id;//商品id@Column(name = "name")private String name;//商品名称private String title;//商品标题private Long price;//价格(分)private String image;//商品图片private String category;//分类名称private String brand;//品牌名称private String spec;//规格private Integer status;//商品状态 1-正常,2-下架private Date createTime;//创建时间private Date updateTime;//更新时间@TableField(exist = false)@Transientprivate Integer stock;@TableField(exist = false)@Transientprivate Integer sold;
}

监听类

package com.lin.user.config;import com.alibaba.fastjson.JSON;
import com.lin.user.entry.Item;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;
import top.javatool.canal.client.annotation.CanalTable;
import top.javatool.canal.client.handler.EntryHandler;
@Slf4j
@CanalTable("tb_item")
@Component
public class ItemHandler implements EntryHandler<Item> {@Overridepublic void insert(Item item) {log.info("检查到数据有插入:{}", JSON.toJSONString(item));}@Overridepublic void update(Item before, Item after) {log.info("检查到数据有修改->前:{}", JSON.toJSONString(before));log.info("检查到数据有修改->后:{}", JSON.toJSONString(after));}@Overridepublic void delete(Item item) {log.info("检查到数据有删除:{}", JSON.toJSONString(item));}
}

验证

在数据库中增删改,控制要可以看到记录.

在这里插入图片描述

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

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

相关文章

复现LLM:带你从零训练tokenizer

1. 引言 分词器是每个大语言模型必不可少的组件&#xff0c;但每个大语言模型的分词器几乎都不相同。如果要训练自己的分词器&#xff0c;可以使用huggingface的tokenizers框架&#xff0c;tokenizers包含以下主要组件&#xff1a; Tokenizer: 分词器的核心组件&#xff0c;定…

Nginx防盗链配置

1. 什么是盗链? 盗链是指服务提供商自己不提供服务的内容&#xff0c;通过技术手段绕过其它有利益的最终用户界面&#xff08;如广告&#xff09;&#xff0c;直接在自己的网站上向最终用户提供其它服务提供商的服务内容&#xff0c;骗取最终用户的浏览和点击率。受益者不提供…

DAY53|| 42. 接雨水|84.柱状图中最大的矩形

42. 接雨水(超经典款&#xff09; 42. 接雨水 - 力扣&#xff08;LeetCode&#xff09; 给定 n 个非负整数表示每个宽度为 1 的柱子的高度图&#xff0c;计算按此排列的柱子&#xff0c;下雨之后能接多少雨水。 示例 1&#xff1a; 输入&#xff1a;height [0,1,0,2,1,0,1,3,2…

字节跳动(抖音)软件测试月薪23K岗、技术二面面试题最新出炉

测试人员在测试中的任务是什么&#xff1f; ① 尽可能早地找出系统中的bug&#xff1b; ② 避免软件开发过程中缺陷的出现&#xff1b; ③ 协助开发定位bug.以及后续bug跟踪 ④ 一切以用户的需求为标准&#xff0c;确保软件的质量 HTTP与HTTPS协议的区别&#xff1f; …

新160个crackme - 091-DOSKEY-CRACKME2

运行分析 需破解Name和Password PE分析 upx壳&#xff0c;32位 手动脱壳 x32dbg打开程序&#xff0c;按一下F8&#xff0c;根据ESP定律&#xff0c;在此处下断点按一下F9&#xff0c;两下F8&#xff0c;来到OEP处00401000打开Scylla&#xff0c;点击转储保存文件点击IAT自动搜索…

Python(包和模块)

包 定义 包是将模块以文件夹的组织形式进行分组管理的方法&#xff0c;以便更好地组织和管理相关模块。 包是一个包含一个特殊的__init__.py文件的目录&#xff0c;这个文件可以为空&#xff0c;但必须存在&#xff0c;以标识目录为Python包。 包可以包含子包&#xff08;子…

ClickHouse安装

一&#xff0c;ClickHouse介绍 ClickHouse 是一个开源的列式数据库管理系统&#xff08;Column-Oriented DBMS&#xff09;&#xff0c;由俄罗斯的 Yandex 公司开发。它最初是为 Yandex 的 Metrica 分析服务设计的&#xff0c;用于处理大规模的数据分析任务。ClickHouse 能够提…

网络设置:静态IP与动态IP,何去何从?

在配置网络设备时&#xff0c;一个基础而重要的选择便是决定使用静态IP地址还是动态IP地址。这一决策直接影响到网络的连接性、管理便捷性以及安全性。静态IP与动态IP各有其独特的优势与适用场景&#xff0c;选择何种方式&#xff0c;需根据实际需求与网络环境来权衡。本文旨在…

po、dto、vo的使用场景

现在项目中有两类模型类&#xff1a;DTO数据传输对象、PO持久化对象&#xff0c;DTO用于接口层向业务层之间传输数据&#xff0c;PO用于业务层与持久层之间传输数据&#xff0c;有些项目还会设置VO对象&#xff0c;VO对象用在前端与接口层之间传输数据&#xff0c;如下图&#…

不用买PSP,画质甚至更好,这款免费神器让你玩遍经典游戏

作为掌机游戏爱好者的福音&#xff0c;PPSSPP模拟器为玩家带来了前所未有的PSP游戏体验&#xff0c;彻底改变了掌机游戏的体验方式。这款精湛的软件不仅完美复刻了PSP主机的游戏体验&#xff0c;更通过先进的模拟技术&#xff0c;将经典游戏提升到了全新的高度。对于那些珍藏PS…

如何新建CANoe工程

本文将从启动CANoe软件开始&#xff0c;一步步引导您完成新工程的创建与基本配置&#xff0c;确保您的仿真测试工作能够顺利进行。 启动CANoe软件&#xff1a;打开CANoe软件&#xff0c;进入主界面。 新建工程&#xff1a;点击菜单栏的 File --> New --> CAN FD&#x…

Facebook群控策略详解

Facebook群控早在前几年就很火爆了&#xff0c;对于做Facebook营销或者电商的跨境选手来说&#xff0c;这是个不错的提高效率扩大增长的办法。具体来说&#xff0c;Facebook群控是一种通过同时管理多个Facebook账户进行自动化推广活动的方法&#xff0c;它可以实现自动发布帖子…

通讯概念-全双工、串行、同步等

1.单工&#xff0c;半双工&#xff0c;双工概念 2.串行和并行&#xff1a; 并行多根数据总线同时传输&#xff0c;需要考虑波特率情况&#xff0c;串行波特率可以很大&#xff0c;不需要考虑传输总线限制 3.同步和异步概念&#xff1a; 同步需要时钟同步&#xff0c;发送和接收…

经济下行,电商人效通过小程序快速实现多端引流

中国经济下行周期&#xff0c;消费者趋向于理性消费&#xff0c;更注重产品的实用性和性价比。中端商品的需求减少&#xff0c;低端消费人群的消费能力下降&#xff0c;导致“消费降级”现象明显。 许多线下实体店以及传统电商&#xff0c;仅仅依靠现在的模式&#xff0c;很难…

Fish Agent:集成 ASR 和 TTS 的端到端语音处理模型,支持多语言转换

❤️ 如果你也关注大模型与 AI 的发展现状&#xff0c;且对大模型应用开发非常感兴趣&#xff0c;我会快速跟你分享最新的感兴趣的 AI 应用和热点信息&#xff0c;也会不定期分享自己的想法和开源实例&#xff0c;欢迎关注我哦&#xff01; &#x1f966; 微信公众号&#xff…

软件测试工程师面试整理 —— 编程与自动化!

在软件测试领域&#xff0c;编程与自动化是提升测试效率、覆盖率和可靠性的关键因素。掌握编程技术和自动化测试框架&#xff0c;能够帮助测试人员有效地执行大量重复性测试任务&#xff0c;并迅速反馈软件的质量状况。以下是编程与自动化在测试中的主要应用及相关技术介绍&…

04字符串算法/代码随想录

四、字符串 反转字符串 力扣344 遇到数组双指针真是太好用了&#xff0c;左右指针不断逼近即可&#xff0c;代码也很简单 class Solution {public void reverseString(char[] s) {int fast s.length - 1;int slow 0;while (slow < fast) {char temp s[fast];s[fast] s[…

Unreal5从入门到精通之如何使用C++实现一个剧情系统

前言 说到剧情系统,大家可能会说,UE的关卡序列Sequencer,做剧情不是很方便吗?没错,Sequencer确实方便,而且它可以让你为场景中的角色,物体等创建精确的动画,并使用关键帧来控制他们的运动和状态变化。 它还可以做相机的移动,剪辑,音效,特效等故事情节,相机特效,多…

袋鼠云产品功能更新报告12期|让数据资产管理更高效

本期&#xff0c;我们更新和优化了数据资产平台相关功能&#xff0c;为您提供更高效的产品能力。以下为第12期袋鼠云产品功能更新报告&#xff0c;请继续阅读。 一、【元数据】重点更新 &#xff5c;01 元数据管理优化&#xff0c;支持配置表生命周期 之前系统中缺少一个可以…

将多个commit合并成一个commit并提交

0 Preface/foreword 1 压缩多个commit方法 1.1 git merge --squash 主分支&#xff1a;main 开发分支&#xff1a;test 当前在test分支提交了8个commits&#xff0c;功能已经开发完成&#xff0c;需要将test分支合并到main分支&#xff0c;但是不想在合并时候&#xff0c;看…