从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
相关产品推荐
相关产品推荐

