Debian系统下MySQL本地可登录但Spring Boot连接权限拒绝
问题描述
在Debian系统中,执行命令mysql -u root -h localhost -P 3306可成功登录MySQL 8.0.33,登录信息如下:
Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 213 Server version: 8.0.33 MySQL Community Server - GPL Copyright (c) 2000, 2023, Oracle and/or its affiliates. Oracle is a registered trademark of Oracle Corporation and/or its affiliates. Other names may be trademarks of their respective owners. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. mysql>
但启动Spring Boot 2.5.3时,使用如下application.properties配置:
spring.datasource.jdbcUrl=jdbc:mysql://127.0.0.1:3306/mydb?useSSL=false spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver spring.datasource.username=root
出现权限拒绝异常:
java.sql.SQLException: Access denied for user 'root'@'localhost' at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:129) ~[mysql-connector-java-8.0.26.jar:8.0.26] at com.mysql.cj.jdbc.exceptions.SQLExceptionsMapping.translateException(SQLExceptionsMapping.java:122) ~[mysql-connector-java-8.0.26.jar:8.0.26] at com.mysql.cj.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:828) ~[mysql-connector-java-8.0.26.jar:8.0.26] at com.mysql.cj.jdbc.ConnectionImpl.<init>(ConnectionImpl.java:448) ~[mysql-connector-java-8.0.26.jar:8.0.26] at com.mysql.cj.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:241) ~[mysql-connector-java-8.0.26.jar:8.0.26] at com.mysql.cj.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:198) ~[mysql-connector-java-8.0.26.jar:8.0.26] at com.zaxxer.hikari.util.DriverDataSource.getConnection(DriverDataSource.java:138) ~[HikariCP-4.0.3.jar:na] at com.zaxxer.hikari.pool.PoolBase.newConnection(PoolBase.java:364) ~[HikariCP-4.0.3.jar:na] at com.zaxxer.hikari.pool.PoolBase.newPoolEntry(PoolBase.java:206) ~[HikariCP-4.0.3.jar:na] at com.zaxxer.hikari.pool.HikariPool.createPoolEntry(HikariPool.java:476) ~[HikariCP-4.0.3.jar:na] at com.zaxxer.hikari.pool.HikariPool.checkFailFast(HikariPool.java:561) ~[HikariCP-4.0.3.jar:na] at com.zaxxer.hikari.pool.HikariPool.<init>(HikariPool.java:115) ~[HikariCP-4.0.3.jar:na] at com.zaxxer.hikari.HikariDataSource.getConnection(HikariDataSource.java:112) ~[HikariCP-4.0.3.jar:na]
解决方法
1. 补充数据库密码配置
当前application.properties仅配置了用户名,JDBC连接需要显式指定密码(哪怕命令行登录无需密码)。添加密码配置:
spring.datasource.password=你的root账户密码
2. 统一连接方式(localhost vs 127.0.0.1)
MySQL中root@localhost和root@127.0.0.1是两个独立的用户:
localhost默认用Unix socket认证,可能无需密码127.0.0.1走TCP/IP连接,需要密码且对应账户需有权限
两种处理方式:
方式A:为127.0.0.1创建授权用户
- 登录MySQL:
mysql -u root -h localhost -P 3306
- 查看现有用户:
SELECT user, host FROM mysql.user;
- 若不存在
root@127.0.0.1,执行创建与授权:
CREATE USER 'root'@'127.0.0.1' IDENTIFIED BY '你的密码'; GRANT ALL PRIVILEGES ON mydb.* TO 'root'@'127.0.0.1'; FLUSH PRIVILEGES;
方式B:修改Spring Boot连接地址为localhost
将JDBC URL改为localhost,使用socket连接:
spring.datasource.jdbcUrl=jdbc:mysql://localhost:3306/mydb?useSSL=false&allowPublicKeyRetrieval=true
3. 升级MySQL连接器版本
当前MySQL服务器是8.0.33,但项目用的连接器是8.0.26,版本差异可能引发兼容问题。升级连接器到与服务器一致的版本:
- Maven项目修改
pom.xml:
<dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>8.0.33</version> </dependency>
- Gradle项目修改
build.gradle:
implementation 'mysql:mysql-connector-java:8.0.33'
4. 确认目标数据库存在
登录MySQL后执行以下命令,确认mydb数据库存在:
SHOW DATABASES;
若不存在,创建数据库:
CREATE DATABASE IF NOT EXISTS mydb;
内容的提问来源于stack exchange,提问作者July
相关产品推荐
相关产品推荐

