docker安装canal1.1.5监控mysql的binlog日志并配置rocketmq进行数据同步到elasticsearch(超级大干货)

2023-05-16

直接来,不逼逼(canal官网说的很明白,伪从节点请求dump。。。然后这个那个的,自行查阅资料)

1、直接拉取canal镜像

docker pull canal/canal-server:v1.1.5

2、创建canal文件夹,用来存在容器挂载到宿主机的目录或文件(注:本实例在/home下操作)

mkdir canal && cd $_ && mkdir conf

3、先启动canal容器,把需要挂载的目录都copy出来,本例子只挂载了conf和logs目录(自己还想挂载啥东西就进去容器里面看看呗,docker exec -it canal /bin/bash)

// 启动一个临时容器
docker run --name=canal -p 11111:11111 -d canal/canal-server:v1.1.5
// copy容器内部目录到指定目录中(本实例在/home/canal下操作,注意修改)
docker cp canal:/home/admin/canal-server/conf/canal.properties /home/canal/conf/
docker cp canal:/home/admin/canal-server/conf/example/instance.properties /home/canal/conf/
docker cp canal:/home/admin/canal-server/logs /home/canal/logs

  4、第三步完事后直接把临时的canal容器删除了呗(先停,再删)

docker stop canal
docker rm canal

 5、开启启动一个正式的容器咯(-v:挂载的目录需要注意修改)

docker run --name=canal -p 11111:11111 -v /home/canal/conf/canal.properties:/home/admin/canal-server/conf/canal.properties -v /home/canal/conf/instance.properties:/home/admin/canal-server/conf/example/instance.properties -v /home/canal/logs:/home/admin/canal-server/logs -id canal/canal-server:v1.1.5

6、第五步完成后意义不大,我们要开始配置我们需要监听的mysql的binlog啦,监听前需要对我们的mysql有几个前提条件,需要开启binlog和binlog格式并设置mysql的server_id

# my.cnf里配置
log-bin=mysql-bin
binlog-format=ROW
server_id=1

# 查看bin-log是否开启 on: 开启 off: 关闭

show variables like 'log_bin';

# 最后可以选择是否需要创建一个新的mysql用户进行配置canal(只拥有读取权限)

create user canal identified by 'canal';

grant select,replication slave, replication client on *.* to 'canal'@'%';

flush privileges;

# 注意如果是mysql8以上创建的用户连接时可能会出现caching_sha2_password错误,可以自行查询资料解决修改新创建的用户密码校验规则(plugin:mysql_native_password)即可,也可执行:ALTER USER 'canal'@'%' IDENTIFIED WITH mysql_native_password BY 'canal';(如果还是不行再自己查阅资料吧,不多说,继续我们的流程)

7、canal配置连接mysql ,进入到挂载的conf目录中去,然后编辑配置文件instance.properties

cd /home/canal/conf
vi instance.properties

# 注意需要把该行前面的井号#去掉,并修改值为唯一性(不与mysql的主从设置的值为一,单机可忽略,仅需考虑主的值不一样即可)

canal.instance.mysql.slaveId=200

# 数据库连接与账号密码

canal.instance.master.address=127.0.0.1:3306

canal.instance.dbUsername=canal
canal.instance.dbPassword=canal

修改为自己的数据库连接信息即可

注意:本例子为监听所有库表资源更新状态,如需指定可以配置,(后面也会提这个问题)

canal.instance.filter.regex=.*\\..*(库名.表民)多个可以用逗号隔开

黑名单不多说了,自己去看看资料吧

canal.instance.filter.black.regex=

 8、直接重启一下canal看看日志是否连接成功(进入/home/canal/logs/example下查看日志)

9、开始配置rocketmq啦(安装rocketmq本文不多说)

cd /home/canal/conf
vi canal.properties

主要修改以下数据

canal.serverMode = rocketMQ

rocketmq.producer.group = canal_group
rocketmq.enable.message.trace = false
rocketmq.customized.trace.topic = canal_topic
rocketmq.namespace =
rocketmq.namesrv.addr = xxx.xxx.xxx.xxx:9876
rocketmq.retry.times.when.send.failed = 0
rocketmq.vip.channel.enabled = false
rocketmq.tag =

vi instance.properties

 主要修改以下数据

canal.mq.topic=canal_topic

好啦!!!可以重启一下canal容器啦,重启完毕后,我就随便去数据库修改一条记录,mq就收到消息啦,以下截图仔细查阅 

 

 

