MySQL 修改 root 密碼的方式隨版本演進 (5.7/8.0 authentication_string 替代 password 列),本文彙總六種經典方法,覆蓋圖形化工具、命令行工具、SQL 語句、緊急跳過授權表模式,附版本差異提示。
mysql 數據庫 → user 表。root 用戶行,authentication_string (或 5.6 Password) 列選擇 PASSWORD() 函數,輸入新密碼。FLUSH PRIVILEGES;。適用:有 Web 管理介面、不熟悉命令行的場景。
# 修改 root 密碼為 new_pass (需輸入舊密碼)
mysqladmin -u root -p password 'new_pass'
# 修改其他用戶
mysqladmin -u user_name -p password 'new_pass'
# 限制:無法將密碼設為空串;需網絡通暢且 mysqladmin 可連接服務器
INSERT INTO mysql.user (Host, User, authentication_string)
VALUES ('%', 'jeffrey', PASSWORD('biscuit'));
FLUSH PRIVILEGES;
注意:PASSWORD() 加密不可逆,MySQL 8.0 建議用 CREATE USER ... IDENTIFIED BY 替代直接操作系統表。
REPLACE INTO mysql.user (Host, User, authentication_string)
VALUES ('%', 'jeffrey', PASSWORD('biscuit'));
FLUSH PRIVILEGES;
若用戶存在則更新,不存在則插入。同樣需 FLUSH PRIVILEGES。
-- MySQL 5.7/8.0
SET PASSWORD FOR 'jeffrey'@'%' = 'new_password'; -- 明文,服務端自動加密
-- MySQL 5.6 (需 PASSWORD())
SET PASSWORD FOR 'jeffrey'@'%' = PASSWORD('new_password');
優勢:無需 FLUSH PRIVILEGES,即時生效;語法標準、可讀性強。
GRANT USAGE ON *.* TO 'jeffrey'@'%' IDENTIFIED BY 'new_password';
特點:PASSWORD() 不需手動調用,無需 FLUSH PRIVILEGES。USAGE 僅修改密碼不授予實質權限。
# 1. 停止服務
systemctl stop mysqld
# 2. 啟動跳過授權表模式
mysqld_safe --skip-grant-tables --skip-networking &
# 3. 無密碼登錄
mysql -uroot
# 4. 修改密碼 (MySQL 5.7/8.0)
USE mysql;
UPDATE user SET authentication_string = PASSWORD('new_pass') WHERE User='root' AND Host='localhost';
FLUSH PRIVILEGES;
# 5. 正常重啟
systemctl restart mysqld
| 版本 | 密碼列名 | 推薦修改方式 |
|---|---|---|
| 5.6 | Password | SET PASSWORD ... = PASSWORD() / GRANT ... IDENTIFIED BY |
| 5.7 | authentication_string | SET PASSWORD ... = 'plain' / ALTER USER ... IDENTIFIED BY |
| 8.0 | authentication_string | ALTER USER 'root'@'localhost' IDENTIFIED BY 'new_pass'; (最標準) |
DELETE FROM mysql.user WHERE User='root' AND Host='%'; FLUSH PRIVILEGES;validate_password 強制執行。