遺忘 MySQL root 密碼是常見運維場景。本文提供 Debian/Ubuntu/CentOS 通用的標準化重置流程,涵蓋跳過授權表啟動、密碼更新、權限刷新、恢復正常模式全步驟。
systemctl stop mysql # systemd
# 或
service mysql stop # SysVinit
# 或
mysql.server stop # 通用腳本
mysqld_safe --skip-grant-tables --skip-networking &
參數說明:
--skip-grant-tables:不載入權限表,任意用戶無密碼登錄--skip-networking:僅本地 Unix Socket 連接,防止外部入侵mysql -u root
-- 進入 mysql> 提示符後執行:
USE mysql;
UPDATE user SET authentication_string=PASSWORD('NewStrongPass123!') WHERE User='root';
FLUSH PRIVILEGES;
EXIT;
⚠️ MySQL 5.7+ 欄位名為 authentication_string;5.6 及之前為 Password。可用 DESC user; 確認。
mysqladmin -u root -p shutdown # 用新密碼關閉臨時實例
systemctl start mysql # 正常模式啟動
mysql -u root -p'NewStrongPass123!' -e "SELECT VERSION();"
authentication_stringcaching_sha2_password,若客戶端不支持可改回 mysql_native_password:
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'NewPass123!';
FLUSH PRIVILEGES 在 8.0 可省略(隱式提交),但保留無害。net stop mysql 或服務管理器C:\mysql-init.txt:
ALTER USER 'root'@'localhost' IDENTIFIED BY 'NewStrongPass123!';
"C:\Program Files\MySQL\MySQL Server 8.0\bin\mysqld.exe" --init-file=C:\mysql-init.txt --console
mysql_secure_installation:移除匿名用戶、禁止 root 遠程登錄、刪除 test 庫、重新加載權限SELECT/INSERT/UPDATE/DELETE)ALTER USER 'app_user'@'%' PASSWORD EXPIRE INTERVAL 90 DAY;INSTALL PLUGIN audit_log SONAME 'audit_log.so';(企業版)| 現象 | 可能原因 | 對策 |
|---|---|---|
mysqld_safe` 無法啟動 | 權限問題、datadir 路徑錯誤、端口被佔用 | 查看 /var/log/mysql/error.log,修正 my.cnf 路徑 |
| 更新密碼後仍無法登錄 | 未執行 FLUSH PRIVILEGES、列名錯誤、插件不匹配 | 確認列名、執行 FLUSH PRIVILEGES、檢查 plugin 列 |
啟動報 unknown variable 'skip-grant-tables' | 放在錯誤區段(需在 [mysqld] 或命令行) | 移至命令行參數或 [mysqld] 區段 |
按標準流程操作,root 密碼重置通常在 5 分鐘內完成。建議將此流程納入運維手冊,定期演練。