首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> MySQL 資料庫 >> MySQL 綜合教學

MySQL Root 密碼重置三板斧:官方文檔推薦的 SET PASSWORD、mysqladmin 與 UPDATE 直擊系統表

     編輯:MySQL 綜合教學

官方文檔依據

基於 MySQL 5.1 官方手冊「Securing the Initial MySQL Accounts」章節,梳理三種重置 root 密碼的標準路徑。

前置查詢:檢查當前賬號狀態

SELECT User, Host, Password FROM mysql.user WHERE User='root';

方法一:SET PASSWORD (標準 SQL,需登入)

Windows

shell> mysql -u root
mysql> SET PASSWORD FOR 'root'@'localhost' = PASSWORD('newpwd');
mysql> SET PASSWORD FOR 'root'@'%' = PASSWORD('newpwd');

Unix/Linux

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。

方法二:mysqladmin (命令行工具,適合腳本)

shell> mysqladmin -u root password "newpwd"
shell> mysqladmin -u root -h host_name password "newpwd"
  • Windows/Unix 通用。
  • 密碼含空格/特殊字符**必須雙引號**。
  • 內部等效於 UPDATE mysql.user SET Password=PASSWORD('newpwd') WHERE User='root' AND Host=...; FLUSH PRIVILEGES;。

方法三:UPDATE mysql.user (直接改系統表,批量更新)

shell> mysql -u root
mysql> UPDATE mysql.user SET Password = PASSWORD('newpwd') WHERE User = 'root';
mysql> FLUSH PRIVILEGES;
  • 單條語句覆蓋所有 root 主機賬號。
  • 強制要求 FLUSH PRIVILEGES 刷新權限緩存,否則不生效。
  • 風險:繞過權限子系統驗證,誤操作極易導致無法登入。

語法細節對比表

特性SET PASSWORDmysqladminUPDATE user
需進入 MySQL Shell是否是
單條語句覆蓋全主機否 (需多條)否 (需多條)是
隱式刷新權限是是否 (需顯式 FLUSH)
適用自動化部署中⭐⭐⭐⭐⭐中
MySQL 8.0 兼容性棄用 PASSWORD()支援 (內部轉 ALTER USER)強烈不建議

MySQL 8.0+ 現代標準流程

-- 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)。
  • 自動化部署/Ansible:mysqladmin password。
  • 批量清理/緊急修復:謹慎 UPDATE mysql.user + FLUSH PRIVILEGES。
  • 核心安全原則:強密碼、禁用 root 遠程、專用最小權限賬號、定期輪換、審計日志。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved