2018-05-02 22:13:47.19 | create connection SQLException, 
url: jdbc:mysql://XXXXXXXXX?serverTimezone=Hongkong&useUnicode=true&characterEncoding=utf8&useSSL=false&autoReconnect=true&useServerPrepStmts=true, errorCode 0, state 08001java.sql.SQLNonTransientConnectionException: Could not create connection to database server. Attempted reconnect 3 times. Giving up.
at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:108)
at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:95)
at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:87)
at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:61)
at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:71)
at com.mysql.cj.jdbc.ConnectionImpl.connectWithRetries(ConnectionImpl.java:932)
at com.mysql.cj.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:857)
at com.mysql.cj.jdbc.ConnectionImpl.<init>(ConnectionImpl.java:444)
at com.mysql.cj.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:230)
at com.mysql.cj.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:226)
at com.alibaba.druid.filter.FilterChainImpl.connection_connect(FilterChainImpl.java:149)
at com.alibaba.druid.filter.stat.StatFilter.connection_connect(StatFilter.java:218)
at com.alibaba.druid.filter.FilterChainImpl.connection_connect(FilterChainImpl.java:143)
at com.alibaba.druid.pool.DruidAbstractDataSource.createPhysicalConnection(DruidAbstractDataSource.java:1515)
at com.alibaba.druid.pool.DruidAbstractDataSource.createPhysicalConnection(DruidAbstractDataSource.java:1578)
at com.alibaba.druid.pool.DruidDataSource$CreateConnectionThread.run(DruidDataSource.java:2466)
Caused by: com.mysql.cj.exceptions.CJCommunicationsException: Communications link failureThe last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server.
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source)
at java.lang.reflect.Constructor.newInstance(Unknown Source)
at com.mysql.cj.exceptions.ExceptionFactory.createException(ExceptionFactory.java:59)
at com.mysql.cj.exceptions.ExceptionFactory.createException(ExceptionFactory.java:103)
at com.mysql.cj.exceptions.ExceptionFactory.createException(ExceptionFactory.java:149)
at com.mysql.cj.exceptions.ExceptionFactory.createCommunicationsException(ExceptionFactory.java:165)
at com.mysql.cj.protocol.a.NativeSocketConnection.connect(NativeSocketConnection.java:92)
at com.mysql.cj.NativeSession.connect(NativeSession.java:152)
at com.mysql.cj.jdbc.ConnectionImpl.connectWithRetries(ConnectionImpl.java:876)
... 10 more
Caused by: java.net.SocketException: No buffer space available (maximum connections reached?): connect
at java.net.DualStackPlainSocketImpl.connect0(Native Method)
at java.net.DualStackPlainSocketImpl.socketConnect(Unknown Source)
at java.net.AbstractPlainSocketImpl.doConnect(Unknown Source)
at java.net.AbstractPlainSocketImpl.connectToAddress(Unknown Source)
at java.net.AbstractPlainSocketImpl.connect(Unknown Source)
at java.net.PlainSocketImpl.connect(Unknown Source)
at java.net.SocksSocketImpl.connect(Unknown Source)
at java.net.Socket.connect(Unknown Source)
at com.mysql.cj.protocol.StandardSocketFactory.connect(StandardSocketFactory.java:173)
at com.mysql.cj.protocol.a.NativeSocketConnection.connect(NativeSocketConnection.java:66)
... 12 more大家帮忙看下,项目放在服务器上,启动tomcat后启不起来,谢谢大家!

解决方案 »

  1.   

    有几种可能导致1、mysql是否所分配的帐号允许远程连接
    2、端口是否正确,默认端口3306
    3、防火墙可以用telnet先测试下数据库端口服务是否正常
      

  2.   

    【【【问题补充】】】】
    数据库连接:driverClassName=com.mysql.cj.jdbc.Driver
    mysql版本:5.7
    jdk:1.8
    问题描述:隔一段时间就会报异常如下异常,但系统能使用;tomcat停了发布系统后就起动不了了
      

  3.   

    【【【问题补充2】】】】
    重启服务器,启动tomcat后,项目又可以正常使用了
      

  4.   

    异常后,检查下mysql的连接数,是不是你连接没释放导致。
      

  5.   

    没用过阿里巴巴数据库组件,但数据库访问从原理上而言,都应该开启连接,关闭连接。
    如下: 
           Connection conn = dataSource.getConnection();  
            //数据库操作
            conn.close();  
      

  6.   

    他的关闭连接其实是归还连接到druid连接池中
      

  7.   

    说一个比较坑的点:就是让你的数据库连接驱动版本和你的数据库版本保持一致,我曾经因为这个原因debug了一晚上。最骚的是,不一致的时候,我的测试用例是可以正常测试的,然后到tomcat启动就不行。报各种不知名错误
      

  8.   

    这个跟你描述的场景很相似
    https://blog.csdn.net/yzy199391/article/details/78911329
    如果这个不是,那得一步一步排查了,个人觉得跟服务器相关性比较大
    连接池设置大点(估计没啥用,该用完还是用完),druid自带监控,自己百度加进去,检查连接池是否泄漏,然后再数据库连接是否够用
    你这tomcat重启之后起不来,首先你得判断tomcat的进程是否真的关闭了,然后再查下是否真的存在连接
      

  9.   

    Caused by: java.net.SocketException: No buffer space available (maximum connections reached?): connect
    没有可用的缓冲区空间(达到最大连接数?)
      

  10.   

    今天遇见这个同样的问题,连接的时候报错,`com.alibaba.druid.pool.DruidDataSource,init datasource error, errorCode 0, state 08001`
    进过一番查询,最后发现是数据库连接驱动版本的问题,根据[DRDS官方文档说明](https://help.aliyun.com/document_detail/117762.html),DRDS实例mysql版本为5.X,因此如果使用了高版本的mysql驱动,是无法进行连接的。
    最后的修改方案:
    ```xml
    <dependency>
          <groupId>mysql</groupId>
          <artifactId>mysql-connector-java</artifactId>
          <version>5.1.45</version>
    </dependency>
    ```