我必须把我的Java服务器应用程序部署到Debian 8服务器上。它试图通过Unix域套接字或TCP(取决于连接字符串)连接到MySQL服务器。它在我的Debian9开发服务器上运行良好,但在实时服务器上给出(我认为)无用的错误消息。我可以访问两个服务器的根目录,但不允许在Live服务器上做太多的事情。由于我在D9上编译Java,并在D8上运行它,所以我在D8上从Debian RePO上安装了OpenJDK-7JDK和MySQL Java连接器,复制(链接)连接器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
我错过了什么?为什么在服务器明显在监听并且套接字文件在那里并且拥有正确的权限时,我会收到连接被拒绝和丢失的文件错误消息,而其他客户机可以连接?