我正在阅读官方文件,并停留在以下步骤
文档中使用的应用程序支持以下环境变量 MYSQL_HOST
及 MYSQL_USER
等等,但我的程序是java,不支持它们。相反,我在java代码中使用以下连接字符串连接到db:
return new DefaultConfiguration().set(DriverManager.getConnection(
"jdbc:mysql://127.0.0.1:3306/test?serverTimezone=UTC",
"root",
"111111"))
.set(SQLDialect.MYSQL);
那么我应该如何更改连接字符串呢?因为现在连接失败,如下所示
Jul 05, 2021 12:31:35 AM org.jooq.tools.JooqLogger error
SEVERE: Error in file: /app/build/tmp/generateJooq/config.xml. Error : Communications link failure
The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server.
com.mysql.cj.jdbc.exceptions.CommunicationsException: Communications link failure
对于 host
,我应该把它改成 localhost
? 我跑 select user();
在mysql命令行中,并得到以下结果
+----------------+
| user() |
+----------------+
| root@localhost |
+----------------+
这是否意味着主持人是 localhost
?
但是我跑的时候, show variables;
价值 hostname
是 1f1632505b1f
,那么为什么有两个主机名呢?
对于端口,我检查了mysql映像,它公开了 3306
,所以我认为这部分我不需要改变,对吗?
对于db名称,我创建了一个名为 test
所以我认为这部分应该是好的。用户名和密码也一样。
检查mysql容器:my.cnf
文件指定 bind-address=0.0.0.0
:
mysql容器的日志:
2条答案
按热度按时间qxsslcnc1#
您可能需要将mysql服务器配置为侦听所有地址,例如,在docker容器中编辑此文件
并具体说明
另见https://serverfault.com/q/139323
ipakzgxi2#
结果是我忘了先运行迁移。。。
在我的
Dockerfile
,我应该跑的./gradlew flywayMigrate
然后./gradlew runApp
(这是一项类型为的任务JavaExec
),但我忘记了前者,因此出现了错误。与直觉相反的是,错误只提到数据库连接失败,而没有提到迁移。。
谢谢你的帮助!