MySQL 修改 root 密碼四大方法(含忘記密碼強制重置)
場景一:已知舊密碼,正常修改
方法 1:SET PASSWORD(推薦 5.7+)
mysql -u root -p
SET PASSWORD = 'NewPass123'; -- 5.7.6+ 語法
-- 或
SET PASSWORD FOR 'root'@'localhost' = 'NewPass123';
FLUSH PRIVILEGES;
方法 2:UPDATE mysql.user 表
mysql -u root -p
USE mysql;
UPDATE user SET authentication_string = PASSWORD('NewPass123') WHERE User = 'root';
FLUSH PRIVILEGES;
方法 3:mysqladmin 命令列工具
mysqladmin -u root -p'oldpwd' password 'NewPass123'
# 注意:-p 與舊密碼之間無空格
場景二:忘記 root 密碼,強制重置
通用步驟(Linux/Windows)
- 停止服務
Linux: systemctl stop mysqld / service mysql stop
Windows: net stop mysql
- 啟動跳過權限模式
Linux: mysqld_safe --skip-grant-tables --skip-networking &
Windows: 編輯 my.ini 在 [mysqld] 加 skip-grant-tables,再 net start mysql
- 免密登入並更新
mysql -u root
USE mysql;
UPDATE user SET authentication_string = PASSWORD('NewPass123') WHERE User = 'root';
FLUSH PRIVILEGES;
EXIT;
- 恢復正常模式並重啟
移除 skip-grant-tables,重啟服務。
MySQL 8.0+ 特別說明
PASSWORD() 函數已移除,推薦用 ALTER USER 'root'@'localhost' IDENTIFIED BY 'NewPass123';。
- 若在
skip-grant-tables 模式下無法用 ALTER USER,可手動計算 SHA256 雜湊更新 authentication_string,但極不推薦,建議升級客戶端工具後用 ALTER USER。
驗證修改成功
mysql -u root -p'NewPass123' -e "SELECT USER();"
安全提醒
skip-grant-tables 期間**任何人可免密登入**,務必加 --skip-networking 限制本地訪問,並盡快恢復。
- 生產環境修改 root 密碼前,確認所有應用配置已同步更新,避免服務中斷。