数据订阅与消费中间件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 小时前
kubernetes-dashboard使用http不登录
http·容器·kubernetes
月熊2 小时前
Kubernetes笔记整合-1
笔记·容器·kubernetes
张鱼小丸子2 小时前
K8S管理实战指南
云原生·容器·kubernetes
小白不想白a2 小时前
【K8s】整体认识K8s之Docker篇
docker·容器·kubernetes
Agome993 小时前
Docker之nginx安装
java·nginx·docker
努力买辣条8 小时前
基于Docker的高可用WordPress集群部署:Nginx负载均衡+Mysql主从复制+ProxySQL读写分离
nginx·docker·负载均衡
记忆不曾留14 小时前
unbuntu 20.04 docker 部署wordpress
运维·docker·容器·wordpress·独立站建站
三五a14 小时前
Kubernetes
云原生·容器·kubernetes
C-200216 小时前
kubernetes中pod的管理及优化
云原生·容器·kubernetes
照物华16 小时前
深入理解Kubernetes核心:标签与标签选择器实战解析
云原生·容器·kubernetes·k8s