2025-03-27 12:57:36.639 ERROR 1552 --- [eate-1036257977] com.alibaba.druid.pool.DruidDataSource : create connection SQLException, url: jdbc:mysql://127.0.0.1:3306/jfgl?serverTimezone=UTC&useUnicode=true&characterEncoding=utf-8&allowMultiQueries=true, errorCode 1045, state 28000 java.sql.SQLException: Access denied for user 'root'@'localhost' (using password: YES) at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:129) ~[mysql-connector-j-8.0.31.jar:8.0.31] at com.mysql.cj.jdbc.exceptions.SQLExceptionsMapping.translateException(SQLExceptionsMapping.java:122) ~[mysql-connector-j-8.0.31.jar:8.0.31] at com.mysql.cj.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:828) ~[mysql-connector-j-8.0.31.jar:8.0.31] at com.mysql.cj.jdbc.ConnectionImpl.<init>(ConnectionImpl.java:448) ~[mysql-connector-j-8.0.31.jar:8.0.31] at com.mysql.cj.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:241) ~[mysql-connector-j-8.0.31.jar:8.0.31] at com.mysql.cj.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:198) ~[mysql-connector-j-8.0.31.jar:8.0.31] at com.alibaba.druid.pool.DruidAbstractDataSource.createPhysicalConnection(DruidAbstractDataSource.java:1701) ~[druid-1.2.16.jar:na] at com.alibaba.druid.pool.DruidAbstractDataSource.createPhysicalConnection(DruidAbstractDataSource.java:1786) ~[druid-1.2.16.jar:na] at com.alibaba.druid.pool.DruidDataSource$CreateConnectionThread.run(DruidDataSource.java:2910) ~[druid-1.2.16.jar:na]
时间: 2025-07-14 12:00:45 AIGC 浏览: 30
<think>好的,我现在需要帮助用户解决MySQL连接错误的问题,具体是errorCode 1045, state 28000,用户提到使用的是DruidDataSource。首先,我需要理解这个错误的原因。根据引用中的信息,这个错误通常是由于访问被拒绝引起的,可能涉及到用户名、密码错误,或者权限问题。
首先,我要检查用户提供的配置是否正确。比如,用户名和密码是否正确,特别是密码是否有特殊字符需要转义。比如引用5中提到,用户配置中的密码是'0722',这里是否有输入错误?或者是否需要使用正确的密码。另外,还要确认数据库是否存在,用户是否有权限访问。例如,用户是否在localhost上有权限,或者是否需要使用IP地址而不是localhost。
接下来,考虑MySQL的权限设置。可能需要使用root账户登录MySQL,然后检查用户'root'@'localhost'的权限。可以通过GRANT命令重新授权,或者创建新用户。引用1和引用5中的案例显示,用户可能错误地配置了用户或密码,或者权限不足。
另外,密码加密方式的问题也可能导致这个错误。特别是在MySQL 8.0以上版本,默认使用caching_sha2_password,而旧版的驱动可能不支持。需要确认驱动是否兼容,或者修改MySQL的密码插件为mysql_native_password。引用4中提到了字符编码问题,如果配置文件中存在乱码,比如'ä¸ å®',可能是因为编码设置不正确,导致用户名或密码错误,所以需要检查配置文件是否使用了正确的编码,如UTF-8。
还要检查连接参数是否正确,比如是否启用了SSL,或者是否需要设置allowPublicKeyRetrieval=true。引用3和引用5中的url参数包含useSSL=false和allowPublicKeyRetrieval=true,这些可能需要添加到连接字符串中,以解决SSL握手问题。
另外,用户可能使用了错误的驱动类名。例如,是否应该使用com.mysql.cj.jdbc.Driver而不是旧版的驱动。引用5中的driver-class-name是正确的,但需要确认驱动版本是否匹配。
最后,如果以上步骤都检查过,可能需要重启MySQL服务,或者检查防火墙设置,确保端口3306是开放的。还可以尝试使用命令行工具如mysql -u root -p来手动登录,验证用户名和密码是否正确,从而缩小问题范围。
总结一下,可能的解决步骤包括:验证凭据、检查权限、调整密码加密方式、检查连接参数、确认驱动和编码设置,以及手动测试连接。需要逐一排查这些可能性,找到具体的错误原因。</think>### MySQL连接错误errorCode 1045的解决方案
#### 1. **验证用户名和密码的正确性**
- **检查配置文件中用户名和密码**:确保`DruidDataSource`配置的`username`和`password`与MySQL的实际账户一致。例如,引用[5]中配置的密码为`'0722'`,需确认MySQL中`root@localhost`的密码是否一致[^5]。
- **特殊字符处理**:若密码包含特殊字符(如`@`、`#`),需在配置文件中用引号包裹或转义,例如:`password: "P@ssw0rd"`。
#### 2. **检查MySQL用户权限**
- **登录MySQL并验证权限**:
```sql
-- 查看用户权限
SELECT host, user FROM mysql.user;
-- 授权root用户(示例)
GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' IDENTIFIED BY 'your_password';
FLUSH PRIVILEGES;
```
- **创建新用户(可选)**:若`root`用户权限异常,可尝试新建用户并授权[^1][^3]。
#### 3. **调整MySQL密码加密方式**
- **MySQL 8.0+的兼容性问题**:若使用旧版驱动(如MySQL Connector/J 5.x),需将用户密码插件改为`mysql_native_password`:
```sql
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'your_password';
```
- **更新JDBC驱动**:建议使用`mysql-connector-java 8.0+`驱动,并在连接URL中添加参数:
```yaml
url: jdbc:mysql://localhost:3306/db?useSSL=false&allowPublicKeyRetrieval=true&serverTimezone=UTC
```
引用[3][^3]和[5]中均提到需配置SSL和时区参数。
#### 4. **检查连接参数和编码**
- **字符编码一致性**:确保配置文件(如`druid.properties`)的编码为UTF-8,避免用户名/密码因乱码错误(如引用[4]中的`'ä¸ å®'`问题)[^4]。
- **禁用SSL(测试用)**:若未配置SSL证书,可在URL中添加`useSSL=false`。
#### 5. **手动测试连接**
- **通过命令行验证**:
```bash
mysql -u root -p
```
输入密码后若登录失败,说明MySQL服务端配置有误,需从服务端排查。
#### 6. **其他可能原因**
- **防火墙或端口限制**:确认MySQL服务(默认端口3306)未被防火墙拦截。
- **Druid连接池配置**:检查`DruidDataSource`的连接超时时间、最大活跃数等参数是否合理。
---
###
阅读全文
相关推荐




















