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

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

根据黑马视频部署

1.docker 部署mysql

1.docker拉取mysql 镜像

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

正常拉取
docker pull mysql:tag

m1拉取 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 status
    on tb_item (status);

create index updated
    on 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)
    @Id
    private 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)
    @Transient
    private Integer stock;
    @TableField(exist = false)
    @Transient
    private 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> {


    @Override
    public void insert(Item item) {
        log.info("检查到数据有插入:{}", JSON.toJSONString(item));

    }

    @Override
    public void update(Item before, Item after) {
        log.info("检查到数据有修改->前:{}", JSON.toJSONString(before));
        log.info("检查到数据有修改->后:{}", JSON.toJSONString(after));

    }

    @Override
    public void delete(Item item) {

        log.info("检查到数据有删除:{}", JSON.toJSONString(item));


    }
}

验证

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

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

TARE-PLANNER学习记录

参考&#xff1a; CMU-TARE 探索算法官方社区问答汇总_cmu localplanner 部署-CSDN博客 Tare_planner学习笔记_tare planner-CSDN博客 Tare_planner 学习教程(二)_tareplanner-CSDN博客 &#xff08;学习笔记&#xff09;机器人自主导航从零开始第七步——TARE Planner自主…

JMeter基础篇

目录 总目录&#xff1a; 一、JMeter简介&#xff1a; -用途&#xff1a; -优缺点&#xff1a; 二、JMeter安装&#xff1a; 三、项目简介&#xff1a; -学生管理系统&#xff1a; -API接口清单&#xff1a; 查询&#xff1a; 新增&#xff1a; 更新&#xff1a; 删…

AWTK-HarmonyOS NEXT 发布

AWTK 全称为 Toolkit AnyWhere&#xff0c;是 ZLG 倾心打造的一套基于 C 语言开发的 GUI 框架。旨在为用户提供一个功能强大、高效可靠、简单易用、可轻松做出炫酷效果的 GUI 引擎&#xff0c;支持跨平台同步开发&#xff0c;一次编程&#xff0c;到处编译&#xff0c;跨平台使…

右旋圆极化散射后的stocks矢量 与T3矩阵的关系

T3矩阵如下 斯托克斯与T3的关系如下。 斯托克斯与T3均没有平均处理&#xff0c;即斯托克斯是完全极化波的&#xff08;一种琼斯矢量得到&#xff09;&#xff0c;T3是由一个散射矩阵得到&#xff0c;只有一个特征值。

理解 WordPress | 第二篇:结构化分析

WordPress 专题致力于从 0 到 1 搞懂、用熟这种可视化建站工具。 第一阶段主要是理解。 第二阶段开始实践个人博客、企业官网、独立站的建设。 如果感兴趣&#xff0c;点个关注吧&#xff0c;防止迷路。 WordPress 的内容和功能结构可以按照层级来划分&#xff0c;这种层次化的…

Python-利用os,tkinter库编写一个伪恶意程序文件(Pro版)

前言&#xff1a;上一期我们简单学习了如何编写一个多次弹窗警告用户的exe伪恶意文件。我们知道了把Python初始文件编译为exe文件后&#xff0c;程序在没有Python环境的情况下也能正常运行。我们上次编写的程序仅仅只是伪造系统正在执行关机命令前的倒计时的假象&#xff0c;实…

大语言模型训练的全过程:预训练、微调、RLHF

一、 大语言模型的训练过程 预训练阶段&#xff1a;PT&#xff08;Pre training&#xff09;。使用公开数据经过预训练得到预训练模型&#xff0c;预训练模型具备语言的初步理解&#xff1b;训练周期比较长&#xff1b;微调阶段1&#xff1a;SFT&#xff08;指令微调/有监督微调…

字节青训-小S的倒排索引

问题描述 小S正在帮助她的朋友们建立一个搜索引擎。为了让用户能够更快地找到他们感兴趣的帖子&#xff0c;小S决定使用倒排索引。倒排索引的工作原理是&#xff1a;每个单词都会关联一个帖子ID的列表&#xff0c;这些帖子包含该单词&#xff0c;且ID按从小到大的顺序排列。 例…

你需要了解的正则表达式相关知识

正则表达式&#xff08;Regular Expression&#xff0c;简称 regex 或 regexp&#xff09;是一种用于匹配字符串的模式。它广泛应用于文本查找、替换、验证等场景&#xff0c;尤其是在数据处理、网络爬虫、编程等领域非常有用。下面将详细介绍正则表达式的基本语法、常用元字符…

掌握分布式系统的38个核心概念

天天说分布式分布式&#xff0c;那么我们是否知道什么是分布式&#xff0c;分布式会遇到什么问题&#xff0c;有哪些理论支撑&#xff0c;有哪些经典的应对方案&#xff0c;业界是如何设计并保证分布式系统的高可用呢&#xff1f; 1. 架构设计 这一节将从一些经典的开源系统架…

【C++进阶】智能指针的使用和原理(2)

5. shared_ptr和weak_ptr 5.1 shared_ptr循环引用问题 shared_ptr大多数情况下管理资源⾮常合适&#xff0c;⽀持RAII&#xff0c;也⽀持拷贝。但是在循环引⽤的场景下会导致资源没得到释放内存泄漏&#xff0c;所以我们要认识循环引用的场景和资源没释放的原因&#xff0c;并…

【Uniapp】Uniapp Android原生插件开发指北

前言 在uniapp开发中当HBuilderX中提供的能力无法满足App功能需求&#xff0c;需要通过使用Andorid/iOS原生开发实现时&#xff0c;或者是第三方公司提供的是Android的库&#xff0c;这时候可使用App离线SDK开发原生插件来扩展原生能力。 插件类型有两种&#xff0c;Module模…

linux进程的状态之环境变量

我们在前面了解了进程的状态及相关概念 接下来我们接着上一篇进程的状态接着了解环境变量 进程的状态 文章目录 目录 文章目录 前言 二、环境变量 1、常见环境变量 2、查看环境变量 3、修改PATH 4、HOME 5、PATH ​编辑 6、和环境变量相关的命令 三、环境变量的组织…

揭秘集装箱箱号自动识别原理,箱号识别算法

集装箱箱号自动识别算法是一种高效且实用的软件工具。它利用相机、手机或其他摄像头捕获集装箱箱号图像&#xff0c;并通过深度学习的OCR&#xff08;光学字符识别&#xff09;识别技术对集装箱号码进行准确识别。要想进行集装箱箱号识别&#xff0c;需要以下几个基本步骤&…

AndroidLab:一个系统化的Android代理框架,包含操作环境和可复现的基准测试,支持大型语言模型和多模态模型。

2024-10-31&#xff0c;由清华大学和北京大学共同创建的AndroidLab数据集&#xff0c;为安卓自主代理的训练和评估提供了一个包含操作环境、行动空间和可复现基准的系统框架&#xff0c;这对于推动安卓代理技术的发展具有重要意义。 数据集地址&#xff1a;Android Instruct|A…

使用axois自定义基础路径,自动拼接前端服务器地址怎么办

请求路径&#xff1a; http://localhost:5173/http://pcapi-xiaotuxian-front-devtest.itheima.net/home/category/head 很明显多拼接了路径地址 查看基础路径文件发现&#xff1a; //axios基础封装 import axios from axiosconst httpInstance axios.create({baseURL: /h…

Densenet模型花卉图像分类

项目源码获取方式见文章末尾&#xff01; 600多个深度学习项目资料&#xff0c;快来加入社群一起学习吧。 《------往期经典推荐------》 项目名称 1.【基于CNN-RNN的影像报告生成】 2.【卫星图像道路检测DeepLabV3Plus模型】 3.【GAN模型实现二次元头像生成】 4.【CNN模型实现…

【Mysql NDB Cluster 集群(CentOS 7)安装笔记一】

Mysql NDB Cluster 集群(CentOS 7)安装笔记 NDB集群核心概念 NDBCLUSTER(也称为NDB)是一个内存存储引擎,提供高可用性和数据保存功能。 NDBCLUSTER存储引擎可以配置一系列故障转移和负载平衡选项,但从集群级别的存储引擎开始是最容易的。NDB集群的NDB存储引擎包含一整套…

Pattern program MPAT 详解

本文为VIP文章,主要介绍Pattern中元素与格式、常用指令、地址&数据产生指令等。 目录 一、pattern概述 二:Pattern构成元素 1、pattern构成元素:MPAT、END 2、pattern构成元素:pattern file name 3、pattern构成元素:SDEF 4、Pattern构成元素:REGISETR 5、Pa…

【通义灵码】AI编码新时代

目录 一.初识灵码&#xff0c;开启新篇 安装 登录 二.灵码相伴&#xff0c;探索新境 实时续写 自然生成 单元测试生成 解释代码 优化建议 快捷键 三.智慧流转&#xff0c;高效开发 驱动移植 LVGL框架 项目总结 四.融合创新&#xff0c;携手同行 一.初识灵码&#…