Я работаю над приложением Java, которое использует MySQL, работающий в контейнере Docker.Недавно я перешел из среды Windows в Mac OS и не могу подключиться к базе данных в коде Java с помощью JDBC.Я могу подключиться к базе данных с помощью MySQL Workbench, а также из клиента командной строки.
Я использую Docker для Mac (то есть без док-машины по умолчанию).
Я запускаю свой контейнер Docker с этим:
CONTAINER_NAME=hypo-mysql
PORT="3306:3306"
VOLUME_FROM="hypo-mysql-data"
CONFIG_DIR="$(pwd)/conf.d"
MYSQL_ROOT_PASSWORD="xxxxx"
MYSQL_USER="hypo"
MYSQL_PASSWORD="doktorBenArmsson"
MYSQL_DATABASE="Hypo"
docker run --name ${CONTAINER_NAME} \
-p ${PORT} \
--volumes-from ${VOLUME_FROM} \
-v ${CONFIG_DIR}:/etc/mysql/conf.d \
-e MYSQL_ROOT_PASSWORD=${MYSQL_ROOT_PASSWORD} \
-e MYSQL_USER=${MYSQL_USER} \
-e MYSQL_PASSWORD=${MYSQL_PASSWORD} \
-e MYSQL_DATABASE=${MYSQL_DATABASE} \
-d --restart=always mysql \
Когда я запускаю свое приложение Java, я начинаю с этой ошибки:
Caused by: java.sql.SQLException: Unable to load authentication plugin 'caching_sha2_password'.
Поскольку мой драйвер JDBC не поддерживает новый метод аутентификации, используемый MySQL, я изменил пользователявместо этого использовать старый собственный метод:
mysql> select user, host, plugin from user;
+------------------+-----------+-----------------------+
| user | host | plugin |
+------------------+-----------+-----------------------+
| hypo | % | caching_sha2_password |
| root | % | caching_sha2_password |
| mysql.infoschema | localhost | mysql_native_password |
| mysql.session | localhost | mysql_native_password |
| mysql.sys | localhost | mysql_native_password |
| root | localhost | caching_sha2_password |
+------------------+-----------+-----------------------+
ALTER USER 'hypo'@'%' IDENTIFIED WITH mysql_native_password BY ‘xxxxxxx’;
mysql> select user, host, plugin from user;
+------------------+-----------+-----------------------+
| user | host | plugin |
+------------------+-----------+-----------------------+
| hypo | % | mysql_native_password |
| root | % | caching_sha2_password |
| mysql.infoschema | localhost | mysql_native_password |
| mysql.session | localhost | mysql_native_password |
| mysql.sys | localhost | mysql_native_password |
| root | localhost | caching_sha2_password |
+------------------+-----------+-----------------------+
Теперь я получаю следующую ошибку из Java:
Caused by: java.sql.SQLException: Unknown system variable 'query_cache_size'
Я обновил свой драйвер JDBC в gradle:
//old driver: compile 'mysql:mysql-connector-java:5.1.38'
compile 'mysql:mysql-connector-java:5.1.46'
Теперь я получаю эту ошибку из Java:
Caused by: java.io.IOException: Keystore was tampered with, or password was incorrect
at sun.security.provider.JavaKeyStore.engineLoad(JavaKeyStore.java:780)
at sun.security.provider.JavaKeyStore$JKS.engineLoad(JavaKeyStore.java:56)
at sun.security.provider.KeyStoreDelegator.engineLoad(KeyStoreDelegator.java:224)
at sun.security.provider.JavaKeyStore$DualFormatJKS.engineLoad(JavaKeyStore.java:70)
at java.security.KeyStore.load(KeyStore.java:1445)
at com.mysql.jdbc.ExportControlled.getSSLSocketFactoryDefaultOrConfigured(ExportControlled.java:381)
... 27 more
Caused by: java.security.UnrecoverableKeyException: Password verification failed
at sun.security.provider.JavaKeyStore.engineLoad(JavaKeyStore.java:778)
Но я не могу понять, что на самом деле означает эта ошибка или что делать, чтобы избавиться от нее.Я знаю, что пароль правильный, так как я использую его при подключении через Workbench.Тем не менее, сообщение о хранилище ключей озадачивает меня ... Я не трогал хранилище ключей для начала, но затем я попытался восстановить файл хранилища ключей, но я все еще получаю то же сообщение об ошибке из Java.
ОБНОВЛЕНИЕ: Я заново создал свой док-контейнер для mysql и явно использовал версию 5:
docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
8bf6b9ddd29f mysql:5 "docker-entrypoint.s…" 15 seconds ago Up 13 seconds 0.0.0.0:3306->3306/tcp hypo-mysql
1a0add303fe0 mysql:5 "docker-entrypoint.s…" 4 minutes ago Created hypo-mysql-data
docker exec -it hypo-mysql bash
mysql --version
mysql Ver 14.14 Distrib 5.7.22, for Linux (x86_64) using EditLine wrapper
И после того, как я вернулся к нашей исходной версии драйвера jdbc 5.1.38, похоже, чтоработаю!
Любая помощь и советы с благодарностью!