Ubuntu Server 20.04 Java mysql-connector-j-8.0.33.jar в PATH для подключения к базе данных MySQL из основного приложения Java

Вопрос или проблема

У меня проблемы с Glassfish 4.1 при подключении к базе данных MySQL. Я проверил, что можно войти в базу данных под пользователем root и с паролем. Когда веб-приложение вызывается, Glassfish постоянно сообщает:

java.sql.SQLException: Ошибка при выделении соединения. Причина: Соединение не может быть выделено, так как: ДоступDenied для пользователя 'root'@'localhost'

Я написал небольшое приложение, которое должно протестировать, может ли Java успешно подключиться к MySQL, прежде чем я смогу продолжить поиск ошибок. Мой вопрос: как мне добавить mysql-connector-j-8.0.33.jar (/home/glassfish/glassfish4/glassfish/lib/mysql-connector-j-8.0.33.jar) в путь пользователя перед выполнением приложения, которое будет ссылаться на драйвер для подключения к базе данных MySQL? Должен ли я сделать что-то вроде этого, что не работает:

# МОДУЛЬ MYSQL НА ПУТИ
export MSQLCONNECTOR_HOME=/home/glassfish/glassfish4/glassfish/lib
echo $MSQLCONNECTOR_HOME
# установить глобальную переменную PATH ПРОБЕЛ АДД *_HOME
export PATH=$PATH:$JAVA_HOME/bin:MSQLCONNECTOR_HOME

Извините за то, что не взаимодействовал по этой проблеме, она все еще не решена с моей стороны, нужно было заняться другой работой. У меня по-прежнему та же проблема после создания другого пользователя специально для базы данных и выполнения запросов с его помощью.

Создание пользователя было выполнено следующим образом:

CREATE USER 'dbUser'@'localhost' IDENTIFIED BY 'dbUserPWD';
GRANT SELECT, INSERT, UPDATE, DELETE ON test_db.* TO 'dbUser'@'localhost';

Строка подключения выглядит следующим образом:

jdbc:mysql://127.0.0.1:3306/test_db?zeroDateTimeBehavior=CONVERT_TO_NULL&serverTimezone=UTC&useSSL=false&allowPublicKeyRetrieval=true

даже это все еще приводит к пустому соединению. Я запускаю это в Windows из исполняемого jar для тестирования кода, и оно работает без проблем. Буду признателен за любые предложения.

Сообщение об ошибке, которое вы приводите

Access denied for user 'root'@'localhost'

Происходит из MySQL, так что драйвер правильно загружен и соединение установлено, но доступ отклонен (или скорее, не предоставлен пользователю root с localhost). Вы можете проверить свойства соединения и/или URL JDBC, который вы используете. Пользователь root звучит так, как будто вы запускаете MySQL под пользователем root в Linux, можете подтвердить или вы пытаетесь подключиться к MySQL под пользователем root? (Оба являются плохой практикой, вам не следует использовать пользователя root для запуска ваших приложений/процессов – если это не явно требуется, и мы скажем – и/или не использовать пользователя root MySQL для доступа к вашей БД).

Ответ или решение

Для решения проблемы с подключением вашего Java-приложения к базе данных MySQL через Glassfish 4.1, давайте разберем несколько аспектов, включая настройки окружения, подключения и безопасность.

Шаг 1: Убедитесь, что драйвер MySQL Connector/J доступен

Для подключения к базе данных MySQL вам необходимо убедиться, что драйвер mysql-connector-j-8.0.33.jar находится в CLASSPATH вашего приложения. Если вы пытаетесь установить драйвер в переменную PATH, учтите, что это не является правильным подходом, так как PATH используется для исполняемых файлов, а не для библиотек Java.

Вместо этого добавьте JDBC-драйвер в CLASSPATH перед запуском вашего приложения. Например, вы можете использовать следующую команду:

export CLASSPATH=$CLASSPATH:/home/glassfish/glassfish4/glassfish/lib/mysql-connector-j-8.0.33.jar

Вы можете проверить, добавлен ли драйвер правильно:

echo $CLASSPATH

Шаг 2: Проверьте настройки базы данных

Ошибки, связанные со входом в MySQL, такие как Access denied for user 'root'@'localhost', указывают на проблемы с правами пользователя или неверные учетные данные. Я настоятельно рекомендую создать нового пользователя для вашей базы данных, как вы уже сделали, но убедитесь, что права доступа настроены правильно.

Для пользователя dbUser, который вы создали, выполните следующие шаги:

CREATE USER 'dbUser'@'localhost' IDENTIFIED BY 'dbUserPWD';
GRANT ALL PRIVILEGES ON test_db.* TO 'dbUser'@'localhost';
FLUSH PRIVILEGES;

Это позволит пользователю dbUser полностью управлять базой данных test_db.

Шаг 3: Проверьте строку подключения

Убедитесь, что ваша строка подключения сформирована правильно. Ваша строка выглядит хорошо:

jdbc:mysql://127.0.0.1:3306/test_db?zeroDateTimeBehavior=CONVERT_TO_NULL&serverTimezone=UTC&useSSL=false&allowPublicKeyRetrieval=true

Однако замените 127.0.0.1 на localhost, чтобы удостовериться, что ваш сервер MySQL принимает соединения именно с этого хоста. Строка подключения должна выглядеть так:

jdbc:mysql://localhost:3306/test_db?zeroDateTimeBehavior=CONVERT_TO_NULL&serverTimezone=UTC&useSSL=false&allowPublicKeyRetrieval=true

Шаг 4: Проверка подключения из Java

Убедитесь, что ваш Java-код для подключения к базе данных выглядит примерно так:

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;

public class DatabaseConnector {
    public static void main(String[] args) {
        String url = "jdbc:mysql://localhost:3306/test_db?zeroDateTimeBehavior=CONVERT_TO_NULL&serverTimezone=UTC&useSSL=false&allowPublicKeyRetrieval=true";
        String user = "dbUser";
        String password = "dbUserPWD";

        try (Connection connection = DriverManager.getConnection(url, user, password)) {
            System.out.println("Соединение успешно установлено.");
        } catch (SQLException e) {
            e.printStackTrace();
            System.out.println("Ошибка соединения: " + e.getMessage());
        }
    }
}

Шаг 5: Дополнительные проверки

  1. Убедитесь, что сервер MySQL запущен и доступен для соединений.
  2. Проверьте файл конфигурации MySQL (my.cnf или my.ini) на наличие ограничений по доступу.
  3. Убедитесь, что брандмауэр (if applicable) не блокирует порты.

Следуя этим шагам, вы сможете успешно подключиться к вашей базе данных MySQL из вашего Java-приложения. Если у вас возникнут дополнительные вопросы, не стесняйтесь их задавать.

Оцените материал
Добавить комментарий

Капча загружается...