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替代&)
- MySQL 8.0+必须显式指定时区,例如
- 确认打包时未误将本地开发环境的配置文件(如
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中的配置:
注意:MySQL 8.0+驱动类为<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"/>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
相关产品推荐
相关产品推荐

