数据订阅与消费中间件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;
相关推荐
宋均浩21 小时前
# Docker 镜像瘦身实战:从 1.2G 到 80MB 的五个优化步骤
ci/cd·docker
程序员老赵2 天前
10 分钟部署 OpenCode:Docker 一键安装,浏览器打开就能用 AI 写代码(附完整命令与排错)
docker·容器·ai编程
WangMingHua1112 天前
LM Studio Docker 部署——本地大模型一键启动
docker
曲幽3 天前
别再用网页翻译看源码了!你的私人翻译神器LibreTranslate,部署避坑指南来了
python·docker·web·pot·translate·libretranslate·arogstranslate
武子康5 天前
调查研究-183 Apple container:Mac 上用轻量 VM 跑 Linux 容器,Swift 会改写本地容器体验吗?
docker·容器·apple
Alsn868 天前
等待学习-学习目录:Docker 容器安全攻防
学习·安全·docker
2601_961875248 天前
决战申论100题2026|最新|范文
linux·容器·centos·debian·ssh·fabric·vagrant
java_cj8 天前
深入kube-apiserver认证机制:从Bearer Token到mTLS的完整认证链解析
linux·运维·服务器·云原生·容器·kubernetes
程序员老赵8 天前
服务器没有桌面?Docker 跑个 Chrome,浏览器就能远程用
docker·容器·devops
杨浦老苏8 天前
轻量级Docker仪表板Servedash
运维·docker·监控·群晖·仪表板