Docker部署Canal监听MySQL binlog

文章目录

概念简述

binlog

MySQL的二进制日志binlog可以说是MySQL最重要的日志,它记录了所有的DDL和DML语句(除了数据查询语句select),以事件形式记录,还包含语句所执行的消耗的时间,MySQL的二进制日志是事务安全型的。

Canal

译意为水道/管道/沟渠,主要用途是基于 MySQL 数据库增量日志解析,提供增量数据订阅和消费

canal可以用来监控数据库数据的变化,从而获得新增数据,或者修改的数据。

canal的工作原理就是把自己伪装成MySQL slave,模拟MySQL slave的交互协议向MySQL Mater发送 dump协议,MySQL mater收到canal发送过来的dump请求,开始推送binary log给canal,然后canal解析binary log,再发送到存储目的地。

MySQL配置

首先docker中需要已安装mysql,且配置文件目录已挂载出来

打开宿主机挂载的mysql配置文件目录

linux 复制代码
vim my.conf

配置文件中添加以下配置,启用binlog

linux 复制代码
[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=canal

完成后保存退出

重启docker中的mysql

Canal配置

创建挂载目录

新建/opt/docker/canal/conf目录,稍后我们会放两个配置文件,并挂载

新建/opt/docker/canal/log目录,用于挂载日志文件

linux 复制代码
mkdir -p /opt/docker/canal/{conf,log}

设置权限

linux 复制代码
chmod -R 777 /opt/docker/canal/conf
linux 复制代码
chmod -R 777 /opt/docker/canal/log

创建MySQl的Canal账户

我这里在navicat中直接配置,用户名密码都是canal

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

拉取镜像

linux 复制代码
docker pull canal/canal-admin:v1.1.5

运行容器

简单运行

先简单运行一下,目的是为了获取其中的配置文件

linux 复制代码
docker run --name canal -d canal/canal-server:v1.1.5

配置文件复制到宿主机

将容器中的两个配置文件复制到我们创建好的conf目录中

linux 复制代码
docker cp canal:/home/admin/canal-server/conf/canal.properties /opt/docker/canal/conf
docker cp canal:/home/admin/canal-server/conf/example/instance.properties /opt/docker/canal/conf

修改配置文件

修改instance.properties配置文件

第一页长这样,这里我们就修改一下框中的部分,第一个是我们在mysql配置文件中设置的slaveId,下面的是数据库地址,IP:端口号

第二页长这样,同样只需要改框中的部分

上面的是我们之前为canal创建的账号和密码,均为canal

下面的是需要监听的库表,图中就是默认状态,监听全部,可根据实际需求改

删除之前运行的canal容器

暂停canal

linux 复制代码
docker stop canal

删除canal

linux 复制代码
docker rm canal

正式运行Canal容器

注意修改mysql地址

linux 复制代码
 docker run -d -it -h 127.0.0.1 -e server.port=8089 \
 -e canal.adminUser=admin -e canal.adminPasswd=admin \
 -e spring.datasource.address=mysql地址:3306  \
 -e spring.datasource.database= canal_manager  \
 -e spring.datasource.username= canal  \
 -e spring.datasource.password= canal  \
 --name=canal-admin -p 8089:8089 \
 -m 1024m canal/canal-admin:v1.1.5

查看运行状态

linux 复制代码
docker ps -a

成功

排查问题

进入到创建的挂载日志文件目录log,进入canal目录,里面有两个日志文件

运行遇到问题可查看这些日志排查问题


结束

相关推荐
初级炼丹师(爱说实话版)4 分钟前
Ubuntu24.04 Docker+vLLM+qianwen2.5-coder-32B部署文档
docker·容器·vllm
DLYSB_1 小时前
API 网关流量洪峰与突发 CC 攻击:我用 Go 写了个“现场物理防御哨兵”,把故障响应压缩到秒级
开发语言·后端·golang·报警灯
markinmarkin2 小时前
Spring 中Bean 的作用域有哪些?
java·后端·spring
橙子家3 小时前
使用方法 ToDictionary() 来优化查询时间复杂度:O(N*M) -> O(1*M)【C# 基础】
后端
IT_陈寒3 小时前
我又被JavaScript的隐式类型转换坑了
前端·人工智能·后端
用户8356290780513 小时前
Python Word 转 PDF 和 PDF 转 Word 指南
后端·python
用户8356290780513 小时前
如何使用 Python 加密和保护 Word 文档
后端·python
他们叫我秃子4 小时前
前端开发转 Go 全栈(五):终于遇到熟人了,Go 的闭包和高阶函数原来这么像 JavaScript
前端·后端·go
SomeB1oody4 小时前
【RustyML入门】2.6. 线性判别分析
开发语言·后端·机器学习·rust·教程
妙码生花4 小时前
从 PHP 到 AI + Golang,程序员自救转型手记(五十七):AI时代对组件封装的新理解、agInput 统一入口,动态表单预备
前端·后端·go