同一RHEL6.9机器部署SonarQube5.6.7实例遇H2数据库连接错误
我来帮你一步步梳理这个问题——你在同一台RHEL 6.9机器上部署SonarQube 5.6.7,用H2做测试库,改了端口但启动时遇到数据库连接问题。从你给出的日志来看,进程启动到H2数据库初始化那一步就没后续了,大概率是端口、权限或者配置细节出了问题,咱们逐个排查:
1. 先确认9093端口是否被占用
虽然你配置了sonar.embeddedDatabase.port=9093,但保不齐这个端口已经被其他进程占用。在机器上执行以下命令检查:
netstat -tulpn | grep 9093 # 或者用更现代的ss命令 ss -tulpn | grep 9093
如果输出里有其他进程占用9093,要么杀掉那个进程,要么把sonar.embeddedDatabase.port改成其他未被占用的端口(比如9094),然后重启SonarQube。
2. 检查SonarQube数据目录的权限
SonarQube运行的用户需要对/datos/sonarqube-5.6.7/data目录有读写权限,H2的数据库文件就存在这个目录下。假设你用sonar用户运行SonarQube,执行以下命令修复权限:
chown -R sonar:sonar /datos/sonarqube-5.6.7/data chmod -R 755 /datos/sonarqube-5.6.7/data
改完权限后重启SonarQube试试。
3. 补全H2数据库的JDBC URL配置
从日志里看到H2的连接URL是jdbc:h2:tcp://localhost:9093/,这里缺了数据库名称!SonarQube默认的嵌入式H2数据库名是sonar,你需要在sonar.properties里手动指定完整的连接信息:
sonar.jdbc.url=jdbc:h2:tcp://localhost:9093/sonar sonar.jdbc.username=sonar sonar.jdbc.password=sonar
添加这几行后,重启SonarQube,应该能正确识别并连接到H2数据库。
4. 排查SELinux和防火墙的限制
RHEL 6.9的SELinux可能会阻止SonarQube绑定9093端口,或者阻止本地的TCP连接。可以先临时关闭SELinux测试:
setenforce 0
如果重启SonarQube后正常了,说明是SELinux的问题,需要添加规则允许SonarQube使用这个端口:
semanage port -a -t http_port_t -p tcp 9093
另外,检查iptables防火墙是否允许本地连接9093端口:
iptables -L INPUT -n | grep 9093
如果没有相关规则,添加允许本地回环接口的连接:
iptables -A INPUT -i lo -p tcp --dport 9093 -j ACCEPT service iptables save
5. 查看完整的Web日志定位细节
你提供的日志只到H2启动的步骤,可能后面还有具体的错误信息(比如连接超时、权限不足)。可以查看完整的web日志:
tail -f /datos/sonarqube-5.6.7/logs/web.log
根据日志里的具体错误提示,能更快定位问题根源。
内容的提问来源于stack exchange,提问作者Adrián Álvarez

