MariaDB JDBC 连接字符串中的多个主控

Posted

技术标签:

【中文标题】MariaDB JDBC 连接字符串中的多个主控【英文标题】:MariaDB multiple masters in JDBC connection string 【发布时间】: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 仍然存在。但一个是主另一个是从,我认为这与两个连接都是主无关 【参考方案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

到目前为止,这对我有用

【讨论】:

以上是关于MariaDB JDBC 连接字符串中的多个主控的主要内容,如果未能解决你的问题,请参考以下文章

如何转义mysql jdbc连接字符串中的特殊字符

如何设置连接 URL 以连接到 HSQLDB 中的多个数据库

逆向工程 JDBC Oracle 连接字符串

JDBC 无法从单独的类连接到我的数据库。 DB 类创建连接

无法使用 Zookeeper 连接字符串通过 JDBC 连接到 Hive

MariaDB jdbc 连接在批量插入期间失败