You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.15 23:02:45