приложение playframework не может подключиться к базе данных «Доступ запрещен для пользователя «root» @ «localhost» (используйте пароль: ДА)»

#mysql #playframework #playframework-2.3

Вопрос:

У меня есть правильное имя пользователя и пароль, и он правильно настроен в application.conf . Я знаю это, потому что я ничего не менял application.conf , и это сработало пару часов назад. Что изменилось, так это то, что я обновил Ubuntu с 14.04 LTS до 20.04 LTS (сделал несколько шагов в других версиях LTS). Это также обновило MySQL с 5.5.43 до 8.0.26. Изначально я не обновлял mysql-коннектор, но после того, как моему приложению не удалось подключиться к базе данных, я попытался обновить коннектор с 5.1.18 до 8.0.26.

Я могу войти в MySQL непосредственно из командной строки с mysql тем же именем пользователя и паролем application.conf , поэтому я знаю, что имя пользователя и пароль все еще работают.

Вот исключение, которое я получаю из своего приложения 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 (оба не изменились во время обновления).

Комментарии:

1. Я удалил и (повторно)создал корневого пользователя, используя этот подход askubuntu.com/questions/1131286/problem-in-accessing-to-mysql и это не сработало. Затем я попытался использовать пользователя администратора, которого я только что создал, и этот пользователь действительно работал! Так что в пользователе root есть что-то особенное, чего раньше не было. Похоже, это связано с MySQL.

Ответ №1:

удалите кавычки из пароля в конфигурации Я проверил спецификацию, вы правы, цитаты не имеют значения.

Комментарии:

1. Не работает. Конфигурация должна разрешать кавычки или без кавычек с правой стороны, но я попробовал без кавычек, чтобы быть уверенным.

2. Помните, что я не менял свою конфигурацию, версию игры (или установку), и это сработало пару часов назад! Что изменилось, так это операционная система, MySQL и любое количество базовых системных библиотек.

3. JVM также является тем же самым… Я добавлю эту версию в свою операцию.

4. Да, но это было на ubuntu 17, и это было легко сделать, так как это была пустая установка mysql для разработчиков. Я удалю свой ответ, так как я ничего не внес сюда. Счастливой охоты.

5. Это помогает людям увидеть все, что было испробовано.