Spring Boot无法在mysql上创建连接池

时间:2016-10-27 22:15:41

标签: java mysql spring-boot

我有一个Spring Boot应用程序,在lauching时抛出以下异常。奇怪的是同一个jar(从windows和Ubuntu运行)在Windows上全新安装MySQL 5.7但在Ubuntu 14 lts上不能运行MySQL 5.6并抛出以下异常!

root权限,密码完全相同。我尝试在Windows和Ubuntu上使用MySQL进行全新安装。在这一点上我一无所知 - 我已经在SO上尝试了类似于这个问题的答案,但没有任何作用。

这可能是mysql版本的问题吗?我可能错过了什么?

    EVERE: Unable to create initial connections of pool.
java.sql.SQLException: Access denied for user 'root'@'localhost' (using password                                                                                        : YES)
        at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:963)
        at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3966)
        at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3902)
        at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:875)
        at com.mysql.jdbc.MysqlIO.proceedHandshakeWithPluggableAuthentication(My                                                                                        sqlIO.java:1712)
        at com.mysql.jdbc.MysqlIO.doHandshake(MysqlIO.java:1228)
        at com.mysql.jdbc.ConnectionImpl.coreConnect(ConnectionImpl.java:2253)
        at com.mysql.jdbc.ConnectionImpl.connectOneTryOnly(ConnectionImpl.java:2                                                                                        284)
        at com.mysql.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:2083)
        at com.mysql.jdbc.ConnectionImpl.<init>(ConnectionImpl.java:806)
        at com.mysql.jdbc.JDBC4Connection.<init>(JDBC4Connection.java:47)
        at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
        at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstruct                                                                                        orAccessorImpl.java:62)
        at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingC                                                                                        onstructorAccessorImpl.java:45)
        at java.lang.reflect.Constructor.newInstance(Constructor.java:408)
        at com.mysql.jdbc.Util.handleNewInstance(Util.java:404)
        at com.mysql.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:410)
        at com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java                                                                                        :328)

1 个答案:

答案 0 :(得分:3)

来自MySQL的错误消息是这部分:

  

Access denied for user 'root'@'localhost' (using password: YES)

当用户/主机不存在或具有不同的密码(或在不需要密码时提供密码)时,这是标准错误消息。适用于该MySQL错误的标准故障排除。 MySQL错误表明问题所在。

您声称&#34; root权限,密码完全相同&#34;。

如果这是真的,那么连接池的配置会有所不同。

我要检查&#34;用户&#34;,&#34;主机&#34;的值。和#34;密码&#34; mysql.user表中的列。同时验证插件列是否包含'mysql_native_password'

是否有一行值'root''localhost'? (MySQL中的用户由&#34; User&#34;和&#34; Host&#34;的组合识别。)

该用户的密码哈希是否匹配? (将查询返回的哈希值与mysql.user表中存储的哈希值进行比较... SELECT PASSWORD('mysupersecret')

如果对带有DML操作的mysql.user表进行了更改,是否执行了FLUSH PRIVILEGES语句以强制MySQL服务器重新读取授权表?

这些只是一些指导原则。提供的信息不足以准确诊断问题。

https://dev.mysql.com/doc/refman/5.7/en/problems-connecting.html

  

一个非常常见的错误是使用Host =&#39;%&#39;插入一个新行。和User =&#39; some_user&#39;,认为这使您可以指定localhost从同一台机器连接。这不起作用的原因是默认权限包括一个主机=&#39; localhost&#39;和用户=&#39;&#39;。因为该行有一个主机值&#39; localhost&#39;这是比&#39;%&#39;更具体,从localhost连接时,它优先用于新行!正确的程序是插入第二行,主机=&#39; localhost&#39;和User =&#39; some_user&#39;,或删除具有Host =&#39; localhost&#39;的行。和用户=&#39;&#39;。删除行后,请记住发出FLUSH PRIVILEGES语句以重新加载授权表。

我强烈建议您考虑按照最小权限的最佳实践安全原则为您的应用创建其他而不是root