涵蓋 mysqladmin 工具、SQL 語句、MySQL 5.7/8.0 版本差異,適用於 root 與普通用戶密碼變更。
mysqladmin -u root password 'new_password'
mysqladmin -u root -p'old_password' password 'new_password'
| 參數 | 說明 |
|---|---|
-u | 用戶名 |
-p | 密碼 (緊跟無空格),單獨 -p 會提示輸入 |
password | 關鍵字,後接新密碼 |
mysql -u root -p
UPDATE mysql.user
SET password = PASSWORD('new_password')
WHERE User = 'root';
FLUSH PRIVILEGES;
UPDATE mysql.user
SET authentication_string = PASSWORD('new_password')
WHERE User = 'root';
FLUSH PRIVILEGES;
ALTER USER 'root'@'localhost' IDENTIFIED BY 'new_password';
-- 或指定認證插件
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'new_password';
SET PASSWORD FOR 'root'@'localhost' = PASSWORD('new_password');
-- 或 8.0
SET PASSWORD FOR 'root'@'localhost' = 'new_password';
# 1. 停止服務
systemctl stop mysqld
# 2. 跳過權限啟動
mysqld_safe --skip-grant-tables --skip-networking &
# 3. 無密碼登入修改
mysql -u root
UPDATE mysql.user SET authentication_string = PASSWORD('new_password') WHERE User='root';
FLUSH PRIVILEGES;
EXIT;
# 4. 正常重啟
pkill mysqld
systemctl start mysqld
# 測試新密碼
mysql -u root -p'new_password' -e "SELECT USER(), CURRENT_USER();"
-- 輸出範例
+----------------+----------------+
| USER() | CURRENT_USER() |
+----------------+----------------+
| root@localhost | root@localhost |
+----------------+----------------+
| 現象 | 原因 | 解決 |
|---|---|---|
| Rows matched: 0 | Host 不匹配 (如 'root'@'%' vs 'root'@'localhost') | WHERE User='root' AND Host='localhost' |
| 密碼不生效 | 未執行 FLUSH PRIVILEGES | 必須刷新權限 |
| Plugin 錯誤 | MySQL 8.0 預設 caching_sha2_password | 指定 mysql_native_password |
| Access denied | 舊密碼錯誤 | 用 --skip-grant-tables 重置 |
ALTER USER (8.0) 或 SET PASSWORD (5.7)mysql.user 表根據 MySQL 版本與場景選擇適當方法,牢記 FLUSH PRIVILEGES 讓修改即時生效。