注意:mq虽然有消息啦,但是有个问题,就是无论任何库任何表的数据发生修改都会往同一个topic发送消息,那这样就会导致后端同一个消费者然后再去根据表名分发业务等等问题,更要考虑消息阻塞等问题,所以还是需要把topic改为动态的啦!!!

修改内容如下:

        把instance.properties文件里的canal.mq.topic=canal_topic注释掉,并把#canal.mq.dynamicTopic=mytest1.user,mytest2\\..*,.*\\..*的注释删除掉,并修改为canal.mq.dynamicTopic=.*\\..*,好啦,就是这么简单,还要很多匹配规则,自行去查阅资料吧,这样一来,我们的topic的生成规格是(库名_表名,例如产品库的产品表的topic为:product_db_product_info)

 再注意:由于现在我们所有表的的增删改操作都会往mq发送消息,那这样就更不符合生产啦,简单来说就是瞎几把乱搞?直接就改为指定监听哪些库的哪些表

修改内容如下:

        把instance.properties文件里的canal.instance.filter.regex=.*\\..*改为canal.instance.filter.regex=库名.表名(多个直接用逗号分割),还要其他匹配规格,自行查阅哟,这样就可以啦

 完事后,再来测试一发,看截图

 

 10、以上步骤完成后,就可以编写我们的mq消费者啦(例子使用的是rocketmq和java语言哟,后续补上哟)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

docker安装canal1.1.5监控mysql的binlog日志并配置rocketmq进行数据同步到elasticsearch(超级大干货) 的相关文章

  • 如何使用 pipelinev 为 python 应用程序制作轻量级 docker 镜像

    我可以通过以下简单的操作为我的 python 应用程序生成工作图像Dockerfile FROM python 3 7 WORKDIR myapp COPY Pipfile RUN pip install pipenv RUN pipenv
  • 被拒绝:将映像推送到 gitlab 注册表时,请求的资源访问被拒绝

    我正在尝试将图像推送到 gitlab 注册表 我已经做过很多次了 所以我想知道为什么会出现这个错误 我使用最新标签构建图像 Successfully tagged registry gitlab com mycompany rgpd api
  • PHP实现的机票预订系统

    如何防止预订系统中的座位被重复预订 我正在用 PHP 和 MYSQL 制作一个航空旅行预订系统模型作为一个项目 我有一个小问题 仅在付款后 门票和座位详细信息才会永久存储在此处 座位号在付款前分配 假设人 1 预订了飞机上的座位 x 并支付
  • mysql 在 sum() 函数上使用 concat,例如 concat(sum(col1),"%")

    我正在尝试合并多个查询 但其中一个查询使用 sum 当我尝试在此列上应用 concat 时 我得到不需要的 blob 结果 我如何在聚合列上应用 concat 和 union 我期待这个结果 SELECT row 1 col1 UNION
  • 从所有表中选择

    我的数据库中有很多表都具有相同的结构 我想从所有表中进行选择 而不必像这样列出所有表 SELECT name FROM table1 table2 table3 table4 我尝试过 但这不起作用 SELECT name FROM 有没有
  • 如何禁用docker容器的root访问权限?

    我们有离岸开发人员 他们希望在本地运行我们的服务器 但出于安全原因 我们不想向他们提供服务器代码 所以一个解决方案是他们运行一个 Docker 容器 这是我们服务器的独立版本 所以他们这边没有复杂的设置 问题在于 始终可以以 root 身份
  • MYSQL:SQL查询获取自增字段的值

    我有一张桌子 主键是id及其自动递增 现在 当我插入新记录时 我需要获取更新记录的 id 我怎样才能做到这一点 如果我使用查询 select max id from table name 执行后我可以获得id 但我能确定它是刚刚插入的记录的
  • Mysql获取特定表的最后一个id

    我必须从特定的插入表中获取最后的插入 ID 可以说我有这个代码 INSERT INTO blahblah test1 test 2 VALUES test1 test2 INSERT INTO blahblah2 test1 test 2
  • CakePHP - 获取上次运行的查询

    我想获取 CakePHP 运行的最后一个查询 我无法在 core php 中打开调试 也无法在本地运行代码 我需要一种方法来获取最后一个 sql 查询并将其记录到错误日志中而不影响实时站点 该查询失败但正在运行 像这样的事情会很棒 this
  • #1115 - 未知字符集:'utf8mb4'

    我的电脑上运行着一个本地网络服务器 用于本地开发 我现在正处于导出数据库并导入到我的托管 VPS 的阶段 导出然后导入时出现以下错误 1115 未知字符集 utf8mb4 有人能指出我正确的方向吗 该错误明确表明您没有utf8mb4您的阶段
  • 为什么我的浮点数大于 1 时在 MYSQL 中存储为 .9999?

    我将进程时间作为 float 4 4 存储在 MySQL 数据库中 start time microtime TRUE things happen in my script end time microtime TRUE process t
  • mysql LIKE 查询时间太长

    SQL SELECT COUNT usr id as total results FROM users as usr LEFT JOIN profile as prof ON prof uid usr uid WHERE usr usern
  • 如何修改 Amazon RDS 实例的 my.ini 参数

    在启动 MySQL 5 5 RDS 实例时 Amazon 使用默认参数组来配置 my ini 参数 但控制台不允许我修改它们 我怎样才能实现这个目标 例如默认将存储引擎设置为MyISAM或设置字符集 此处记录了这一点 http aws am
  • 数据库级别的别名列名 [MySQL]

    别名 可能是错误的词 因为它是在将列 表名称作为查询中的其他名称引用的上下文中使用的 我感兴趣的是是否有一种方法可以在数据库中为列指定两个名称 如果我要打印这样的表格 它看起来会是这样的 mysql gt SELECT FROM User
  • Laravel Schema Builder 改变存储引擎

    我正在尝试更改表并将其存储引擎更改为InnoDb 当我跑步时php artisan migrate它完成且没有错误 然而 当我检查 Sequel Pro 中的存储引擎时 没有任何变化 public function up Schema ta
  • 对于相同的查询,MySQL Workbench 比 Python 快得多

    MySQL Workbench 中的以下查询需要 0 156 秒才能完成 SELECT date time minute price id FROM minute prices WHERE contract id 673 AND TIMES
  • 如何将“mysql source”命令与 mysql 变量一起使用?

    我需要从 mysql shell 执行一个基于如下条件的 SQL 文件 mysql gt 源 var 其中 var 包含文件名 这不可能 source是MySQL客户端程序在本地识别并执行的命令 变量存在于服务器上 因此客户端不知道什么 v
  • 上下文更改后 Docker“协议不可用”

    我改变了我的码头环境 现在 当我运行任何 docker 命令时 我得到protocol not available 如果无法运行任何 docker 命令 如何更改回上下文 基本上我做了以下事情 I ran docker context li
  • mysql 数据库正在复制,但在主服务器上创建的用户未在从服务器上复制

    在主从复制中 我们使用 mysql DB 在从服务器上复制少量数据库 我在主服务器上创建了一个用户 不幸的是它没有在从服务器上复制 Replicate Do DB app1 app2 mysql 用户创建命令 GRANT SELECT on
  • 如何使用 dql 从数据表中获取唯一值?

    我有一个表 其中有一列存储了各种值 我想使用 dql 从该表中检索唯一值 Doctrine Query create gt select rec school gt from Records rec gt where rec city ci

随机推荐

  • VINS初始化

    VINS初始化 VINS初始化之外参在线标定 前面主要分析了外参标定出来旋转矩阵 xff0c 接下来接着分析初始化 if solver flag 61 61 INITIAL if frame count 61 61 WINDOW SIZE
  • ROS中关于两个话题时间同步遇到的问题 message_filters

    ROS中关于两个话题时间同步遇到的问题 message filters 参考链接 CMakeFiles imu data dir src imu data cpp o xff1a 在函数 message filters Synchroniz
  • ROS之多传感器融合算法实现

    ROS之多传感器融合算法实现 文章目录 1 motivation2 method2 1 订阅ROS的多个话题并对数据进行处理2 2 订阅ROS的多个话题并发布成一个话题 1 motivation IntelRealsenseD435i传感器
  • ignav代码阅读笔记

    整个代码还是根据rtklib进行改的 xff0c 功能很完善 xff0c 但是我主要只关注ppp ins紧组合 代码链接 https github com Erensu ignav 代码功能 可以完成ppp和ins的紧组合 xff0c 把c
  • 【泡泡Docker乐园】使用泡泡Docker基础镜像放心大胆地开发吧!

    泡泡Docker乐园 使用泡泡Docker基础镜像放心大胆地开发吧 xff01 2020 4 7 泡泡推广 amp 编辑组 泡泡Docker乐园 xff0c 带你进入Docker的狂欢派对 简介 xff1a 泡泡Docker乐园 本次将推出
  • 【泡泡Docker乐园】Dockerfile简易教程 & LARVIO镜像

    泡泡Docker乐园 Dockerfile简易教程 amp LARVIO镜像 亲测完美 简介 xff1a 泡泡Docker乐园 第二期来啦 xff01 本期我们将简要介绍使用Dockerfile进行image构建的方法 利用Dockerfi
  • IMU与GPS传感器ESKF融合定位

    IMU与GPS传感器ESKF融合定位 文章目录 IMU与GPS传感器ESKF融合定位1 代码整体框架说明2 主要函数介绍2 1 LocalizationWrapper构造函数2 2 滤波算法进行预测2 3 通过GPS位置测量数据更新系统的状
  • 机器学习 小工具

    python美化打印的标准库 xff1a pprint
  • python数据类型

    python数据类型 数字 xff08 整型 xff0c 浮点型 xff09 字符串列表 xff1a 元组 xff1a 字典 xff1a 列表 元组以及字典的区别 xff1f 列表 元祖以及字典都是容器型数据类型 xff0c 可以对列表中的
  • 实用机器学习(hw1/hw4)

    实用机器学习 hw1 hw4 文章目录 实用机器学习 hw1 hw4 1 环境安装2 baseline 代码分析3 提升精度代码4 机器学习模型 1 环境安装 autogluon 2 baseline 代码分析 span class tok
  • 没有与这些操作数匹配的运算符

    没有与这些操作数匹配的 lt lt 运算符 include与 include lt string h gt 的区别 lt string h gt 的区别 是C 43 43 特化的字符容器 xff0c 内含string类 lt string
  • gazebo模型下载以及配置

    最近在学习ROS xff0c 主要是为了结合SLAM仿真使用 启动gazebo命令 roscore 在另一个终端执行 gazebo 就可以进入清爽的gazebo界面 xff08 如果屏幕出现黑屏并不是安装错误可以稍微等待一会 xff09 x
  • SLAM中常用数据集下载链接(TUM KITTI DSO Mono EuRoC)

    TUM 链接 xff1a https pan baidu com s 1nwXtGqH 密码 xff1a lsgr KITTI 链接 xff1a https pan baidu com s 1htFmXDE 密码 xff1a uu20 KI
  •  windows docker 更改镜像安装目录

    目录 1 问题 1 1 版本信息 2 修改Docker盘位操作 2 1 停止docker 2 2 备份已有的数据 2 3 删除旧数据 数据未备份前请谨慎操作 2 4 导入数据到新盘 2 5 启动Docker START 1 问题 Windo
  • gnssins代码阅读

    这个代码是GNSS和INS紧组合的 xff1a https github com marcoamm gnssins xff0c 实现了ppp和ins紧组合 改变数据需要改代码的地方 xff1a imu tactical 61 fopen 3
  • 深度解析FUTABA的SBUS协议(/天地飞遥控器的WBUS协议/Robomaster接收机的DBUS协议)到底是啥?

    写在前面 xff1a 无论是SBUS xff08 日本FUTABA xff0c 所以航模 xff0c 车模爱好者都知道的公司 xff0c 一个好点遥控器近万了 xff09 xff0c 还是WBUS xff08 天地飞遥控器接收机用 xff0
  • 贝塞尔曲线动画C++简单实践

    目录 贝塞尔曲线简介一阶贝塞尔二阶贝塞尔三阶贝塞尔N阶贝塞尔曲线 贝塞尔曲线在动画中的应用实践求曲线散点坐标将曲线应用到动画动画框架cmd动画窗口动画 完整代码示例代码核心类代码BezierCurve Animator Console 参考
  • package.xml文件介绍

    package xml文件介绍 在ROS中创建功能包时 xff0c 会自动生成package xml文件 xff0c pacakge xml 包含了package的名称 版本号 内容描述 维护人员 软件许可 编译构建工具 编译依赖 运行依赖
  • ubuntu误修改了bashrc文件的解决办法

    在安装Pycharm的过程中配置JAVA的JDK环境变量时 xff0c 将bashrc内的内容不小心修改了 xff0c 导致命令窗口中的很多命令不能执行 xff0c 并且su及sudo这些权限的命令也用不了 xff0c 问题信息如下图所示
  • docker安装canal1.1.5监控mysql的binlog日志并配置rocketmq进行数据同步到elasticsearch(超级大干货)

    直接来 xff0c 不逼逼 xff08 canal官网说的很明白 xff0c 伪从节点请求dump 然后这个那个的 xff0c 自行查阅资料 xff09 1 直接拉取canal镜像 docker pull canal canal serve