修改密碼通常需要 root 權限或操作 mysql.user 表權限。普通用戶需請求管理員協助。
| 方法 | 適用場景 | 需 FLUSH PRIVILEGES | 需 PASSWORD() | 可清空密碼 | 備註 |
|---|---|---|---|---|---|
| 1. phpMyAdmin | 圖形界面,直觀 | 自動處理 | 手動勾選 | 可 | 操作 mysql.user 表 |
| 2. mysqladmin | 命令行快速改密 | 自動 | 自動 | 不可 | mysqladmin -u root -p password 'newpass' |
| 3. INSERT INTO user | 創建新用戶並設密 | 必須 | 必須 | 可 | 等同創建用戶 |
| 4. REPLACE INTO user | 覆蓋創建/更新用戶 | 必須 | 必須 | 可 | 用戶存在則更新 |
| 5. SET PASSWORD | SQL 標準語法改密 | 自動 | 必須 | 可 | SET PASSWORD FOR 'user'@'host' = PASSWORD('pass') |
| 6. GRANT ... IDENTIFIED BY | 授權同時設密 | 自動 | 自動(明文即可) | 可 | GRANT USAGE ON *.* TO 'user'@'host' IDENTIFIED BY 'pass' |
# 2. mysqladmin(最常用)
mysqladmin -u root -p password 'newpass'
# 輸入舊密碼 → 完成
# 5. SET PASSWORD(SQL 標準)
SET PASSWORD FOR 'jeffrey'@'%' = PASSWORD('biscuit');
# 無需 FLUSH PRIVILEGES
# 6. GRANT(最靈活,明文密碼)
GRANT USAGE ON *.* TO 'jeffrey'@'%' IDENTIFIED BY 'biscuit';
# 無需 PASSWORD(),無需 FLUSH
mysql.user 表(方法 3/4)必須執行 FLUSH PRIVILEGES; 使內存權限表生效。mysqladmin 無法將密碼設置為空字符串。PASSWORD() 棄用,8.0 移除,推薦 ALTER USER 'user'@'host' IDENTIFIED BY 'pass'。
# 1. 停止服務
systemctl stop mysqld
# 2. 跳過授權表啟動
mysqld_safe --skip-grant-tables --skip-networking &
# 3. 無密碼登錄修改
mysql -u root
mysql> FLUSH PRIVILEGES;
mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY 'newpass';
# 或舊版
mysql> UPDATE mysql.user SET authentication_string=PASSWORD('newpass') WHERE User='root';
mysql> FLUSH PRIVILEGES;
# 4. 正常重啟
systemctl restart mysqld