在 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 服务器就可以正确地解析新建表的数据变更了。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。