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 连接字符串中的多个主控的主要内容,如果未能解决你的问题,请参考以下文章
如何设置连接 URL 以连接到 HSQLDB 中的多个数据库
JDBC 无法从单独的类连接到我的数据库。 DB 类创建连接