- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在开发一个 Java 应用程序,它使用在 Docker 容器中运行的 MySQL。我最近从Windows环境切换到Mac OS,我无法使用JDBC连接到Java代码中的数据库。我可以使用 MySQL Workbench 连接到数据库,也可以从命令行客户端连接到数据库。
我在 Mac 上使用 Docker(即没有默认的 docker 机器)。
我用这个启动我的 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 使用的新身份验证方法,我更改了用户以改为使用旧的 native 方法:
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'
我在 gradle 中升级了我的 JDBC 驱动程序:
//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 连接时使用了相同的密码。然而,关于 keystore 的消息让我感到困惑......我一开始并没有接触 keystore ,但后来我尝试重新生成 keystore 文件,但我仍然从 Java 得到相同的错误消息。
更新:我为 mysql 重新创建了我的 docker 容器并明确使用了版本 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 之后,它似乎可以正常工作了!
非常感谢任何帮助和提示!
最佳答案
您在 docker 镜像中使用 mysql8,它具有不同的身份验证实现。
查看以下链接中的caching_sha2_password
更改
Authentication plugin 'caching_sha2_password' cannot be loaded
https://dev.mysql.com/doc/refman/8.0/en/caching-sha2-pluggable-authentication.html
所以暂时把mysql版本降到5.7试试。
在旁注中通过链接使用 mysql-8 的正确步骤。查看以下 jdbc-connector 链接。
https://dev.mysql.com/doc/refman/8.0/en/upgrading-from-previous-series.html#upgrade-caching-sha2-password-compatible-connectors
关于java - 无法使用 JDBC 连接到 docker 中的本地 MySQL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50527534/
我正在开发一个 voip 调用应用程序。我需要做的是在接到来电时将 Activity 带到前台。我在应用程序中使用 Twilio,并在收到推送消息时开始调用。 问题是我试图在接到任何电话时显示 Act
我是一名优秀的程序员,十分优秀!