canal 监听数据库会有订阅不到数据变化的情况 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要在回答技术问题时复制粘贴 AI 生成的内容
BadCat
V2EX    程序员

canal 监听数据库会有订阅不到数据变化的情况

  •  
  •   BadCat 2021-09-10 16:49:02 +08:00 2789 次点击
    这是一个创建于 1558 天前的主题,其中的信息可能已经有所发展或是发生改变。

    不知道有多少人用过 canal 碰巧也遇到过这个奇葩问题

    今天做了一天的测试,这个问题遇到的次数不算多,只有 4 次。

    怎么触发的都不清楚,log 也看不出来什么问题。包括阿里给的 demo 也有这个问题

    手动执行 update sql

    mysql> update hello set cOntext='testtest' where id=1; Query OK, 1 row affected (0.02 sec) Rows matched: 1 Changed: 1 Warnings: 0 

    然而 canal 监控不到,控制台什么都没输出,甚至是 canal 的 log 里啥有用的信息都没 一开始猜的的是 mysql 空闲时间导致的数据库断连,执行 sql 主库日志并不会有变化,所以 canal 没有监控到主库日志的消费变化,后来发现空闲时间是 480 分钟,并不符合猜想。github 上看了半天工单也没找到类似的问题。

    现在生产环境不敢上,还得用老一套的 trigger 来同步。郁闷死了

    第 1 条附言    2021-09-15 16:08:10 +08:00

    这几天一直在测试,但始终无法复现上周五出现的情况

    虽然问题没复现出来,但这几天dbug下来猜测出几种情况,给后来的同学做个参考

    • 动态ip。
    • 使用canal admin停启服务。demo本身运行两天没有问题,直到我加了canal admin管理服务,停启几次后出现了这个问题。但是最近的测试没有复现出来。所以canal admin出现的问题不太大。
    • journal.name=mysql-bin.000001 。可能是因为我配置了指定的binlog文件,当mysql产生新的binlog文件canal没法监控到?
    • wsl的MySQL于Windows的MySQL冲突。很简单,修改bind-address就可以用localhost/127.0.0.1随便连wsl或win的数据库。这个我要重点说一下,我的代码是运行在win下,canal服务和数据库是部署在wsl下,周五的具体情况记不清了,两个系统下的mysql服务一会stop,一会start,最后canal连的是哪个环境下的MySQL我都记不清了。我现在只用win下面的mysql,包括canal也是用.bat启动,没有出现周五的情况。有条件直接上独立linux,没有条件一定要区分开端口,到目前我认为这个可能性最大。
    15 条回复    2021-09-15 16:07:00 +08:00
    ChrisFreeMan
        1
    ChrisFreeMan  
       2021-09-10 17:12:58 +08:00
    求头像出处
    joApioVVx4M4X6Rf
        2
    joApioVVx4M4X6Rf  
       2021-09-10 17:16:11 +08:00
    求头像出处
    PeterYang1996
        3
    PeterYang1996  
       2021-09-10 17:17:09 +08:00
    头像不错
    joApioVVx4M4X6Rf
        4
    joApioVVx4M4X6Rf  
       2021-09-10 17:17:34 +08:00
    你这个不是 autocommit 吧?得 commit 一下才会有 log ?
    BadCat
        5
    BadCat  
    OP
       2021-09-10 17:21:09 +08:00
    @v2exblog 不会,默认提交是开启的
    BadCat
        6
    BadCat  
    OP
       2021-09-10 17:34:55 +08:00
    在想会不会是 mysql 锁的问题,但是也经不起推敲,canal 是监控 log,不是监控数据
    shanghai1943
        7
    shanghai1943  
       2021-09-10 17:37:00 +08:00
    binlog 没开?
    pkoukk
        8
    pkoukk  
       2021-09-10 17:38:26 +08:00
    实际内容没变?
    jiezhi
        9
    jiezhi  
       2021-09-10 17:40:12 +08:00
    自己先在 mysql 里看下 binlog 情况呢,确定 mysql binlog 没问题再排查 canal 的问题
    BadCat
        10
    BadCat  
    OP
       2021-09-10 18:04:28 +08:00
    @shanghai1943
    @jiezhi
    可能我前面没表达清楚,我仔细说一下。

    正常情况下 canal 是可以订阅到 mysql 数据变化情况的。但闲置个 5 、6 分钟再做新增修改或删除会有订阅不到数据变化的情况。所以我一开始猜测会不会是 mysql 的空闲时间导致连接断掉,sql 没有执行成功,所以 canal 没有消息返回。但我去看了下配置,给的 wait_timeout 时间有 480 分钟,足够了。而且这个情况直碰到了几次,很难复现
    BadCat
        11
    BadCat  
    OP
       2021-09-10 18:06:21 +08:00
    @pkoukk 内容变了,general_log 也看到了 sql,也返回了 1 row affected
    BadCat
        12
    BadCat  
    OP
       2021-09-10 18:11:44 +08:00
    general_log
    2021-09-10T09:11:36.830419Z 6 Query update hello set cOntext='testtest' where id=1

    meta.log
    2021-09-10 17:11:37.699 - clientId:1001 cursor:[mysql-bin.000005,1613,1631265096000,1,] address[activate.navicat.com/127.0.0.1:3306]

    log 中看不到问题,但 canal 中没有产生订阅消息。
    再执行一次 sql,canal 就会监控到信息并输出
    jiezhi
        13
    jiezhi  
       2021-09-10 18:30:58 +08:00
    @BadCat #10 确保该条消息 mysql 有 binlog 出来的话,建议 canal log 调成 debug 模式看看
    BadCat
        14
    BadCat  
    OP
       2021-09-10 21:04:45 +08:00
    @jiezhi 在家里 debug 一晚上,程序运行正常,问题复现不出来,现在猜测是还公司的 mysql 有问题。周一回去搞台新机器再看吧
    BadCat
        15
    BadCat  
    OP
       2021-09-15 16:07:00 +08:00
    **这几天一直在测试,但始终无法复现上周五出现的情况**

    虽然问题没复现出来,但这几天 dbug 下来猜测出几种情况,给后来的同学做个参考
    - 动态 ip 。
    - 使用 canal admin 停启服务。demo 本身运行两天没有问题,直到我加了 canal admin 管理服务,停启几次后出现了这个问题。但是最近的测试没有复现出来。所以 canal admin 出现的问题不太大。
    - journal.name=mysql-bin.000001 。可能是因为我配置了指定的 binlog 文件,当 mysql 产生新的 binlog 文件 canal 没法监控到?
    - wsl 的 MySQL 于 Windows 的 MySQL 冲突。很简单,修改 bind-address 就可以用 localhost/127.0.0.1 随便连 wsl 或 win 的数据库。这个我要重点说一下,我的代码是运行在 win 下,canal 服务和数据库是部署在 wsl 下,周五的具体情况记不清了,两个系统下的 mysql 服务一会 stop,一会 start,最后 canal 连的是哪个环境下的 MySQL 我都记不清了。我现在只用 win 下面的 mysql,包括 canal 也是用.bat 启动,没有出现周五的情况。有条件直接上独立 linux,没有条件一定要区分开端口,到目前我认为这个可能性最大。
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     3475 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 27ms UTC 10:37 PVG 18:37 LAX 02:37 JFK 05:37
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86