【问题标题】:MariaDB multiple masters in JDBC connection stringMariaDB JDBC 连接字符串中的多个主控
【发布时间】:2014-08-28 01:10:04
【问题描述】:

我正在为 MySQL 使用 MariaDB 5.5.38 和 JDBC 驱动程序。根据this article 我应该使用像

这样的连接字符串
jdbc:mysql://address=(type=master)(host=master1host),address=(type=master)(host=master2host)/db

使用多个主控主机。但是当我使用它时,我在com.mysql.jdbc.NonRegisteringDriver.parseHostPortPair(NonRegisteringDriver.java:216) [mysql.mysql-connector-java-5.1.30.jar:na] 中得到NullPointerException。我也使用 Apache Commons 的连接池,但我认为它不相关。那么,我做错了什么?

【问题讨论】:

  • 是否需要将主机指定为主机/端口对?例如 (host=master1host:3089)?
  • 我每个主机都使用同一个端口,所以我觉得没关系。
  • 指向单个主机是否有效?
  • 没有。我尝试了 jdbc:mysql://address=(type=master)(host=localhost)(port=3306)/db 并抛出了上述异常。
  • 我可以确认这也发生在 vanilla mysql Mysqlconnector J 以下文档中:dev.mysql.com/doc/connector-j/en/… 在我的情况下,两个连接都是 localhost,但不同的端口和 NPE 仍然存在。但一个是主另一个是从,我认为这与两个连接都是主无关

标签: java mysql jdbc mariadb


【解决方案1】:

您指向this article 的链接描述了主/从设置。

如果你想要多主设置,你可以使用这个网址:

jdbc:mysql:loadbalance://masterHost1,masterHost2/db

在此处了解更多信息:Configuring Load Balancing with Connector/J

【讨论】:

  • 重点是我不需要负载均衡器——我已经有了。
  • 我只是好奇:为什么要多主?负载均衡器今天的工作情况如何?
【解决方案2】:

浏览 mysql-connector-j 源代码后,NPE 是由您的连接 URL 上缺少前缀引起的。它应该是以下之一:

jdbc:mysql:loadbalance//.....
jdbc:mysql:replication//.....

有了这个 url,似乎只有带有 //host:port,host:port/db 的 url 可以工作,并且只有第一个用作 master。

要检查的另一件事是您使用的是什么驱动程序类。

根据这个问题:How do I configure our MySQL ReplicationDriver for our JBoss 7 data source?

正确的类是

com.mysql.jdbc.ReplicationDriver

【讨论】:

    【解决方案3】:

    我遇到了同样的问题,发现以下问题: https://bugs.mysql.com/bug.php?id=75440

    我把连接网址改成:

    jdbc:mysql://address=(protocol=tcp)(type=master)(host=serv1),address=(protocol=tcp)(type=master)(host=serv2)/db
    

    到目前为止,这对我有用

    【讨论】:

      猜你喜欢
      • 2020-01-27
      • 2021-05-02
      • 2016-12-24
      • 2019-08-23
      • 2017-09-05
      • 2021-01-20
      • 2014-04-27
      • 2020-07-18
      • 2013-12-26
      相关资源
      最近更新 更多