遺忘 MySQL root 密碼是經典運維場景。利用 skip-grant-tables 跳過權限驗證,免密登入修改密碼,是最通用的重置方案。本文提供 Windows/Linux 完整操作步驟與事後清理清單。
skip-grant-tables 使 mysqld 啟動時不載入授權表,所有連線無需密碼、擁有最高權限。net stop mysql 或服務管理器停止[mysqld] 區段加入 skip-grant-tables
[mysqld]
port=3306
skip-grant-tables
net start mysqlmysql -u root (直接 Enter,無需密碼)
mysql> USE mysql;
mysql> UPDATE user SET authentication_string=PASSWORD('NewPass123!') WHERE User='root';
-- MySQL 5.7+ 用 authentication_string,5.6 用 Password
mysql> FLUSH PRIVILEGES;
mysql> EXIT;
net stop mysql && net start mysqlmysql -u root -p'NewPass123!'
# 1. 停止服務
systemctl stop mysqld
# 或 service mysql stop
# 2. 編輯配置
vi /etc/my.cnf
# [mysqld] 區段加入
skip-grant-tables
# 3. 啟動服務
systemctl start mysqld
# 4. 免密登入修改密碼
mysql -u root
# 同 Windows 步驟 5
# 5. 移除配置重啟
vi /etc/my.cnf # 刪除 skip-grant-tables
systemctl restart mysqld
MySQL 8.0 移除 PASSWORD() 函數,密碼修改語法:
ALTER USER 'root'@'localhost' IDENTIFIED BY 'NewPass123!';
-- 或
UPDATE mysql.user SET authentication_string='' WHERE User='root';
FLUSH PRIVILEGES;
-- 然後正常登入後再 ALTER USER 設定密碼
skip-grant-tables 已從配置移除DELETE FROM mysql.user WHERE User='';DELETE FROM mysql.user WHERE User='root' AND Host NOT IN ('localhost','127.0.0.1','::1');VALIDATE_PASSWORD 元件若有其他管理帳號(如 admin)可登入:
mysql -u admin -p
mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY 'NewPass123!';
skip-grant-tables 是把雙刃劍,用對是救命稻草,用錯是安全漏洞。**操作快、清理徹、記錄全** 是鐵律。