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

MySQL 不重啟服務修改 root 密碼的 3 種方法

     編輯:MySQL 綜合教學

場景一:已知高權限帳號 (推薦,最安全)

擁有 UPDATE 權限於 mysql.user 表的帳號 (如另一管理員帳號)。

-- 直接更新
UPDATE mysql.user SET authentication_string=PASSWORD('new_password') WHERE User='root';
FLUSH PRIVILEGES;

MySQL 8.0+ 使用 authentication_string 欄位,5.7 用 Password。

場景二:知 root 密碼,僅想定期輪換 (最簡單)

# 命令列工具
mysqladmin -u root -p'old_password' password 'new_password'

# 或 SQL
ALTER USER 'root'@'localhost' IDENTIFIED BY 'new_password';
-- 8.0+ 支援
SET PASSWORD FOR 'root'@'localhost' = 'new_password';

場景三:忘記 root 密碼,且無其他高權限帳號 (免重啟技巧)

原理:複製 mysql.user 表檔案到可寫入的庫 (如 test),用低權限帳號修改後複製回來,發送 SIGHUP 重載權限。

  1. 複製表檔案 (MyISAM 表適用,InnoDB 需配合 innodb_file_per_table):
    cp /var/lib/mysql/mysql/user.{MYD,MYI} /var/lib/mysql/test/
    chown mysql:mysql /var/lib/mysql/test/user.*
  2. 低權限帳號連線修改:
    mysql -u low_user -p
    USE test;
    UPDATE user SET authentication_string=PASSWORD('new_pwd') WHERE User='root';
  3. 覆蓋回原表並重載:
    mv /var/lib/mysql/mysql/user.MYD /var/lib/mysql/mysql/user.MYD.bak
    mv /var/lib/mysql/mysql/user.MYI /var/lib/mysql/mysql/user.MYI.bak
    cp /var/lib/mysql/test/user.{MYD,MYI} /var/lib/mysql/mysql/
    chown mysql:mysql /var/lib/mysql/mysql/user.*
    
    # 發送 SIGHUP 重載權限 (不重啟進程)
    kill -SIGHUP $(pgrep -n mysqld)
  4. 驗證:
    mysql -u root -p'new_pwd' -e "SELECT 1;"

傳統 skip-grant-tables 法 (需重啟,不推薦)

# 1. my.cnf 加入
[mysqld]
skip-grant-tables
skip-networking

# 2. 重啟 mysqld
# 3. 免密登入修改
UPDATE mysql.user SET authentication_string=PASSWORD('new_pwd') WHERE User='root';
FLUSH PRIVILEGES;

# 4. 移除配置,再次重啟

安全建議

  • 生產環境嚴禁無密碼/弱密碼 root 帳號
  • 定期輪換密碼,記錄審計日誌
  • 禁用 root 遠程登入,僅允許本機或跳板機
  • 使用密碼管理系統 (Vault/1Password) 存儲
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved