如何通过jdbc:mysql连接Siteground MySQL?连接失败该如何排查?
连接Siteground MySQL失败排查步骤
1. 补全异常输出定位根因
当前代码吞掉了所有异常信息,无法判断是驱动加载失败、权限错误还是网络不通,先修改catch块输出异常详情:
public void Connect() { try { Class.forName("com.mysql.cj.jdbc.Driver"); con = DriverManager.getConnection("jdbc:mysql://sgp39.siteground.asia:3306/dbdyyh2gyaltys", "username", "password"); } catch (ClassNotFoundException ex) { System.out.println("驱动加载失败:" + ex.getMessage()); ex.printStackTrace(); } catch (SQLException ex) { System.out.println("数据库连接失败:" + ex.getMessage()); ex.printStackTrace(); } }
根据输出的错误信息可以直接缩小排查范围。
2. 检查Siteground MySQL权限配置
Siteground默认关闭MySQL公网访问权限,这是大部分连接失败的原因,按以下顺序核对配置:
- 登录Siteground后台,进入对应站点的MySQL管理模块,找到「远程MySQL」设置项,将你运行GUI项目的设备公网IP添加到访问白名单
- 确认你使用的数据库账号、密码为Siteground后台分配的授权账号,账号必须已经绑定
dbdyyh2gyaltys数据库并配置了读写权限 - 注意Siteground生成的数据库用户名、数据库名都会自动带站点前缀,不要手动省略前缀填错参数
3. 调整JDBC连接串参数
权限配置完成后如果还是连接失败,在原连接串后补充必要的适配参数:
jdbc:mysql://sgp39.siteground.asia:3306/dbdyyh2gyaltys?useSSL=false&serverTimezone=Asia/Singapore&allowPublicKeyRetrieval=true
useSSL=false:公网测试时可以先关闭SSL校验,避免证书校验不通过导致连接失败serverTimezone=Asia/Singapore:你使用的是新加坡节点主机,需匹配服务器时区避免时区不兼容报错allowPublicKeyRetrieval=true:避免公网连接时公钥获取失败的异常
4. 网络连通性校验
如果调整后还是无法连接,先在运行项目的设备上执行命令测试端口连通性:telnet sgp39.siteground.asia 3306
如果端口连接失败,说明是网络层面拦截,需要核对IP白名单是否正确、本地防火墙/运营商是否拦截了3306端口的出站请求。
内容的提问来源于stack exchange,提问作者Joseph
相关产品推荐
相关产品推荐

