我有一个Spring应用程序,它在开始时抛出下面的异常。奇怪的是,相同的jar (从windows和Ubuntu运行时)在Windows上使用MySQL 5.7的新安装,但在Ubuntu14LTS上的MySQL 5.6上不工作,并抛出下面的异常!
根目录特权、密码完全相同。我在Windows和Ubuntu的MySQL上尝试了新的安装。在这一点上,我毫无头绪--我尝试过类似于这个问题的回答步骤,但没有任何效果。
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)发布于 2016-10-27 22:34:06
来自MySQL的错误消息如下所示:
Access denied for user 'root'@'localhost' (using password: YES)
这是一个标准错误消息,当用户/主机不存在或有不同的密码时(或者在不需要密码时提供密码)。适用对该MySQL错误的标准故障排除。MySQL错误指出了问题所在。
您声称“根特权、密码完全相同”。
如果是这样的话,那么连接池的配置就会有所不同。
我会检查mysql.user表中"User“、"Host”和"Password“列的值。还请验证插件列是否包含'mysql_native_password'。
是否有值为'root'和'localhost'的行?( MySQL中的用户通过“用户”和“主机”的组合来标识。)
该用户的密码哈希是否匹配?(将查询返回的哈希与存储在mysql.user表.SELECT PASSWORD('mysupersecret')中的哈希进行比较)
如果对带有DML操作的mysql.user表进行了更改,那么执行FLUSH PRIVILEGES语句是为了强制MySQL服务器重新读取授权表吗?
这些只是一些准则。没有提供足够的信息来准确诊断问题。
https://dev.mysql.com/doc/refman/5.7/en/problems-connecting.html
一个非常常见的错误是插入带有Host='%‘和user=’some‘的新行,认为这样可以指定本地主机从同一台机器连接。这不起作用的原因是默认特权包括具有Host='localhost‘和User='’的行。因为该行的主机值“localhost”比'%‘更具体,所以在从localhost连接时优先使用它而不是新行!正确的过程是插入具有Host='localhost‘和User=’some‘的第二行,或者删除具有Host='localhost’和User=‘User=’的行。删除行后,请记住发出刷新权限语句来重新加载授予表。
我强烈建议您考虑为应用程序创建root以外的用户,遵循最小特权的最佳实践安全原则。
https://stackoverflow.com/questions/40295067
复制相似问题