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

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创建授权用户

  1. 登录MySQL:
mysql -u root -h localhost -P 3306
  1. 查看现有用户:
SELECT user, host FROM mysql.user;
  1. 若不存在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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 08:44:55