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

Windows正常的Tomcat+MySQL项目部署Ubuntu服务器连接失败求助

排查步骤与解决方案

1. 验证war包内的配置文件准确性

  • 解压war包,检查WEB-INF/classes下的配置文件(如application-prod.properties),确认JDBC连接参数与服务器MySQL完全匹配:
    • MySQL 8.0+必须显式指定时区,例如jdbc:mysql://127.0.0.1:3306/your_db?serverTimezone=UTC&useSSL=false,Windows环境可能默认兼容时区,但Ubuntu需强制配置
    • 若密码包含特殊字符(如@、&),需做URL编码(%40替代@,%26替代&)
  • 确认打包时未误将本地开发环境的配置文件(如application-dev.properties)带入war包

2. 检查MySQL用户的访问权限

  • 登录服务器MySQL,执行以下SQL确认用户权限范围:
    SELECT user, host FROM mysql.user WHERE user='your_db_user';
    
  • 若host字段为localhost,仅允许socket连接,Tomcat使用JDBC可能需要授权127.0.0.1或通配符%:
    -- MySQL 5.7及以下
    GRANT ALL PRIVILEGES ON your_db.* TO 'your_db_user'@'127.0.0.1' IDENTIFIED BY 'your_password';
    -- MySQL 8.0+
    CREATE USER 'your_db_user'@'127.0.0.1' IDENTIFIED BY 'your_password';
    GRANT ALL PRIVILEGES ON your_db.* TO 'your_db_user'@'127.0.0.1';
    FLUSH PRIVILEGES;
    

3. 排查Tomcat与JVM环境的兼容性

  • 检查war包WEB-INF/lib目录下是否存在mysql-connector-java-xxx.jar,若Tomcat全局lib目录也有同类型驱动,删除全局驱动避免版本冲突
  • 在Tomcat的bin/setenv.sh中添加JVM参数,强制指定时区与驱动版本:
    export JAVA_OPTS="-Duser.timezone=UTC -Dmysql.driver.version=8.0.36"
    

4. 直接测试JDBC连通性

  • 先用MySQL客户端验证基础连接:
    mysql -h 127.0.0.1 -P 3306 -u your_db_user -pyour_password your_db
    
  • 编写简单Java测试类,模拟Tomcat的连接逻辑(编译后在服务器运行):
    import java.sql.Connection;
    import java.sql.DriverManager;
    
    public class JdbcTest {
        public static void main(String[] args) {
            try {
                Class.forName("com.mysql.cj.jdbc.Driver");
                Connection conn = DriverManager.getConnection(
                    "jdbc:mysql://127.0.0.1:3306/your_db?serverTimezone=UTC",
                    "your_db_user",
                    "your_password"
                );
                System.out.println("连接成功");
                conn.close();
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }
    
    编译运行:javac JdbcTest.java && java JdbcTest,排除Tomcat环境外的连接问题

5. 检查容器级数据源配置(若使用JNDI)

  • 若项目依赖Tomcat的JNDI数据源,确认conf/context.xml或项目META-INF/context.xml中的配置:
    <Resource name="jdbc/YourDB" auth="Container" type="javax.sql.DataSource"
              maxTotal="100" maxIdle="30" maxWaitMillis="10000"
              username="your_db_user" password="your_password"
              driverClassName="com.mysql.cj.jdbc.Driver"
              url="jdbc:mysql://127.0.0.1:3306/your_db?serverTimezone=UTC"/>
    
    注意:MySQL 8.0+驱动类为com.mysql.cj.jdbc.Driver,5.7及以下为com.mysql.jdbc.Driver,不可混用

6. 分析完整错误堆栈

  • 查看Tomcat的catalina.out日志,提取JDBC连接失败的具体异常信息(如Access denied for user、Unknown database、Connection timed out),这些细节是定位问题的核心

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 13:30:20