• 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配置文件目录

    vim my.conf
    
    • 1

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

    [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
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    完成后保存退出
    重启docker中的mysql

    Canal配置

    创建挂载目录

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

    mkdir -p /opt/docker/canal/{conf,log}
    
    • 1

    设置权限

    chmod -R 777 /opt/docker/canal/conf
    
    • 1
    chmod -R 777 /opt/docker/canal/log
    
    • 1

    创建MySQl的Canal账户

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

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

    在这里插入图片描述

    拉取镜像

    docker pull canal/canal-admin:v1.1.5
    
    • 1

    运行容器

    简单运行

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

    docker run --name canal -d canal/canal-server:v1.1.5
    
    • 1

    配置文件复制到宿主机

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

    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
    
    • 1
    • 2

    修改配置文件

    修改instance.properties配置文件
    第一页长这样,这里我们就修改一下框中的部分,第一个是我们在mysql配置文件中设置的slaveId,下面的是数据库地址,IP:端口号
    在这里插入图片描述
    第二页长这样,同样只需要改框中的部分
    在这里插入图片描述
    上面的是我们之前为canal创建的账号和密码,均为canal
    下面的是需要监听的库表,图中就是默认状态,监听全部,可根据实际需求改

    删除之前运行的canal容器

    暂停canal

    docker stop canal
    
    • 1

    删除canal

    docker rm canal
    
    • 1

    正式运行Canal容器

    注意修改mysql地址

     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
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    查看运行状态

    docker ps -a
    
    • 1

    在这里插入图片描述
    成功

    排查问题

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

    在这里插入图片描述

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


    结束

  • 相关阅读:
    (附源码)php初中历史专题教学网站 毕业设计 100623
    SVG 绘制微信订阅号icon
    Kubernetes(k8s)pod 探针检测
    Git相关配置及问题解决
    HLS基础issue
    Python3,这应该是,配置文件最全的写法了。
    Vue-RuoYI框架实训学习
    【成为红帽工程师】第四天 web服务器的实验
    第43天:python操作mysql、视图及触发器、事务及索引
    海外媒体发稿:出口贸易媒体发稿16个超实用技巧-华媒舍
  • 原文地址:https://blog.csdn.net/m0_68681879/article/details/132831406