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

MySQL Root 密碼重置的兩種通用方法(含 Windows/Linux 通用方案)

     編輯:MySQL 綜合教學

適用場景

  • 遺忘 Root 密碼
  • 接手無文檔的歷史實例
  • 自動化腳本需要臨時免密操作

方法一:修改配置文件 + 重啟服務(通用,推薦 Linux)

  1. 編輯 my.cnf (Linux) 或 my.ini (Windows),在 [mysqld] 區塊添加:
    skip-grant-tables
  2. 重啟 MySQL 服務:
    # Linux
    systemctl restart mysqld
    # 或 service mysql restart
    
    # Windows (管理員 CMD)
    net stop mysql
    net start mysql
  3. 無密碼登入並修改密碼:
    mysql -uroot
    USE mysql;
    -- MySQL 5.7+ 使用 authentication_string 字段
    UPDATE user SET authentication_string=PASSWORD('NewPass123!') WHERE User='root';
    -- 5.6 及以下使用 password 字段
    -- UPDATE user SET password=PASSWORD('NewPass123!') WHERE User='root';
    FLUSH PRIVILEGES;
    EXIT;
  4. 關鍵步驟:移除配置中的 skip-grant-tables,再次重啟服務恢復正常認證。

方法二:非服務模式啟動 --skip-grant-tables(適用 Windows、不想動配置文件)

  1. 停止正在運行的 MySQL 服務。
  2. 以管理員權限打開終端,進入 bin 目錄,前台啟動:
    # Linux
    mysqld_safe --skip-grant-tables &
    
    # Windows
    mysqld --skip-grant-tables
    # 或舊版本
    mysqld-nt.exe --skip-grant-tables
  3. 另開一個終端,無密碼登入修改密碼(SQL 同方法一)。
  4. 修改完成後,關閉前台運行的 mysqld 進程 (Ctrl+C 或任務管理器結束),正常啟動服務。

MySQL 8.0+ 特別注意

  • PASSWORD() 函數已移除,需使用 ALTER USER 'root'@'localhost' IDENTIFIED BY 'NewPass123!';
  • authentication_string 字段存儲加密後的認證信息,直接 UPDATE 需配合 FLUSH PRIVILEGES。
  • 若啟用了 validate_password 插件,新密碼必須滿足複雜度策略,否則報錯。

安全建議

  1. 操作完成後務必移除 skip-grant-tables,否則任意用戶可免密登入,構成嚴重安全風險。
  2. 生產環境建議配置密碼過期策略、禁用 root 遠程登入、使用專用運維賬號。
  3. 將重置流程納入應急預案文檔,定期演練。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved