另一个 MySQL 连接问题

Yet another MySQL connection issue

我必须将我的 java 服务器应用程序部署到 Debian 8 服务器。它尝试通过 unix 域套接字或 tcp(取决于连接字符串)连接到 MySQL 服务器。它在我的 Debian 9 开发服务器上运行良好,但在实时服务器上给出了(我认为)无用的错误消息。我对两台服务器都有 root 访问权限,但不允许在实时服务器上做太多事情。由于我在 D9 上编译 java 和在 D8 上编译 运行 时遇到版本问题,我安装了 openjdk-7-jdk 和 mysql java 来自 Debian 存储库的 D8 上的连接器,将连接器 jar 复制(符号链接)到源的 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 和 socket 文件路径是从工作 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:服务器套接字绑定到服务器的确切地址,因此 localhost 无法工作。我对连接拒绝错误的狭隘想法完全误导了我。