使用LayerShift部署Java项目时无法连接远程MariaDB数据库
LayerShift服务器MariaDB数据库连接超时问题排查与解决
问题背景
使用LayerShift部署基于Eclipse 19开发的Java项目WAR包时,数据库连接失败。本地连接本地MariaDB正常,但本地运行程序连接LayerShift服务器上的MariaDB时,抛出连接超时异常。
环境配置
- MariaDB版本:本地与服务器均为10.4.28
- JDBC驱动:已将
mariadb-java-client-3.1.4.jar添加到项目类路径及Tomcat/lib目录 - 驱动加载代码:
Class.forName("org.mariadb.jdbc.Driver"); - 生成的JDBC连接URL:
jdbc:mariadb://node495323-studiquizv3.j.layershift.co.uk:3306/studiquiz - 连接代码:
Connection connection = DriverManager.getConnection(url, BenutzerDB, PasswortDB);
错误信息
java.sql.SQLNonTransientConnectionException: Socket fail to connect to host:address=(host=node495323-studiquizv3.j.layershift.co.uk)(port=3306)(type=primary). Connection timed out: no further information
最小复现代码
package studiquiz_test_p1; import java.sql.*; public class main { public static void main(String[] args) { try { Class.forName("org.mariadb.jdbc.Driver"); String server = "mariadb://node495323-studiquizv3.j.layershift.co.uk"; String port = "3306"; String database = "studiquiz"; String URL = "jdbc:" + server + ":" + port + "/" + database; String BenutzerDB = "root"; String PasswortDB = "password"; Connection connection = DriverManager.getConnection(URL, BenutzerDB, PasswortDB); //Statement statement = connection.createStatement(); System.out.println("Connection successful."); } catch (ClassNotFoundException e) { System.out.println("Connection failed [ClassNotFoundException]."); e.printStackTrace(); } catch (SQLException e) { System.out.println("Connection failed [SQLException]."); e.printStackTrace(); } } }
排查与解决方案
验证网络连通性:在本地终端执行以下命令测试端口是否可达:
telnet node495323-studiquizv3.j.layershift.co.uk 3306 # 或使用nc命令(若已安装) nc -zv node495323-studiquizv3.j.layershift.co.uk 3306如果返回连接失败,说明网络层面存在阻断,需处理防火墙或端口开放问题。
开放服务器端口与防火墙:登录LayerShift控制面板,确保3306端口已开放给你的本地IP地址(或允许所有IP,注意安全风险)。同时检查服务器系统防火墙(如iptables、ufw)是否放行3306端口的入站连接。
配置数据库用户远程访问权限:登录LayerShift服务器的MariaDB控制台,执行以下SQL语句,授权指定用户从本地IP访问目标数据库(将
你的本地IP替换为实际IP,若允许所有IP可用%):GRANT ALL PRIVILEGES ON studiquiz.* TO 'root'@'你的本地IP' IDENTIFIED BY 'password'; FLUSH PRIVILEGES;检查MariaDB绑定地址配置:查看服务器上的MariaDB配置文件(通常为
/etc/my.cnf或/etc/mysql/my.cnf),确认bind-address设置为0.0.0.0(允许所有IP连接),若为127.0.0.1则仅允许本地访问。修改后需重启MariaDB服务生效。JDBC URL参数优化:若上述步骤完成后仍有问题,可尝试为URL添加参数排除SSL或时区问题:
String URL = "jdbc:mariadb://node495323-studiquizv3.j.layershift.co.uk:3306/studiquiz?useSSL=false&serverTimezone=UTC";
内容的提问来源于stack exchange,提问作者Eric
相关产品推荐
相关产品推荐

