MySQL root 密碼忘記?三種修改密碼方式與跳過授權表啟動救援全流程
救援核心流程
- 停止 MySQL 服務:
systemctl stop mysqld / service mysql stop
- 跳過授權表啟動:
mysqld --skip-grant-tables &
- 免密登入:
mysql -u root (直接回車)
- 修改密碼(三選一)
- 刷新權限:
FLUSH PRIVILEGES;
- 重啟 MySQL 正常模式
三種修改密碼方式
方式一:直接更新 mysql.user 表(通用、直觀)
-- 修改當前登入用戶密碼
SET PASSWORD = PASSWORD('NewPass123!');
-- 修改指定用戶@主機 (需該賬號存在)
SET PASSWORD FOR 'bob'@'%.example.org' = PASSWORD('NewPass123!');
方式三:GRANT ... IDENTIFIED BY(兼容舊版)
-- 8.0 預設 caching_sha2_password,舊客端可能不支援
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'NewPass123!';
FLUSH PRIVILEGES;
常見救援坑點
| 現象 | 原因 | 解決 |
mysqld --skip-grant-tables 前台卡住 | 預設前台運行,非報錯 | 加 & 後台,或新開終端登入 |
| ERROR 2003 (HY000): Can't connect | 未啟動、端口不對、socket 路徑錯 | netstat -anpt | grep 3306、指定 -S /var/lib/mysql/mysql.sock |
| 修改後仍無法登入 | 未 FLUSH PRIVILEGES、密碼插件不匹配 | 必須刷新、檢查 plugin 列 |
| 權限表損壞 | 誤刪 mysql 數據庫 | mysql_install_db / mysqld --initialize 重建 |
安全建議
- 生產環境禁用 root 遠程登入:
DELETE FROM mysql.user WHERE user='root' AND host!='localhost';
- 使用密碼管理器儲存複雜密碼
- 定期輪換密碼並審計
mysql.user
- 上一篇文章: C++ (VS2012) 連接 MySQL 5.6 完整配置指南:32/64 位坑點與代碼實戰
- 下一篇文章: Navicat 定時事件調用 MySQL 存儲過程:游標批量統計與 Event Scheduler 啟用全流程
Copyright ©
程式碼之家 All Rights Reserved