暴力解决MySQL连接失败
本文涉及
清空root密码
完全重置MySQL权限
彻底卸载并重装MySQL
请务必在测试/本地环境操作,生产环境慎用!
场景
Spring Boot项目连接MySQL一直报
Access denied for user 'root'@'localhost'
,改密码、换驱动都没用?
步骤1:完全重置MySQL权限
1.1 停止MySQL服务
sudo systemctl stop mysql
1.2 以跳过权限方式启动MySQL(无密码直接root登录)
sudo mysqld_safe --skip-grant-tables &
1.3 登录MySQL(此时无需密码)
mysql -u root
1.4 清空root密码并刷新权限(⚠️此操作会移除所有权限限制)
UPDATE mysql.user SET authentication_string='', plugin='mysql_native_password'
WHERE user='root';
FLUSH PRIVILEGES;
EXIT;
1.5 重启MySQL正常模式
sudo systemctl restart mysql
1.6 用空密码测试连接
mysql -u root # 应该能直接登录
测试结果 | 问题根源 | 解决方案 |
---|---|---|
空密码可连接 | MySQL权限系统损坏 | 执行mysql_secure_installation 重建权限 |
空密码仍失败 | 100%网络/防火墙问题 | 继续看必杀技排查 |
💥 必杀技排查(空密码也失败时)
2.1 彻底绕过TCP/IP,用Unix Socket连接(Linux/Mac专属)
spring:datasource:url: jdbc:mysql:///your_db?socket=/var/run/mysqld/mysqld.sockusername: rootpassword: ""// 完全避开网络层,若失败说明MySQL服务本身异常。
2.2 用telnet暴力验证端口通不通
telnet 127.0.0.1 3306
看到
5.7.29
之类版本号 → 端口通的,是认证问题连接被拒绝 → 防火墙/MySQL没启动
2.3 终极验证:用MySQL命令行客户端模拟JDBC行为
mysql -u root -p"p@ssword" --protocol=tcp -h 127.0.0.1
成功 → Spring配置有问题
失败 → MySQL服务端配置问题
现象 | 问题根源 | 解决方案 |
---|---|---|
空密码可连接 | MySQL权限系统损坏 | mysql_secure_installation 重建权限 |
只有socket能连 | MySQL绑定IP错误 | 修改my.cnf 中bind-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=trueusername: rootpassword: simple123
总结:
空密码测试 → 快速区分是权限还是网络问题
Socket直连 → 100%排除网络干扰
telnet验证 → 一眼看出端口是否通
重装大招 → 终局解法,99%问题搞定
以上是参考一些网上的方法总结之后用ai进行整理了一下,我发一下防止有朋友找不到解决方法浪费时间的,记录一下小bug也是,修改的时候也是浪费了好一顿力气。