Tomcat/Hibernate 连接 MySql 失败,显示"Communications link failure"和"Permission denied"错误信息。

6
我正在尝试使用Hibernate从tomcat web应用程序连接到本地主机上的MySql(=MariaDB)(我们称其为A),但不断收到“通信链接失败”的错误(完整的异常跟踪如下所示)。
我在另一台不同的机器B上有一个数据库的副本,并且还使用第三台计算机C进行开发。
1)我没有任何问题连接到A和B中的任何一个数据库(从C连接)。 2)在“A”上,我可以轻松地连接到本地运行的数据库(运行'mysql -u'命令)。我也可以在端口3306上对A或B进行telnet。因此,我假设两个数据库都已启动并可用于连接。
唯一的问题是当我尝试从生产tomcat(在A上运行)连接到A或B数据库时,会出现以下错误:
com.mysql.cj.jdbc.exceptions.CommunicationsException: Communications link failure

The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server.

从类似此错误的案例中,我发现大多数错误都是由于无效的用户名/密码凭据或非法IP引起的。我也尝试将IP更改为localhost、127.0.0.1和10.90.41.155(这是机器的实际IP)。没有任何帮助,并且请记住,连接仅从A上的特定Tomcat安装失败。
我还尝试了以下内容: 1)在catalina启动时添加了“-Djava.net.preferIPv4Stack=true” 2)尝试连接到非法地址/端口-这将最终错误从“权限被拒绝”更改为“主机不可达”(如预期)。 3)在我的连接字符串中添加了以下内容:“autoReconnect=true&useUnicode=true&createDatabaseIfNotExist=true&characterEncoding=utf-8”-这导致相同的错误(“尝试重新连接3次。放弃。”+“连接失败的权限被拒绝”) 4)尝试了两个DB URL。对于本地DB,尝试使用localhost、127.0.0.1和实际IP。在连接字符串中尝试使用和不使用“:3306”。
附上hibernate.cfg文件和完整的服务器异常跟踪信息:
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-configuration SYSTEM 
"http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">

<hibernate-configuration>
   <session-factory>
   <property name="hibernate.dialect">
      org.hibernate.dialect.MySQLDialect
   </property>
   <property name="hibernate.connection.driver_class">
      com.mysql.jdbc.Driver
   </property>

   <!-- Assume test is the database name -->
   <property name="hibernate.connection.url">
      jdbc:mysql://10.90.41.151/boonder
   </property>
   <property name="hibernate.connection.username">
      root
   </property>
   <property name="hibernate.connection.password">
   XXXXXXXXXX
   </property>

   <!-- List of XML mapping files      -->
   <mapping resource="User.hbm.xml"/>
   <mapping resource="Issue.hbm.xml"/>
   <mapping resource="TraderIssue.hbm.xml"/>

</session-factory>
</hibernate-configuration>

异常是:

        type Exception report

        message Handler dispatch failed; nested exception is java.lang.ExceptionInInitializerError

        description The server encountered an internal error that prevented it from fulfilling this request.

        exception

        org.springframework.web.util.NestedServletException: Handler dispatch failed; nested exception is java.lang.ExceptionInInitializerError
            org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:982)
            org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:901)
            org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:970)
            org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:872)
            javax.servlet.http.HttpServlet.service(HttpServlet.java:650)
            org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:846)
            javax.servlet.http.HttpServlet.service(HttpServlet.java:731)
            com.aldondy.boonder.web.controllers.CharacterEncodingFilter.doFilter(CharacterEncodingFilter.java:27)
            org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
        root cause

        java.lang.ExceptionInInitializerError
            com.aldondy.boonder.bl.DataSingleton.<init>(DataSingleton.java:54)
            com.aldondy.boonder.bl.DataSingleton.instance(DataSingleton.java:74)
            com.aldondy.boonder.web.controllers.LoginCtrl.loginInner(LoginCtrl.java:62)
            com.aldondy.boonder.web.controllers.LoginCtrl.login(LoginCtrl.java:41)
            sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
            sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
            sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
            java.lang.reflect.Method.invoke(Method.java:498)
            org.springframework.web.bind.annotation.support.HandlerMethodInvoker.invokeHandlerMethod(HandlerMethodInvoker.java:180)
            org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter.invokeHandlerMethod(AnnotationMethodHandlerAdapter.java:440)
            org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter.handle(AnnotationMethodHandlerAdapter.java:428)
            org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:967)
            org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:901)
            org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:970)
            org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:872)
            javax.servlet.http.HttpServlet.service(HttpServlet.java:650)
            org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:846)
            javax.servlet.http.HttpServlet.service(HttpServlet.java:731)
            com.aldondy.boonder.web.controllers.CharacterEncodingFilter.doFilter(CharacterEncodingFilter.java:27)
            org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
        root cause

        org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment]
            org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:271)
            org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:233)
            org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:210)
            org.hibernate.engine.jdbc.internal.JdbcServicesImpl.configure(JdbcServicesImpl.java:51)
            org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.configureService(StandardServiceRegistryImpl.java:94)
            org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:242)
            org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:210)
            org.hibernate.boot.model.process.spi.MetadataBuildingProcess.handleTypes(MetadataBuildingProcess.java:352)
            org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:111)
            org.hibernate.boot.model.process.spi.MetadataBuildingProcess.build(MetadataBuildingProcess.java:83)
            org.hibernate.boot.internal.MetadataBuilderImpl.build(MetadataBuilderImpl.java:418)
            org.hibernate.boot.internal.MetadataBuilderImpl.build(MetadataBuilderImpl.java:87)
            org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:691)
            org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:726)
            com.aldondy.boonder.bl.DataSingleton.<init>(DataSingleton.java:48)
            com.aldondy.boonder.bl.DataSingleton.instance(DataSingleton.java:74)
            com.aldondy.boonder.web.controllers.LoginCtrl.loginInner(LoginCtrl.java:62)
            com.aldondy.boonder.web.controllers.LoginCtrl.login(LoginCtrl.java:41)
            sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
            sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
            sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
            java.lang.reflect.Method.invoke(Method.java:498)
            org.springframework.web.bind.annotation.support.HandlerMethodInvoker.invokeHandlerMethod(HandlerMethodInvoker.java:180)
            org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter.invokeHandlerMethod(AnnotationMethodHandlerAdapter.java:440)
            org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter.handle(AnnotationMethodHandlerAdapter.java:428)
            org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:967)
            org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:901)
            org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:970)
            org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:872)
            javax.servlet.http.HttpServlet.service(HttpServlet.java:650)
            org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:846)
            javax.servlet.http.HttpServlet.service(HttpServlet.java:731)
            com.aldondy.boonder.web.controllers.CharacterEncodingFilter.doFilter(CharacterEncodingFilter.java:27)
            org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
        root cause

        org.hibernate.exception.JDBCConnectionException: Error calling Driver#connect
            org.hibernate.exception.internal.SQLStateConversionDelegate.convert(SQLStateConversionDelegate.java:115)
            org.hibernate.engine.jdbc.connections.internal.BasicConnectionCreator$1$1.convert(BasicConnectionCreator.java:101)
            org.hibernate.engine.jdbc.connections.internal.BasicConnectionCreator.convertSqlException(BasicConnectionCreator.java:123)
            org.hibernate.engine.jdbc.connections.internal.DriverConnectionCreator.makeConnection(DriverConnectionCreator.java:41)
            org.hibernate.engine.jdbc.connections.internal.BasicConnectionCreator.createConnection(BasicConnectionCreator.java:58)
            org.hibernate.engine.jdbc.connections.internal.PooledConnections.addConnections(PooledConnections.java:123)
            org.hibernate.engine.jdbc.connections.internal.PooledConnections.<init>(PooledConnections.java:42)
            org.hibernate.engine.jdbc.connections.internal.PooledConnections.<init>(PooledConnections.java:20)
            org.hibernate.engine.jdbc.connections.internal.PooledConnections$Builder.build(PooledConnections.java:161)
    ...
            org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:691)
            org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:726)
            com.aldondy.boonder.bl.DataSingleton.<init>(DataSingleton.java:48)
            com.aldondy.boonder.bl.DataSingleton.instance(DataSingleton.java:74)
            com.aldondy.boonder.web.controllers.LoginCtrl.loginInner(LoginCtrl.java:62)
            com.aldondy.boonder.web.controllers.LoginCtrl.login(LoginCtrl.java:41)
            sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
            sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
            sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
            java.lang.reflect.Method.invoke(Method.java:498)
            org.springframework.web.bind.annotation.support.HandlerMethodInvoker.invokeHandlerMethod(HandlerMethodInvoker.java:180)
            org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter.invokeHandlerMethod(AnnotationMethodHandlerAdapter.java:440)
            org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter.handle(AnnotationMethodHandlerAdapter.java:428)
            org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:967)
            org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:901)
            org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:970)
            org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:872)
            javax.servlet.http.HttpServlet.service(HttpServlet.java:650)
            org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:846)
            javax.servlet.http.HttpServlet.service(HttpServlet.java:731)
            com.aldondy.boonder.web.controllers.CharacterEncodingFilter.doFilter(CharacterEncodingFilter.java:27)
            org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
        root cause

        com.mysql.cj.jdbc.exceptions.CommunicationsException: Communications link failure

        The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server.
            com.mysql.cj.jdbc.exceptions.SQLError.createCommunicationsException(SQLError.java:166)
            com.mysql.cj.jdbc.exceptions.SQLExceptionsMapping.translateException(SQLExceptionsMapping.java:58)
            com.mysql.cj.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:853)
            com.mysql.cj.jdbc.ConnectionImpl.<init>(ConnectionImpl.java:440)
            com.mysql.cj.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:241)
            com.mysql.cj.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:221)
            org.hibernate.engine.jdbc.connections.internal.DriverConnectionCreator.makeConnection(DriverConnectionCreator.java:38)
            org.hibernate.engine.jdbc.connections.internal.BasicConnectionCreator.createConnection(BasicConnectionCreator.java:58)

    ...

    org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:210)
            org.hibernate.boot.model.process.spi.MetadataBuildingProcess.handleTypes(MetadataBuildingProcess.java:352)
            org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:111)
            org.hibernate.boot.model.process.spi.MetadataBuildingProcess.build(MetadataBuildingProcess.java:83)
            org.hibernate.boot.internal.MetadataBuilderImpl.build(MetadataBuilderImpl.java:418)
            org.hibernate.boot.internal.MetadataBuilderImpl.build(MetadataBuilderImpl.java:87)
            org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:691)
            org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:726)
            com.aldondy.boonder.bl.DataSingleton.<init>(DataSingleton.java:48)
            com.aldondy.boonder.bl.DataSingleton.instance(DataSingleton.java:74)
            com.aldondy.boonder.web.controllers.LoginCtrl.loginInner(LoginCtrl.java:62)
            com.aldondy.boonder.web.controllers.LoginCtrl.login(LoginCtrl.java:41)
            sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
            sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
            sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
            java.lang.reflect.Method.invoke(Method.java:498)
            org.springframework.web.bind.annotation.support.HandlerMethodInvoker.invokeHandlerMethod(HandlerMethodInvoker.java:180)
            org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter.invokeHandlerMethod(AnnotationMethodHandlerAdapter.java:440)
            org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter.handle(AnnotationMethodHandlerAdapter.java:428)
            org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:967)
            org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:901)
            org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:970)
            org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:872)
            javax.servlet.http.HttpServlet.service(HttpServlet.java:650)
            org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:846)
            javax.servlet.http.HttpServlet.service(HttpServlet.java:731)
            com.aldondy.boonder.web.controllers.CharacterEncodingFilter.doFilter(CharacterEncodingFilter.java:27)
            org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
        root cause

        com.mysql.cj.core.exceptions.CJCommunicationsException: Communications link failure

        The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server.
            sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
            sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
            sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
            java.lang.reflect.Constructor.newInstance(Constructor.java:423)
            com.mysql.cj.core.exceptions.ExceptionFactory.createException(ExceptionFactory.java:54)
            com.mysql.cj.core.exceptions.ExceptionFactory.createException(ExceptionFactory.java:93)
            com.mysql.cj.core.exceptions.ExceptionFactory.createException(ExceptionFactory.java:133)
            com.mysql.cj.core.exceptions.ExceptionFactory.createCommunicationsException(ExceptionFactory.java:149)
            com.mysql.cj.mysqla.io.MysqlaSocketConnection.connect(MysqlaSocketConnection.java:83)
            com.mysql.cj.mysqla.MysqlaSession.connect(MysqlaSession.java:204)
            com.mysql.cj.jdbc.ConnectionImpl.connectOneTryOnly(ConnectionImpl.java:975)
            com.mysql.cj.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:843)
            com.mysql.cj.jdbc.ConnectionImpl.<init>(ConnectionImpl.java:440)
            com.mysql.cj.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:241)
            com.mysql.cj.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:221)
            org.hibernate.engine.jdbc.connections.internal.DriverConnectionCreator.makeConnection(DriverConnectionCreator.java:38)
            org.hibernate.engine.jdbc.connections.internal.BasicConnectionCreator.createConnection(BasicConnectionCreator.java:58)
            org.hibernate.engine.jdbc.connections.internal.PooledConnections.addConnections(PooledConnections.java:123)
            org.hibernate.engine.jdbc.connections.internal.PooledConnections.<init>(PooledConnections.java:42)
            org.hibernate.engine.jdbc.connections.internal.PooledConnections.<init>(PooledConnections.java:20)
            org.hibernate.engine.jdbc.connections.internal.PooledConnections$Builder.build(PooledConnections.java:161)
            org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl.buildPool(DriverManagerConnectionProviderImpl.java:109)
            org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl.configure(DriverManagerConnectionProviderImpl.java:72)
            org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.configureService(StandardServiceRegistryImpl.java:94)
            org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:242)
     org.hibernate.engine.jdbc.internal.JdbcServicesImpl.configure(JdbcServicesImpl.java:51)
            org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.configureService(StandardServiceRegistryImpl.java:94)
            org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:242)
            org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:210)
            org.hibernate.boot.model.process.spi.MetadataBuildingProcess.handleTypes(MetadataBuildingProcess.java:352)
            org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:111)
            org.hibernate.boot.model.process.spi.MetadataBuildingProcess.build(MetadataBuildingProcess.java:83)
            org.hibernate.boot.internal.MetadataBuilderImpl.build(MetadataBuilderImpl.java:418)
            org.hibernate.boot.internal.MetadataBuilderImpl.build(MetadataBuilderImpl.java:87)
            org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:691)
            org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:726)
            com.aldondy.boonder.bl.DataSingleton.<init>(DataSingleton.java:48)
            com.aldondy.boonder.bl.DataSingleton.instance(DataSingleton.java:74)
            com.aldondy.boonder.web.controllers.LoginCtrl.loginInner(LoginCtrl.java:62)
            com.aldondy.boonder.web.controllers.LoginCtrl.login(LoginCtrl.java:41)
            sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
            sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
            sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
            java.lang.reflect.Method.invoke(Method.java:498)
            org.springframework.web.bind.annotation.support.HandlerMethodInvoker.invokeHandlerMethod(HandlerMethodInvoker.java:180)
            org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter.invokeHandlerMethod(AnnotationMethodHandlerAdapter.java:440)
            org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter.handle(AnnotationMethodHandlerAdapter.java:428)
            org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:967)
            org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:901)
            org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:970)
            org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:872)
            javax.servlet.http.HttpServlet.service(HttpServlet.java:650)
            org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:846)
            javax.servlet.http.HttpServlet.service(HttpServlet.java:731)
            com.aldondy.boonder.web.controllers.CharacterEncodingFilter.doFilter(CharacterEncodingFilter.java:27)
            org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
        root cause

        java.net.SocketException: Permission denied (connect failed)
            java.net.PlainSocketImpl.socketConnect(Native Method)
            java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:350)
            java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:206)
            java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:188)
            java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392)
            java.net.Socket.connect(Socket.java:589)
            com.mysql.cj.core.io.StandardSocketFactory.connect(StandardSocketFactory.java:202)
            com.mysql.cj.mysqla.io.MysqlaSocketConnection.connect(MysqlaSocketConnection.java:57)
            com.mysql.cj.mysqla.MysqlaSession.connect(MysqlaSession.java:204)
            com.mysql.cj.jdbc.ConnectionImpl.connectOneTryOnly(ConnectionImpl.java:975)
            com.mysql.cj.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:843)
            com.mysql.cj.jdbc.ConnectionImpl.<init>(ConnectionImpl.java:440)
            com.mysql.cj.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:241)
            com.mysql.cj.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:221)
            org.hibernate.engine.jdbc.connections.internal.DriverConnectionCreator.makeConnection(DriverConnectionCreator.java:38)
            org.hibernate.engine.jdbc.connections.internal.BasicConnectionCreator.createConnection(BasicConnectionCreator.java:58)
            org.hibernate.engine.jdbc.connections.internal.PooledConnections.addConnections(PooledConnections.java:123)
            org.hibernate.engine.jdbc.connections.internal.PooledConnections.<init>(PooledConnections.java:42)
            org.hibernate.engine.jdbc.connections.internal.PooledConnections.<init>(PooledConnections.java:20)
            org.hibernate.engine.jdbc.connections.internal.PooledConnections$Builder.build(PooledConnections.java:161)
            org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl.buildPool(DriverManagerConnectionProviderImpl.java:109)
            org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl.configure(DriverManagerConnectionProviderImpl.java:72)
            org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.configureService(StandardServiceRegistryImpl.java:94)
            org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:242)
            org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:210)
            org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.buildJdbcConnectionAccess(JdbcEnvironmentInitiator.java:145)
            org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:66)
            org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:35)
            org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:88)
            org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:259)
            org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:233)
            org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:210)

...
    org.hibernate.boot.internal.MetadataBuilderImpl.build(MetadataBuilderImpl.java:87)
            org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:691)
            org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:726)
            com.aldondy.boonder.bl.DataSingleton.<init>(DataSingleton.java:48)
            com.aldondy.boonder.bl.DataSingleton.instance(DataSingleton.java:74)
            com.aldondy.boonder.web.controllers.LoginCtrl.loginInner(LoginCtrl.java:62)
            com.aldondy.boonder.web.controllers.LoginCtrl.login(LoginCtrl.java:41)
            sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
            sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
            sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
            java.lang.reflect.Method.invoke(Method.java:498)
            org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter.handle(AnnotationMethodHandlerAdapter.java:428)
            org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:967)
            org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:901)
            org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:970)
            org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:872)
            javax.servlet.http.HttpServlet.service(HttpServlet.java:650)
            org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:846)
            javax.servlet.http.HttpServlet.service(HttpServlet.java:731)
            com.aldondy.boonder.web.controllers.CharacterEncodingFilter.doFilter(CharacterEncodingFilter.java:27)
            org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
        note The full stack trace of the root cause is available in the Apache Tomcat/7.0.76 logs.

同样遇到了这个问题,在CentOS 7.4.1708和Tomcat 7.0.76上。 - jbu
2个回答

13

我刚刚也追踪到这个问题。我的症状与你的完全相同,我甚至尝试了你尝试过的一切。总体而言,我的问题只是因为我在CentOS上使用Tomcat和SELinux导致的。

一些人帮助我使用以下命令诊断了安全事件,并查看为什么某些操作不被允许:

sudo ausearch -m avc
sudo grep "tcp_socket" /var/log/audit/audit.log | audit2why // translates log into some human readable reasons why the audit record was generated

我看到了像这样的条目:

type=AVC msg=audit(1507861264.561:64750): avc: denied { name_connect } for pid=1326 comm="java" dest=3306 scontext=system_u:system_r:tomcat_t:s0 tcontext=system_u:object_r:mysqld_port_t:s0 tclass=tcp_socket

造成原因:缺少类型强制(TE)允许规则。

您可以使用audit2allow生成一个可加载模块以允许此访问。

然后我找到了这篇关于tomcat和SELinux的文章https://noobient.com/post/165972214381/selinux-woes-with-tomcat-on-centos-74

您可以运行以下命令,查看tomcat是否在tomcat_t安全上下文中运行。

$ps auxZ | grep tomcat

为了真正确定我的错误是否是由于SELinux引起的,我禁用了SELinux

$ sestatus // shows: SELinux status:                 enabled
$ sudo vim /etc/selinux/config // set "SELINUX=disabled"
$ sudo shutdown -r now
$ sestatus // shows: SELinux status:                 disabled

重新启动了我的机器,发现Tomcat现在正在进行出站连接。

太好了,现在我至少知道为什么会发生这种情况。当然,如果您需要SELinux,则禁用它不是解决方案。另一个可能不是解决方案的解决方法是安装Tomcat而不通过yum进行安装。Yum将使用安全上下文安装Tomcat。

我认为现在应该采取行动修改Tomcat的安全上下文或规则集,以允许其进行出站连接。


1
谢谢你!这对我非常有效。在卡了这么久之后,终于松了一口气……我按照你的建议禁用了SELinux,现在SQL可以正常工作了。接下来,我会开始研究SELinux配置,看看如何在不完全禁用它的情况下获得连接。如果你有更多的提示或者发现相关信息,请分享需要的额外步骤。 - Yoshi67
3
现在已完全解决了Bug,而无需禁用SELinux。为将tomcat添加到策略中,请使用以下2个命令: ausearch -c 'java' --raw | audit2allow -M my-java semodule -i my-java.pp - Yoshi67
这对我没有解决问题,但我所做的是将jdbc驱动程序jar文件放置在tomcat的/lib目录中并重新启动它。 - viniciusalvess
3
感谢@jbu提供的提示。通过执行命令'setsebool -P tomcat_can_network_connect_db 1',已经解决了这个问题。 - gYanI
@gYanI 这是我,Amir Forsati,来自我的朋友的电脑;我的朋友说,如果我帮他解决这个问题,他会支付我的Uber费用。谢谢你,你拯救了他的生命和我的钱! - ehsan mohajeri
显示剩余2条评论

3
这个命令解决了我的同样的权限问题:
setsebool -P tomcat_can_network_connect_db 1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接