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

Tomcat连接池连接Laravel Forge MySQL8时JDBC URL配置报错求助

问题排查与解决方案

核心错误原因

你使用的com.mysql.cj.jdbc.Driver是官方MySQL JDBC驱动,它仅支持jdbc:mysql://开头的标准连接URL,不识别jdbc:mysql+ssh://这种带SSH隧道的自定义格式,这就是报错的直接原因。


解决方案(两种可选)

方案一:手动建立SSH隧道(推荐,稳定性更高)

既然你能通过MySQL Workbench连接,大概率Workbench是通过SSH隧道访问远程数据库的。你可以先在本地建立SSH端口转发,再用普通JDBC URL连接:

  1. 建立SSH隧道:
    在终端执行以下命令(默认远程SSH端口为22,MySQL默认端口为3306;如果你的端口不同,自行修改):

    ssh -L 3307:127.0.0.1:3306 forge@199.199.199.199
    

    这条命令会把本地的3307端口,转发到远程服务器的3306端口(MySQL服务端口)。

  2. 修改Tomcat Context配置:
    将Resource中的URL替换为标准MySQL格式,同时补充MySQL8必需的参数:

    <Resource name="jdbc/mysql" auth="Container"
              type="javax.sql.DataSource" 
              driverClassName="com.mysql.cj.jdbc.Driver"
              url="jdbc:mysql://127.0.0.1:3307/forge?useSSL=false&serverTimezone=UTC&allowPublicKeyRetrieval=true"
              username="forge" password="veryverysecret"
              maxTotal="20"  <!-- 建议设合理值,避免连接耗尽 -->
              maxIdle="10"
              maxWaitMillis="30000"/>
    

    注意:username和password是你的MySQL数据库账号密码,不是SSH登录账号密码(如果两者一致则无需修改)。

  3. 依赖检查:
    确保Tomcat的lib目录下存在官方MySQL JDBC驱动包(版本需≥8.0,比如mysql-connector-java-8.0.30.jar)。


方案二:使用支持SSH的第三方JDBC驱动

如果不想手动维护SSH隧道,可以使用第三方驱动直接实现JDBC+SSH连接:

  1. 添加驱动依赖:
    如果用Maven管理项目,在pom.xml中添加:

    <dependency>
        <groupId>com.github.gwenn</groupId>
        <artifactId>mysql-ssh-jdbc</artifactId>
        <version>0.0.7</version>
    </dependency>
    

    也可以直接下载jar包放到Tomcat的lib目录下。

  2. 修改Tomcat Context配置:
    替换驱动类和正确的SSH格式URL:

    <Resource name="jdbc/mysql" auth="Container"
              type="javax.sql.DataSource" 
              driverClassName="com.github.gwenn.mysqlssh.Driver"
              url="jdbc:mysql+ssh://forge@199.199.199.199:22/127.0.0.1:3306/forge?usePrivateKey=true&privateKeyFile=/path/to/your/private/key"
              username="forge" password="veryverysecret"
              maxTotal="20"
              maxIdle="10"
              maxWaitMillis="30000"/>
    

    注意:privateKeyFile需要替换为你本地SSH私钥的绝对路径(比如C:/Users/xxx/.ssh/id_rsa或/home/xxx/.ssh/id_rsa)。


额外注意事项

  • MySQL8默认使用caching_sha2_password加密方式,确保JDBC驱动版本≥8.0,且URL中包含allowPublicKeyRetrieval=true参数,否则可能出现连接失败。
  • maxTotal="-1"会允许创建无限多的数据库连接,容易导致服务器资源耗尽,建议设置为合理数值(如20)。

内容的提问来源于stack exchange,提问作者LostAndConfused

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 00:27:18