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

从Windows迁移到Ubuntu后Java Spring MVC应用无法连接MySQL数据库

排查Ubuntu下Spring MVC无法连接MySQL的问题

嘿,我来帮你捋捋这个问题——从Windows迁移到Ubuntu后代码没改但连不上MySQL,十有八九是环境配置的差异导致的,咱们一步步排查:

1. 先确认MySQL服务是否正常运行

Ubuntu默认安装MySQL后,有时候不会自动启动服务,这是最常见的坑:

  • 检查服务状态:sudo systemctl status mysql
  • 如果显示"inactive",启动服务:sudo systemctl start mysql
  • 为了避免下次开机还要手动启动,设置开机自启:sudo systemctl enable mysql

2. 检查MySQL用户的认证插件(重点!)

MySQL 8.0及以上版本,Ubuntu默认用caching_sha2_password认证插件,而Windows上的旧驱动或者Spring配置可能只支持mysql_native_password:

  • 登录MySQL命令行:mysql -u root -p(用你的root账号)
  • 查询用户的认证方式:
    SELECT user, plugin FROM mysql.user WHERE user='mydbuser';
    
  • 如果结果里plugin是caching_sha2_password,修改为兼容的插件:
    ALTER USER 'mydbuser'@'localhost' IDENTIFIED WITH mysql_native_password BY 'mypassword';
    FLUSH PRIVILEGES;
    

3. 验证连接字符串的正确性

你用的连接字符串里有&,这是XML配置文件里的转义字符(因为XML里&必须转义),但如果你的配置是.properties文件,就不能用&,得直接写&:

  • 如果是XML配置(比如applicationContext.xml):jdbc:mysql://localhost:3306/mydatabase?user=mydbuser&password=mypassword 是正确的
  • 如果是.properties配置:要改成 jdbc:mysql://localhost:3306/mydatabase?user=mydbuser&password=mypassword
    另外,如果你用的是MySQL 8.x驱动,还需要添加时区参数,否则会因为时区不匹配报错:
    jdbc:mysql://localhost:3306/mydatabase?user=mydbuser&password=mypassword&serverTimezone=UTC

4. 用命令行直接测试数据库连接

跳过Spring,直接用MySQL客户端测试,排除数据库本身的问题:

  • 执行命令:mysql -u mydbuser -p mydatabase
  • 输入密码后如果能成功进入数据库,说明账号、密码、数据库名都是对的,问题出在Spring配置或者驱动上;如果连不上,就回到前面的步骤检查用户权限和服务状态。

5. 检查MySQL端口是否匹配

确认MySQL实际监听的端口是3306:

  • 登录MySQL后执行:
    SHOW GLOBAL VARIABLES LIKE 'PORT';
    
  • 如果端口不是3306,修改连接字符串里的端口号,或者调整MySQL配置文件(/etc/mysql/mysql.conf.d/mysqld.cnf)里的port参数,重启MySQL服务。

如果这些步骤都试过还是不行,建议开启Spring的DEBUG日志,看具体的连接错误栈——有时候Spring提示"无数据库连接"只是表面现象,日志里会有更详细的报错信息(比如驱动找不到、时区错误等)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 08:23:25