暴力解决MySQL连接失败

本文涉及

  1. 清空root密码

  2. 完全重置MySQL权限

  3. 彻底卸载并重装MySQL

    务必在测试/本地环境操作,生产环境慎用!

场景

Spring Boot项目连接MySQL一直报Access denied for user 'root'@'localhost',改密码、换驱动都没用?

步骤1:完全重置MySQL权限

1.1 停止MySQL服务

sql 复制代码
sudo systemctl stop mysql

1.2 以跳过权限方式启动MySQL(无密码直接root登录)

sql 复制代码
sudo mysqld_safe --skip-grant-tables &

1.3 登录MySQL(此时无需密码)

sql 复制代码
mysql -u root

1.4 清空root密码并刷新权限(⚠️此操作会移除所有权限限制)

sql 复制代码
UPDATE mysql.user SET 
    authentication_string='', 
    plugin='mysql_native_password' 
WHERE user='root';
FLUSH PRIVILEGES;
EXIT;

1.5 重启MySQL正常模式

sql 复制代码
sudo systemctl restart mysql

1.6 用空密码测试连接

sql 复制代码
mysql -u root  # 应该能直接登录
测试结果 问题根源 解决方案
空密码可连接 MySQL权限系统损坏 执行mysql_secure_installation重建权限
空密码仍失败 100%网络/防火墙问题 继续看必杀技排查
[表格]

💥 必杀技排查(空密码也失败时)

2.1 彻底绕过TCP/IP,用Unix Socket连接(Linux/Mac专属)

java 复制代码
spring:
  datasource:
    url: jdbc:mysql:///your_db?socket=/var/run/mysqld/mysqld.sock
    username: root
    password: ""

// 完全避开网络层,若失败说明MySQL服务本身异常。

2.2 用telnet暴力验证端口通不通

java 复制代码
telnet 127.0.0.1 3306
  • 看到5.7.29之类版本号 → 端口通的,是认证问题

  • 连接被拒绝 → 防火墙/MySQL没启动

2.3 终极验证:用MySQL命令行客户端模拟JDBC行为

java 复制代码
mysql -u root -p"p@ssword" --protocol=tcp -h 127.0.0.1
  • 成功 → Spring配置有问题

  • 失败 → MySQL服务端配置问题

现象 问题根源 解决方案
空密码可连接 MySQL权限系统损坏 mysql_secure_installation重建权限
只有socket能连 MySQL绑定IP错误 修改my.cnfbind-address=0.0.0.0
telnet不通 防火墙/服务未启动 sudo ufw allow 3306 或重装MySQL

最后的大招(全失败时用)

3.1 完全卸载MySQL

复制代码
sudo apt purge mysql*
sudo rm -rf /etc/mysql /var/lib/mysql

3.2 重装MySQL并设置简单密码

复制代码
sudo apt install mysql-server
sudo mysql_secure_installation

3.3 重新用root@%权限

复制代码
CREATE USER 'root'@'%' IDENTIFIED BY 'simple123';
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%';

✅ Spring Boot配置示例(最终可用版)

复制代码
spring:
  datasource:
    url: jdbc:mysql://localhost:3306/your_db?useSSL=false&allowPublicKeyRetrieval=true
    username: root
    password: simple123

总结

  1. 空密码测试 → 快速区分是权限还是网络问题

  2. Socket直连 → 100%排除网络干扰

  3. telnet验证 → 一眼看出端口是否通

  4. 重装大招 → 终局解法,99%问题搞定

以上是参考一些网上的方法总结之后用ai进行整理了一下,我发一下防止有朋友找不到解决方法浪费时间的,记录一下小bug也是,修改的时候也是浪费了好一顿力气。