首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Spring未能在mysql上创建连接池

Spring未能在mysql上创建连接池
EN

Stack Overflow用户
提问于 2016-10-27 22:15:40
回答 1查看 5.4K关注 0票数 1

我有一个Spring应用程序,它在开始时抛出下面的异常。奇怪的是,相同的jar (从windows和Ubuntu运行时)在Windows上使用MySQL 5.7的新安装,但在Ubuntu14LTS上的MySQL 5.6上不工作,并抛出下面的异常!

根目录特权、密码完全相同。我在Windows和Ubuntu的MySQL上尝试了新的安装。在这一点上,我毫无头绪--我尝试过类似于这个问题的回答步骤,但没有任何效果。

mysql版本可能会出现问题吗?我可能遗漏了什么?

代码语言:javascript
复制
    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)
EN

回答 1

Stack Overflow用户

发布于 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以外的用户,遵循最小特权的最佳实践安全原则。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40295067

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档