开发者社区> 问答> 正文

使用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 49 0
1 条回答
写回答
取消 提交回答
  • Otter 机器添加 IP 校验检查允许 Hostname 已修复

    原回答者GitHub用户 agapple

    2023-06-21 13:00:14
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
PolarDB MySQL引擎重磅功能及产品能力盛大发布 立即下载
阿里云企业级自治数据库 RDS 详解 立即下载
阿里云MySQL云数据库产品体系介绍 立即下载

相关镜像