You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

mysql-connector-java 5.1.6中failOverReadOnly参数不生效问题咨询

MySQL故障转移后备用库无法执行写操作的原因及解决方案

核心原因

  • 驱动版本存在已知bug:你使用的mysql-connector-java 5.1.6版本存在故障转移逻辑缺陷,即使配置了failOverReadOnly=false参数,主库连接失败切换到备用节点时,驱动仍然会强制将备用连接标记为只读状态,该bug在5.1.7及之后的版本才被修复。
  • JDBC URL格式错误:你配置的多主机URL中首个节点地址写为dbt1:9999:3306,存在2个端口段不符合MySQL JDBC URL规范,驱动解析主库地址直接失败触发故障转移,同时触发上述驱动只读bug。
  • 参数生效逻辑问题:5.1.6版本中failOverReadOnly参数仅在主库恢复、连接切回主库时生效,切换到备用节点的场景下不会读取该参数配置。

解决方案

  • 修正JDBC URL格式,将错误的多端口主节点地址改为规范的host:port格式,测试故障转移时可直接将主节点端口改为不可用的端口即可,例如jdbc:mysql://dbt1:9999,dbt2:3306,dbt3:3306/rs01?autoReconnect=true&failOverReadOnly=false&secondsBeforeRetryMaster=60&queriesBeforeRetryMaster=10&useSSL=false。
  • 升级mysql-connector-java版本至5.1系列最新稳定版5.1.49,即可直接解决故障转移后强制只读的bug。
  • 若暂时无法升级驱动,可在连接池配置中强制设置默认连接非只读,例如使用HikariCP时添加配置spring.datasource.hikari.read-only=false,或者在业务代码获取连接后主动执行connection.setReadOnly(false);覆盖驱动的只读标记。

内容的提问来源于stack exchange,提问作者ShaggyInjun

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 01:42:03