“CentOS 上 Java 连不上数据库(库)”这个现象很常见,但原因有很多种,不能一概而论。下面我按常见原因 → 排查方法 → 解决思路给你系统梳理一下。
请先确认:
Connection refusedTimeoutAccess deniedUnknown databasesystemctl status mysqld
# 或
systemctl status mariadb
systemctl status postgresql
✅ 解决:
systemctl start mysqld
systemctl enable mysqld
netstat -lntp | grep 3306
# 或
ss -lntp | grep 3306
如果看到的是:
127.0.0.1:3306
说明只允许本机连接
✅ 修改数据库配置:
/etc/my.cnfbind-address=0.0.0.0
然后重启数据库。
CentOS 默认开 firewalld
firewall-cmd --list-all
✅ 放行端口:
firewall-cmd --add-port=3306/tcp --permanent
firewall-cmd --reload
或直接测试(临时):
systemctl stop firewalld
常见错误:
❌ 错误:
jdbc:mysql://localhost:3306/db
但 Java 在 Docker 容器里
✅ 正确:
jdbc:mysql://宿主机IP:3306/db
或使用:
jdbc:mysql://host.docker.internal:3306/db
MySQL 示例:
SELECT host FROM mysql.user WHERE user='root';
如果只有 localhost,Java 远程连不上。
✅ 授权:
GRANT ALL PRIVILEGES ON *.* TO 'user'@'%' IDENTIFIED BY 'password';
FLUSH PRIVILEGES;
getenforce
如果是 Enforcing,可能拦数据库连接。
✅ 临时关闭测试:
setenforce 0
✅ 永久:
vi /etc/selinux/config
SELINUX=disabled
mysql-connector-j
mysql-connector-java
✅ 确认:
spring.datasource.url=...
spring.datasource.username=...
spring.datasource.password=...
spring.datasource.hikari.connection-timeout=30000
你可以照着查:
你可以直接贴:
我可以一步一步帮你定位到具体哪一行配置错了。