首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

MySQL Root 密碼遺忘?三種重置方案完整實測(含跨平台複製 user 表法)

     編輯:MySQL 資料庫相關知識

方案一:--skip-grant-tables 免密登入改密(通用、推薦)

  1. 停止 MySQL:systemctl stop mysqld 或 net stop mysql。
  2. 啟動跳過權限:mysqld --skip-grant-tables --user=mysql &(Linux)
    或 mysqld --skip-grant-tables(Windows CMD)。
  3. 免密登入:mysql -u root。
  4. 修改密碼:
    USE mysql;
    UPDATE user SET authentication_string=PASSWORD('newpass') WHERE User='root';
    -- MySQL 5.7+ 欄位為 authentication_string
    FLUSH PRIVILEGES;
    
  5. 正常重啟 MySQL。

方案二:初始化 SQL 檔重置(乾淨、適合自動化)

  1. 建立 init.sql:
    USE mysql;
    UPDATE user SET authentication_string=PASSWORD('newpass') WHERE User='root';
    FLUSH PRIVILEGES;
    
  2. 啟動參數載入:mysqld --init-file=/path/to/init.sql --user=mysql &。
  3. 啟動完成後移除 --init-file 正常重啟。

方案三:跨平台複製 user 表檔案(特殊場景)

前提:擁有另一台已知密碼的同版本 MySQL(如開發機)。

  1. 停止目標 MySQL。
  2. 備份目標 mysql 資料庫下 user.frm、user.MYD、user.MYI(或 user.ibd InnoDB)。
  3. 從來源複製三檔覆蓋目標。
  4. 修正檔案擁有者權限(關鍵!):
    chown -R mysql:mysql /var/lib/mysql/mysql/user.*
    chmod 660 /var/lib/mysql/mysql/user.*
    
  5. 啟動 MySQL,使用來源密碼登入。
  6. 立即修改為新密碼並 FLUSH PRIVILEGES。
  7. 清理預設匿名帳號:
    DELETE FROM mysql.user WHERE User='';
    DELETE FROM mysql.user WHERE Host='%';
    FLUSH PRIVILEGES;
    

風險:版本不一致、表結構不同會導致權限系統錯亂。僅限同版本、同結構環境。

Windows 服務環境特別注意

  • 以管理員身分開啟 CMD 執行 mysqld --skip-grant-tables。
  • 服務管理器中停止 MySQL 服務後再手動啟動除錯模式。
  • 修改完成後在服務管理器重啟服務。

MySQL 8.0+ 密碼欄位變更提醒

MySQL 5.7 起密碼欄位為 authentication_string,Password 已移除。8.0 預設驗證插件為 caching_sha2_password,若客戶端不支援需指定 mysql_native_password:

ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'newpass';
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved