开发者社区 问答 正文

使用InetSocketAddress来存储mysql的地址和端口信息不妥(跨机房同步)

如果我们都用IP那没问题 但是如果用hostname的话,跨机房同步的话,canal的mysql信息会在manager那端取出来并反序列化为InetSocketAddress对象,同时InetSocketAddress对象会解析出ip地址,但是这个ip地址是和manger在同一机房的内网的mysql的地址,然后该InetSocketAddress对象被传送到另一机房的node中,该node直接用该InetSocketAddress对象去连接mysql,就会出现错误了

所以用InetSocketAddress来存储终究不妥

现在粗略的修改方法为:在MysqlConnector的public MysqlConnector(InetSocketAddress address, String username, String password)方法中重新构造一个InetSocketAddress对象让其再进行一次ns解析,代码如下:

  String addr = address.getHostString();
  int port = address.getPort();
  
  this.address = new InetSocketAddress(addr, port);

原提问者GitHub用户 whaon

展开
收起
古拉古拉 2023-06-21 12:15:03 61 发布于北京 分享
分享
版权
举报
1 条回答
写回答
取消 提交回答
  • Otter 机器添加 IP 校验检查允许 Hostname 已修复

    原回答者GitHub用户 agapple

    2023-06-21 13:00:14 举报
    赞同 评论

    评论

    全部评论 (0)

    登录后可评论
AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等