【问题标题】:playframework app cannot connect to database "Access denied for user 'root'@'localhost' (use password: YES)"playframework 应用程序无法连接到数据库“用户'root'@'localhost'的访问被拒绝(使用密码:是)”
【发布时间】:2021-09-30 20:56:47
【问题描述】:

我有正确的用户名和密码,并且在application.conf 中配置正确。我知道这一点是因为我没有更改 application.conf 并且它在几个小时前工作。 改变的是我将 Ubuntu 从 14.04 LTS 升级到 20.04 LTS(通过其他 LTS 版本采取了几个步骤)。这也将 MySQL 从 5.5.43 升级到了 8.0.26。我最初没有升级 mysql-connector,但是在我的应用无法连接到数据库后,我尝试将连接器从 5.1.18 升级到 8.0.26。

我可以直接从命令行使用mysqlapplication.conf相同的用户名和密码登录MySQL,所以我知道用户名和密码仍然有效。

这是我从 Play Framework 应用程序中得到的异常:

Loading class `com.mysql.jdbc.Driver'. This is deprecated. The new driver class is `com.mysql.cj.jdbc.Driver'. The driver has automatically registered via the SPI and manual loading of the driver class is generally unnecessary.
Configuration error: Configuration error[Cannot connect to database [default]]
    at play.api.Configuration$.play$api$Configuration$$configError(Configuration.scala:94)
    at play.api.Configuration.reportError(Configuration.scala:743)
    at play.api.db.BoneCPPlugin$$anonfun$onStart$1.apply(DB.scala:247)
    at play.api.db.BoneCPPlugin$$anonfun$onStart$1.apply(DB.scala:238)
    at scala.collection.immutable.List.map(List.scala:273)
    at play.api.db.BoneCPPlugin.onStart(DB.scala:238)
    at play.api.Play$$anonfun$start$1$$anonfun$apply$mcV$sp$1.apply(Play.scala:91)
    at play.api.Play$$anonfun$start$1$$anonfun$apply$mcV$sp$1.apply(Play.scala:91)
    at scala.collection.immutable.List.foreach(List.scala:381)
    at play.api.Play$$anonfun$start$1.apply$mcV$sp(Play.scala:91)
    at play.api.Play$$anonfun$start$1.apply(Play.scala:91)
    at play.api.Play$$anonfun$start$1.apply(Play.scala:91)
    at play.utils.Threads$.withContextClassLoader(Threads.scala:21)
    at play.api.Play$.start(Play.scala:90)
    at play.core.StaticApplication.<init>(ApplicationProvider.scala:55)
    at play.core.server.NettyServer$.createServer(NettyServer.scala:253)
    at play.core.server.NettyServer$$anonfun$main$3.apply(NettyServer.scala:289)
    at play.core.server.NettyServer$$anonfun$main$3.apply(NettyServer.scala:284)
    at scala.Option.map(Option.scala:146)
    at play.core.server.NettyServer$.main(NettyServer.scala:284)
    at play.core.server.NettyServer.main(NettyServer.scala)
Caused by: java.sql.SQLException: Access denied for user 'root'@'localhost' (using password: YES)
    at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:129)
    at com.mysql.cj.jdbc.exceptions.SQLExceptionsMapping.translateException(SQLExceptionsMapping.java:122)
    at com.mysql.cj.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:828)
    at com.mysql.cj.jdbc.ConnectionImpl.<init>(ConnectionImpl.java:448)
    at com.mysql.cj.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:241)
    at com.mysql.cj.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:198)
    at java.sql.DriverManager.getConnection(DriverManager.java:664)
    at java.sql.DriverManager.getConnection(DriverManager.java:247)
    at com.jolbox.bonecp.BoneCP.obtainRawInternalConnection(BoneCP.java:363)
    at com.jolbox.bonecp.BoneCP.<init>(BoneCP.java:416)
    at com.jolbox.bonecp.BoneCPDataSource.getConnection(BoneCPDataSource.java:120)
    at play.api.db.BoneCPPlugin$$anonfun$onStart$1.apply(DB.scala:240)
    ... 18 more

这是从命令行成功登录的:

$ mysql -u root -p
Enter password: 
Welcome to the MySQL monitor.  Commands end with; or \g.
Your MySQL connection id is 31
Server version: 8.0.26-0ubuntu0.20.04.3 (Ubuntu)

Copyright (c) 2000, 2021, Oracle and/or its affiliates.

Oracle is a registered trademark of Oracle Corporation and/or its affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> 

application.conf 有以下几行:

db.default.driver=com.mysql.jdbc.Driver
db.default.url="jdbc:mysql://localhost/mydatabase"
db.default.user=root
db.default.pass="password"

我有 Play Framework 2.3.9 和 Java 1.8.0_51(在升级过程中都没有改变)。

【问题讨论】:

  • 我使用这种方法askubuntu.com/questions/1131286/problem-in-accessing-to-mysql 删除并(重新)创建了root 用户,这没有工作。然后我尝试使用我刚刚创建的管理员用户并且该用户 did 工作!因此,root 用户有一些特别之处,而以前并不特别。这似乎是 MySQL 的事情。

标签: mysql playframework playframework-2.3


【解决方案1】:

从配置中的密码中删除引号 我检查了规范,你说得对,没关系。

【讨论】:

  • 不起作用。配置应该允许在右侧使用引号或不使用引号,但我确实尝试过不带引号来确定。
  • 请记住,我还没有更改我的配置、播放版本(或安装),这在几个小时前就有效了!改变的是操作系统、MySQL 和任意数量的底层系统库。
  • JVM也是一样的……我把版本加到我的OP里。
  • 是的,但它在 ubuntu 17 上,并且很容易做到,因为它是 mysql 的空白开发安装。我将删除我的答案,因为我在这里什么也没做。狩猎愉快。
  • 它有助于人们看到所有的尝试。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-11-24
  • 2013-06-11
  • 2013-11-03
  • 1970-01-01
  • 2014-09-10
  • 2022-01-03
  • 2014-11-04
相关资源
最近更新 更多