Linux 環境下遺忘 MySQL Root 密碼是常見運維場景。本文提供圖文並茂的完整重置流程:驗證安裝、確認遺忘、停止服務、跳過權限表啟動、免密登入修改密碼、驗證生效。
# 檢查 MySQL 安裝狀態 (Debian/Ubuntu) dpkg --list | grep mysql # 嘗試登入確認密碼遺忘 mysql -u root -p # 輸入密碼失敗提示:Access denied for user 'root'@'localhost'
service mysql stop # 或 systemctl stop mysqld # 確認進程結束 ps aux | grep mysql
/usr/local/mysql/bin/mysqld_safe --skip-grant-tables &
關鍵參數 --skip-grant-tables 讓 MySQL 啟動時不載入權限表,允許無密碼登入。
/usr/local/mysql/bin/mysql -u root -p # 提示輸入密碼時直接按 Enter
USE mysql;
UPDATE user SET Password = PASSWORD('新密碼') WHERE User = 'root';
FLUSH PRIVILEGES;
QUIT;
# 終止跳過權限的進程 pkill -f mysqld_safe # 正常啟動 service mysql start # 或 systemctl start mysqld # 驗證新密碼 mysql -u root -p'新密碼' SHOW DATABASES;
| 問題 | 原因 | 解決 |
|---|---|---|
| mysqld_safe 啟動失敗 | 舊進程未結束/權限不足/路徑錯誤 | pkill -9 mysqld; 確認 basedir/datadir; 以 root 執行 |
| UPDATE 後密碼不生效 | 未執行 FLUSH PRIVILEGES / 欄位名錯誤 | MySQL 5.7+ 欄位為 authentication_string; 執行 FLUSH PRIVILEGES |
| 啟動報錯 PID 檔案 | 資料目錄權限/SELinux/殘留 lock 檔 | chown -R mysql:mysql datadir; 關閉 SELinux; 刪除 .pid 檔 |
-- MySQL 5.7+
UPDATE user SET authentication_string = PASSWORD('新密碼') WHERE User = 'root';
-- MySQL 8.0+ (需指定加密插件)
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '新密碼';