基於 MySQL 5.1 官方手冊「Securing the Initial MySQL Accounts」章節,梳理三種重置 root 密碼的標準路徑。
SELECT User, Host, Password FROM mysql.user WHERE User='root';
shell> mysql -u root
mysql> SET PASSWORD FOR 'root'@'localhost' = PASSWORD('newpwd');
mysql> SET PASSWORD FOR 'root'@'%' = PASSWORD('newpwd');
shell> mysql -u root
mysql> SET PASSWORD FOR 'root'@'localhost' = PASSWORD('newpwd');
mysql> SET PASSWORD FOR 'root'@'host_name' = PASSWORD('newpwd');
host_name 為服務器主機名,對應匿名賬號主機。PASSWORD() 加密存儲,**MySQL 8.0 棄用**,改用 ALTER USER ... IDENTIFIED BY。shell> mysqladmin -u root password "newpwd"
shell> mysqladmin -u root -h host_name password "newpwd"
UPDATE mysql.user SET Password=PASSWORD('newpwd') WHERE User='root' AND Host=...; FLUSH PRIVILEGES;。shell> mysql -u root
mysql> UPDATE mysql.user SET Password = PASSWORD('newpwd') WHERE User = 'root';
mysql> FLUSH PRIVILEGES;
root 主機賬號。| 特性 | SET PASSWORD | mysqladmin | UPDATE user |
|---|---|---|---|
| 需進入 MySQL Shell | 是 | 否 | 是 |
| 單條語句覆蓋全主機 | 否 (需多條) | 否 (需多條) | 是 |
| 隱式刷新權限 | 是 | 是 | 否 (需顯式 FLUSH) |
| 適用自動化部署 | 中 | ⭐⭐⭐⭐⭐ | 中 |
| MySQL 8.0 兼容性 | 棄用 PASSWORD() | 支援 (內部轉 ALTER USER) | 強烈不建議 |
-- 1. 登入 (若無密碼跳過 -p)
mysql -u root
-- 2. 修改密碼 (原生 caching_sha2_password)
ALTER USER 'root'@'localhost' IDENTIFIED BY 'StrongP@ssw0rd';
ALTER USER 'root'@'%' IDENTIFIED BY 'StrongP@ssw0rd';
-- 3. 創建專用運維賬號,禁用 root 遠程
CREATE USER 'dba'@'10.0.0.%' IDENTIFIED BY 'AnotherStr0ngPwd';
GRANT ALL PRIVILEGES ON *.* TO 'dba'@'10.0.0.%' WITH GRANT OPTION;
DELETE FROM mysql.user WHERE User='root' AND Host!='localhost';
FLUSH PRIVILEGES;
# 測試新密碼
mysql -u root -p'StrongP@ssw0rd' -e "SELECT 1;"
# 緊急免密碼啟動 (忘記密碼時)
systemctl stop mysqld
mysqld_safe --skip-grant-tables --skip-networking &
mysql -u root
mysql> FLUSH PRIVILEGES;
mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY 'NewPwd';
mysql> EXIT;
pkill mysqld
systemctl start mysqld
ALTER USER (8.0) / SET PASSWORD (5.7)。mysqladmin password。UPDATE mysql.user + FLUSH PRIVILEGES。