数据订阅与消费中间件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;
相关推荐
Andy杨1 小时前
20250712-1-Kubernetes 监控与日志管理-K8s日志管理与维护_笔记
笔记·容器·kubernetes
潘晓可3 小时前
Docker部署Nginx代理多个服务:公网域名与内网IP场景全解
nginx·docker·nginx proxy
KKKingWei4 小时前
Kubernetes Dashboard UI 部署安装
云原生·容器·kubernetes
素雪风华5 小时前
Jenkins+Gitee+Docker容器化部署
java·docker·gitee·jenkins·springboot·持续部署
蓝天居士6 小时前
docker常用命令集(2)
docker·容器
panamera126 小时前
云端docker小知识
运维·docker·容器
木卯彳亍14 小时前
番外-linux系统运行.net framework 4.0的项目
linux·docker·.net
退役小学生呀17 小时前
十一、K8s细粒度权限管理RBAC
linux·docker·云原生·容器·kubernetes·k8s
昭阳~18 小时前
Kubernetes 高级调度特性
云原生·容器·kubernetes