数据订阅与消费中间件Canal 服务搭建(docker)

  1. MySQL Bin-log开启
  • 进入mysql容器 docker exec -it mysql5.7 bash

  • 开启mysql的binlog cd /etc/mysql/mysql.conf.d

  • vi mysqld.cnf #在文件末尾处添加如下配置(如果没有这个文件就创建一个)

    复制代码
    [mysqld]
    # 开启 binlog
    log-bin=mysql-bin
    #log-bin=/var/lib/mysql/mysql-bin    #或者配置绝对路径
    # 选择 ROW 模式
    binlog-format=ROW
    # 配置 MySQL replaction 需要定义,不要和 canal 的 slaveId 重复
    server-id=999
  • 创建账号并授权

    复制代码
    #授权canal链接MySQL,账号具有作为MySQL slave的权限, 如果已有账户可直接 grant。
    create user canal@'%' IDENTIFIED by 'canal';
    GRANT SELECT, REPLICATION SLAVE, REPLICATION CLIENT,SUPER ON *.* TO 'canal'@'%';
    FLUSH PRIVILEGES;
  • 重启mysql并查看

    复制代码
    docker restart mysql5.7
    show variables like '%log_bin%'
  1. Canal安装

    复制代码
    docker pull canal/canal-server                                        #拉取镜像,最新版本
    docker run -p 11111:11111 --name canal -d docker.io/canal/canal-server        #运行容器
    配置canal-server
    docker exec -it canal bash
    vi canal-server/conf/canal.properties               #将它的canal.id属性修改成和mysql数据库中server-id不同的值
    vi canal-server/conf/example/instance.properties    #配置要监听的数据库服务地址和监听数据变化的数据库以及表

    复制代码
    canal.instance.master.address=192.168.10.100:3306    #监听的数据库
    canal.instance.filter.regex=seckill_goods.tb_sku     #监听的表
    
    mysql 数据解析关注的表,Perl正则表达式.
    多个正则之间以逗号(,)分隔,转义符需要双斜杠(\\) 
    常见例子:
    1.  所有表:.*   or  .*\\..*
    2.  canal schema下所有表: canal\\..*
    3.  canal下的以canal打头的表:canal\\.canal.*
    4.  canal schema下的一张表:canal.test1
    5.  多个规则组合使用:canal\\..*,mysql.test1,mysql.test2 (逗号分隔)
    注意:此过滤条件只针对row模式的数据有效(ps. mixed/statement因为不解析sql,所以无法准确提取tableName进行过滤)

    查看日志

    复制代码
    docker exec -it canal -bash
    tail -f  canal-server/logs/example/example.log

    注意,如果连接的是mysql8.x,会报如下错误:

    Caused by: java.io.IOException: caching_sha2_password Auth failed

    解决办法是参考:

    复制代码
    caching_sha2_password 是 MySQL 8.0 引入的默认认证插件,替代了之前的 mysql_native_password。当客户端使用旧的认证机制尝试连接到 MySQL 服务器时,就可能出现 "auth failed" 错误。
    解决:
    mysql> ALTER USER 'canal'@'%' IDENTIFIED WITH mysql_native_password BY 'canal';
    mysql> FLUSH PRIVILEGES;
相关推荐
生活爱好者!1 小时前
NAS 部署白板工具,实现思维导图/画板/流程图自由
运维·docker·容器
乌鸦不像写字台7 小时前
【docker部署】在服务器上使用docker
服务器·docker·容器
艾伦_耶格宇10 小时前
【docker】-1 docker简介
运维·docker·容器
IvanCodes12 小时前
二、Docker安装部署教程
docker·容器
Andy杨14 小时前
20250707-4-Kubernetes 集群部署、配置和验证-K8s基本资源概念初_笔记
笔记·容器·kubernetes
容器魔方17 小时前
中选名单出炉|18位学生入选开源之夏KubeEdge课题,欢迎加入!
云原生·容器·云计算
保持学习ing17 小时前
day1--项目搭建and内容管理模块
java·数据库·后端·docker·虚拟机
susu108301891118 小时前
Debian 11 Bullseye 在线安装docker
运维·docker·debian
love530love19 小时前
Docker 稳定运行与存储优化全攻略(含可视化指南)
运维·人工智能·windows·docker·容器
人生匆匆19 小时前
docker进入启动失败的容器
运维·docker·容器