本文涉及
清空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也是,修改的時候也是浪費了好一頓力氣。