全新安裝 MySQL 後,root@localhost 往往無密碼。官方文檔提供三種設置密碼方式,本文對比其語法、適用場景與底層機制。
需登入 MySQL 客戶端。
mysql -u root
mysql> SET PASSWORD FOR 'root'@'localhost' = PASSWORD('newpwd');
mysql> SET PASSWORD FOR 'root'@'%' = PASSWORD('newpwd');
mysql> SET PASSWORD FOR 'root'@'host_name' = PASSWORD('newpwd');
PASSWORD() 函數加密存儲 (MySQL 8.0 棄用,改用 caching_sha2_password 原生認證)。localhost (Socket) 和 %/host_name (TCP) 兩個賬號。無需進入 MySQL Shell,適合腳本自動化。
# 本機
mysqladmin -u root password "newpwd"
# 指定主機 (遠程/TCP)
mysqladmin -u root -h host_name password "newpwd"
UPDATE mysql.user SET Password=PASSWORD(...) + FLUSH PRIVILEGES。mysql -u root
mysql> UPDATE mysql.user SET Password = PASSWORD('newpwd') WHERE User = 'root';
mysql> FLUSH PRIVILEGES;
root 賬號 (localhost, %, host_name)。FLUSH PRIVILEGES 刷新權限緩存,否則不生效。| 維度 | SET PASSWORD | mysqladmin | UPDATE user |
|---|---|---|---|
| 交互方式 | SQL 客戶端 | Shell 命令 | SQL 客戶端 |
| 自動化適合度 | 中 (需 expect/管道) | ⭐⭐⭐⭐⭐ | 中 |
| 賬號覆蓋範圍 | 單賬號/條 (需多條) | 單賬號/條 | 全匹配 User='root' (最全) |
| 權限刷新 | 隱式 | 隱式 | **顯式 FLUSH PRIVILEGES** |
| 安全性 | 標準 | 標準 | 低 (直接改系統表) |
| MySQL 8.0 兼容 | 棄用 PASSWORD() | 支援 (內部改用 ALTER USER) | 不建議 (認證插件變更) |
-- 推薦:ALTER USER (原生認證插件 caching_sha2_password)
ALTER USER 'root'@'localhost' IDENTIFIED BY 'newpwd';
ALTER USER 'root'@'%' IDENTIFIED BY 'newpwd';
-- 或創建專用管理員賬號,禁用 root 遠程
CREATE USER 'admin'@'%' IDENTIFIED BY 'strong_pwd';
GRANT ALL PRIVILEGES ON *.* TO 'admin'@'%' WITH GRANT OPTION;
DELETE FROM mysql.user WHERE User='root' AND Host!='localhost';
FLUSH PRIVILEGES;
# 測試新密碼關閉服務
mysqladmin -u root -p shutdown
Enter password: newpwd
ALTER USER (8.0+) 或 SET PASSWORD (5.7)。mysqladmin password。UPDATE mysql.user + FLUSH PRIVILEGES。