开发者社区> 问答> 正文

mysql5.7新建表会导致canal服务器挂起

提问347.png

原提问者GitHub用户laopeng

展开
收起
绿子直子 2023-05-09 10:27:30 59 0
2 条回答
写回答
取消 提交回答
  • 建议使用1.0.26版本

    原回答者GitHub用户agapple

    2023-05-10 09:36:53
    赞同 展开评论 打赏
  • 随心分享,欢迎友善交流讨论:)

    在 MySQL 5.7 中新建表不会导致 Canal 服务器挂起,但是可能会导致 Canal 服务器无法解析新表的数据变更。这是因为在 Canal 中,需要缓存所有数据库表的元数据信息,包括表的结构、索引、主键等信息,才能正确地解析 Binlog 中的数据变更事件。

    如果在 Canal 启动时已经缓存了所有数据库表的元数据信息,那么新建表不会导致 Canal 服务器挂起,但是可能会导致 Canal 无法解析新表的数据变更。这时可以通过手动刷新 Canal 缓存来解决,具体步骤如下:

    1、登录到 Canal 服务器主机,进入 Canal 安装目录下的 bin 目录,执行以下命令,停止 Canal 服务:

    sh stop.sh

    2、进入 Canal 安装目录下的 conf 目录,编辑 canal.properties 文件,将 canal.instance.tsdb.spring.datasource.url 参数中的 useSSL=true 改为 useSSL=false。

    这是因为在启用 SSL 连接的情况下,Canal 无法正确连接 MySQL 数据库,从而无法刷新缓存。

    3、执行以下命令,清空 Canal 缓存:

    rm -rf /path/to/canal-server-1.1.5/data/meta.dat rm -rf /path/to/canal-server-1.1.5/data/instances/{instanceName}/meta.dat

    其中,/path/to/canal-server-1.1.5 是 Canal 的安装目录,{instanceName} 是 Canal 实例的名称,可以在 canal.properties 文件中找到。

    4、执行以下命令,启动 Canal 服务:

    sh startup.sh

    5、等待 Canal 服务启动成功后,执行以下命令,重新同步新建的表的数据变更:

    binlogctl -h 127.0.0.1 -P 11111 -p password sync -b {binlogFile} -o {binlogOffset}

    其中,127.0.0.1 是 Canal 服务器的 IP 地址,11111 是 Canal 服务器的端口号,password 是 Canal 服务器的密码,{binlogFile} 和 {binlogOffset} 是新建表的数据变更事件在 Binlog 中的位置。

    执行完这些步骤后,Canal 服务器就可以正确地解析新建表的数据变更了。

    2023-05-09 10:54:23
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
如何运维千台以上游戏云服务器 立即下载
网站/服务器取证 实践与挑战 立即下载
ECS计算与存储分离架构实践 立即下载

相关镜像