gpt4 book ai didi

java - 另一个 MySQL 连接问题

转载 作者:行者123 更新时间:2023-11-29 17:19:58 25 4
gpt4 key购买 nike

我必须将我的 java 服务器应用程序部署到 Debian 8 服务器。它尝试通过unix域套接字或tcp(取决于连接字符串)连接到MySQL服务器。它在我的 Debian 9 开发服务器上运行良好,但在实时服务器上给出(据我认为)无用的错误消息。我对两台服务器都有 root 访问权限,但不允许在实时服务器上做太多事情。由于我在 D9 上编译 java 并在 D8 上运行它时遇到版本问题,因此我从 Debian 存储库在 D8 上安装了 openjdk-7-jdk 和 mysql java 连接器,将连接器 jar 复制(符号链接(symbolic link))到源的 lib 目录,并重新编译该应用程序。现在它启动了,但是当尝试连接到数据库时,它会抛出以下错误:

TCP: Connection refused
UDS: File not found (nonexistent file or device) ((the translation may not be correct, sorry))

两个连接(TCP 和 UDS)在 PHP 和 PDO 中都可以正常工作。连接字符串:

TCP: jdbc:mysql://localhost/<dbname>?user=<user>&password=<pwd>&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=UTC&characterEncoding=utf8
UDS: jdbc:mysql:///<dbname>?socketFactory=com.mysql.jdbc.NamedPipeSocketFactory&namedPipePath=/var/run/mysqld/mysqld.sock&user=<user>&password=<pwd>&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=UTC&characterEncoding=utf8

dbname、user、pwd 和套接字文件路径是从正在运行的 PHP 代码中复制并粘贴的。值得注意的是,我不是java专家,我可能不知道使用这些旧库应该知道的东西。一些源代码:

Class.forName("java.sql.Driver");
...
Connection db = DriverManager.getConnection(Settings.sqlConnection.value);
try(Statement stmt = c.createStatement())
{
stmt.execute("SET @now = UTC_TIMESTAMP()");
}
...

版本信息:

Debian 8.7
MySQL server 5.5.53-0+deb8u1
java version "1.7.0_181"
OpenJDK Runtime Environment (IcedTea 2.6.14) (7u181-2.6.14-1~deb8u1)
OpenJDK 64-Bit Server VM (build 24.181-b01, mixed mode)
mysql-connector-java-5.1.42.jar

我错过了什么?为什么我会收到连接被拒绝和丢失文件错误消息,而显然服务器正在监听并且套接字文件在那里并且具有正确的权限 - 并且其他客户端可以连接?

最佳答案

没关系,我已经找到了解决方案(在发布问题后不多,在开始遇到问题后又很多......像往常一样)。

UDS:我只是将命名管道与 unix 域套接字混为一谈,它们是同一概念的两种完全不同的实现。 JDBC根本无法做UDS。现在我意识到我在开发服务器上测试了我的代码,可能仅使用 TCP 连接。

TCP:服务器套接字绑定(bind)到服务器的确切地址,因此 localhost 无法工作。我对连接拒绝错误的狭隘想法完全误导了我。

关于java - 另一个 MySQL 连接问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51310755/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com