System information:
- Operating system (distribution) and version: Pop_OS 20.4
- DBeaver version: 7.15
- Additional extensions: None
Connection specification:
- Database name and version: MySQL 8.0.21
- Driver name: mysql-connector-java:RELEASE [8.0.17]
- Do you use tunnels or proxies (SSH, SOCKS, etc)?
Describe the problem you’re observing:
I created a docker instance with the command:
docker run --name mysql -e MYSQL_ROOT_PASSWORD=123456 -d -p 3306:3306 mysql
But when I try to create a new connection, it throws an error saying:
Public Key Retrieval is not allowed
I saw people on stackoverflow changing the driver property AllowPublicKeyRetrieval to true and the option useSSL to false. And it really works. But when I was tweaking the properties, I found that you don’t really need to change those properties to make it work, you can just set useSSL or sslMode to another value, it can be an invalid value, and change this properties back to its default values and the connection works as intented, even if I put useSSL to false, the connection still works with no problem, unless I remove the container and create again, where the initial error returns. In my vision, if it is working with the properties manually set, it should work with the default ones too, this is why I’m submiting this as a bug. If it is not, can someone please explain why this happen?
Steps to reproduce, if exist:
- Create a new docker container with the command:
docker run --name mysql -e MYSQL_ROOT_PASSWORD=123456 -d -p 3306:3306 mysql
-
Create a connection for MySQL with the root user and the password 123456.
-
When testing the connection, it should throw the error saying Public Key Retrieval is not allowed.
-
Go to the tab Driver Properties, look for the option useSSL change it to false and test the connection, it should give you the same error as before.
-
Now change the property back to true, and the connection should work.
-
The connection works even if I set the property back to false. What I don’t understand.
-
Instead of changing the property to false, you can put any other invalid value, test the connection, it will throw an error saying the value is not acceptable, change the property back to true, the default value, test the connection, and it will work.
-
Instead changing the useSSL property, you can change the sslMode property. Change it from PREFERRED to DISABLED, test the connection, the error will persist, change it back to PREFERRED, the error goes away. You can, too, put a invalid value, test the connection, change it back to PREFERRED and now the connection works.
Include any warning/errors/backtraces from the logs
Установка и настройка займет 25-35 минут
1. Скачивание установщика MySQL Server
#
Будем устанавливать MySQL как сервис в систему, нам будет необходима любая версия 8.0.x.
Скачиваем дистрибутив с официального сайта по ссылке:
https://dev.mysql.com/downloads/mysql/
Убедитесь что выбрана macOS
в списке операционных систем и нажмите кнопку Download
у версии с большим размером. Это версия содержит все компоненты для установки.
После будет предложено зарегистрироваться, мы этого избегаем нажимая по ссылке No thanks, just start my download.
Разрешите скачать этот файл (если вы используете Safari)
После нажатия начнется скачивание файла вида mysql-8.0.23-macos10.15-x86_64.dmg
Дождитесь окончания скачивания файла и после откройте Finder с файлом или запустите его из списка загрузок.
Откроется
Двойной клик на файл .pkg и начнется установка MySQL.
2. Установка
#
При запуске MySQL, первое, вас благодарят за выбор MySQL, нажимайте Продолжить:
Далее необходимо принять лицензию на ПО для продолжения установки:
Предложат выбрать расположение сервера, уведомят о требуемом месте на жестком диске, менять настройки не требуется, нажмите Установить
Перед установкой попросят ввести пароль вашего пользователя, вводите пароль и нажимайте Установить ПО:
Как только закончится установка, начнется конфигурация сервера MySQL.
Выбираем Use Strong Password Ecryption
, так как нам не требуется совместимость с версией 5.7
После нажатия Next, будет важный этап — установка пароля для root
пользователя. Минимальное требование к паролю — восемь символов.
Важно запомнить этот пароль, при его потери возможна потеря доступа в базам данных. А также может привести к переустановке MySQL
Если выставлена галочка на Start MySQL Server once...
, то после завершения установки — MySQL сервер будет запущен. При нажатии на Finish
, установка завершится.
Если вы видите этот экран — установка завершена успешно!
Проверка установки
#
Чтобы убедиться что mysql сервер работает, необходимо зайти в Системные настройки и в самом конце найдете MySQL:
Запускайте и увидите панель управления:
Если ваш скриншот выглядит также, то значит сервер уже работает и готов к использованию.
- Если вам потребуется остановка сервиса нажмите
Stop MySQL Server
, если вновь запустить — снова нажмите наStart MySQL Server
. Каждая операция потребует от вас ввода пароля. - Также если стоит галочка
Start MySQL when your computer starts up
, то MySQL будет стартовать при запуске системы. Если вы не планируете использовать MySQL постоянно, можете отключить галочку и запускать сервер при необходимости.
Так как мы убедились что сервер работает. Самое время проверить как он работает:
Проверка работы MySQL
#
Запускайте терминал и переходите в папку c исполняемыми файлами установленного MySQL:
Запускаем консоль mysql
, где мы указываем два параметра:
-u
и после него указывается пользователь под которым мы хотим зайти в консоль mysql
-p
после него не указываем ничего, а значит нас спросят ввести пароль отдельно. Можно пароль вводить после, например так ./mysql -u username -p 12345
, но это менее безопасно. Так как пароль остается в открытом виде.
Запросят пароль от пользователя root
, этот тот который был задан при установке. Как только введете верный пароль, окажетесь в консоли MySQL:
При вводе пароля, символы не будут отображаться (звездочек привычных нет), при этом символы будут вводиться.
Именно тут работают команды SQL, для проверки запросим данные по всем таблицам:
В данной консоли выполнять все команды показанные в видеоуроках.
После этого можно выйти из терминала командой exit
🌟 Настройка PATH
#
Переменная окружения PATH, содержит в себе пути, по которым идет поиск файлов для исполнения, благодаря чему не требуется набирать полный путь до исполняемого файла, а достаточно ввести его имя в консоль. У каждого пользователя может быть свой набор путей, в данном разделе мы добавим возможность запускать mysql консоль простой командой mysql
, без перехода в папку /usr/local/mysql/bin
каждый раз, или вызова по длинному пути: /usr/local/mysql/bin/mysql -u root -p
Для этого необходимо сделать следующие действия
- перейти в домашнюю директорию
- проверить, есть ли в ней файл
.zchrs
Если ничего не найдено,
создайте файл, если файл есть — откройте его в любом редакторе, в примере будет использовать консольный редактор nano.
- создаем файл командой:
Проверим что файл создался
Файл на месте, теперь откроем для редактирования:
Откроется редактор в который вставьте:
# add path to MySQL
export PATH=/usr/local/mysql/bin:$PATH
первая строка это комментарий, а вторая это добавление к переменной пути в исполняемую файлу, а также добавление того что уже есть в PATH.
Сохраните нажав ctrl+O
и выйти из редактора ctrl+X
Чтобы активировать настройку сейчас же, выполните команду
После этого можно уже использовать mysql консоль командой
В дальнейшем для подключения через терминал к консоли MySQL, достаточно сразу набирать
3. Работа с MySQL через DBeaver
#
Кроме работы через консоль, можно использовать программы клиенты с графическим интерфейсом, предлагаем установить и работать с MySQL через одну из них.
DBeaver — это свободный кроссплатформенный менеджер баз данных для Linux, Windows и macOS. Поддерживает большое количество баз данных — MySQL, PostgreSQL, Firebird, SQLite, ODBC, Oracle и другие
4. Установка и запуск DBeaver
#
Перейдите на https://dbeaver.io/download/
Выберите колонку Community Edition и найдите ссылку на скачивание dmg:
Если вы предпочитаете устанавливать через Homebrew, то ниже на странице скачивания есть команда для brew.
После скачивания — запускайте dmg файл и перенесите иконку Dbeaver на папку Application
Теперь можете через Launchpad или через Spotlight запустить DBeaver:
Вас могут попросить подтвердить запуск приложения в первый раз, нажимайте Открыть:
Можете согласиться с созданием тестовой бд, и посмотреть на то как работает DBeaver.
И когда закончите, создадим новое подключение. При этом сервер MySQL у вас должен быть установлен и запущен.
5. Создание подключения
#
Нажмите на кнопку создать новое подключение:
Выберите из списка баз данных MySQL
Введите данные для соединения:
Параметр | Значение |
---|---|
Сервер: | locahost |
Порт: | 3306 |
Пользователь: | root |
Пароль: | тот что задали при установке MySQL |
Базу данных выбирать не надо.
Перед нажатием Готово
выполните тест соединения Тест соединения...
, если все ок то нажимайте Готово
, у вас появится новое соединение.
Вам могут предложить скачать драйвера для подключения к базе данных, нажмите Скачать
📌 Если возникает ошибка `Public Key Retrieval is not allowed`
↕
Зайдите в Свойства драйвера
и установите значение allowPublicKeyRetrieval
в значение true
Повторите тестирование подключения
При успешном тестировании подключении у вас будет сообщение:
Нажимайте ОК и Готово в окне настроек соединения.
В списке подключений у вас добавится новое:
6. Создание базы данных
#
Раскройте подключение и выберите в контекстом меню на элементе Базы данных пункт Создать объект “База данных”
Выберите указанные кодировки, и имя наберите skillbox
В списке Databases появится skillbox
7. Загрузка дампа в базу данных
#
В контекстном меню базы даных skillbox
выберите Set as default
(^⇧A
), чтобы выполняемые скрипты использовали по умолчанию эту бд.
Через меню Файл
→ Открыть файл
(^O
) откройте sql дамп который вам надо загрузить, например, тот что приложен к домашнему заданию.
После того как файл открылся, в панели выберите с каким сервером и какой базой данной будет работать данный код, и в завершении необходимо нажать кнопку Выполнить SQL скрипт (⌥X)
По завершению вы увидите сообщение о результате, сколько запросов выполнено, сколько записей было обновлено, затраченное время:
На скриншоте успешное выполнение. Закрывайте вкладку с открытым файлом, в дальнейшем он нам не понадобится.
Обновите структуру базы данных, чтобы нам увидеть внесенный изменения:
Откройте структуру базы данных skillbox и щелкните двойным кликом по таблице Courses, и перейдите во вкладку Данные:
На этом загрузка дампа завершена, можно работать с данными!
8. Как написать запрос к базе данных
#
Активируйте нужную базу данных выбрав в меню базы данных Задать по умолчанию
, как делали перед заливкой дампа.
Далее открываем новый запрос через меню или хоткеем ^]
:
Убедитесь что в меню указана именно база данных skillbox
и напишите первый запрос, давайте получим все курсы c длительностью более 15 часов:
SELECT * FROM courses c WHERE c.duration > 15;
После того как написали запрос, запускайте его выполнение, для этого нажмите указанную кнопку или используйте клавиши ⌥X
Таким образом вы можете работать и базами данными и писать запросы в удобной форме. Выполнять все задания вы можете в DBeaver.
Connection Java-MySql : Public Key Retrieval is not Allowed
In this post, I will provide a solution for frequently occurring exception while working with MySQL database — «Connection Java-MySql: Public Key Retrieval is not allowed«.
Problem
I have encountered this issue and below issue description.
I was using a MySQL database with Java using the mysql-connector 8.0.13 version. Everything seems to be correct but I have this exception:
Exception in thread "main" java.sql.SQLNonTransientConnectionException: Public Key Retrieval is not allowed
Stack Trace:
Exception in thread "main" java.sql.SQLNonTransientConnectionException: Public Key Retrieval is not allowed at
com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:108) at
com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:95) at
com.mysql.cj.jdbc.exceptions.SQLExceptionsMapping.translateException(SQLExceptionsMapping.java:122) at
com.mysql.cj.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:862) at com.mysql.cj.jdbc.ConnectionImpl.
(ConnectionImpl.java:444) at com.mysql.cj.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:230)
Solution
We need to set AllowPublicKeyRetrieval=true to allow the client to automatically request the public key from the server.
allowPublicKeyRetrieval=true
You can also disable SSL and also suppress the SSL errors:
useSSL=false
Complete Code Snippet (Use this code)
private static String jdbcURL = "jdbc:mysql://localhost:3306/mysql_database?useSSL=false&allowPublicKeyRetrieval=true"; private static String jdbcUsername = "root"; private static String jdbcPassword = "root";
Reference
- https://stackoverflow.com/questions/50379839/connection-java-mysql-public-key-retrieval-is-not-allowed
- https://mysqlconnector.net/connection-options/
JDBC
JDBC 4.2
MySQL
Free Spring Boot Tutorial | Full In-depth Course | Learn Spring Boot in 10 Hours
Watch this course on YouTube at Spring Boot Tutorial | Fee 10 Hours Full Course