萬盛學電腦網

您现在的位置: 萬盛學電腦網 >> 程式設計 >  >> 資料庫 >> MySQL 教學

MySQL Root 密碼遺失?三大找回方案完整實操筆記

方案一:跨平台複製授權表(適用同版本、同架構)

核心原理:MySQL 密碼雜湊存於 mysql.user 表,直接替換實體檔案即可重置。

  1. 停止服務:systemctl stop mysqld
  2. 備份原目錄:mv /var/lib/mysql/mysql /var/lib/mysql/mysql.bak
  3. 從已知密碼的同版本 MySQL 複製三檔:user.frm、user.MYD、user.MYI 至 /var/lib/mysql/mysql/
  4. 修正擁有者權限:chown -R mysql:mysql /var/lib/mysql/mysql/user.* && chmod 600 /var/lib/mysql/mysql/user.*
  5. 啟動服務,使用已知密碼登入。
  6. 登入後立即修改密碼並清理匿名帳號:
USE mysql;
UPDATE user SET authentication_string=PASSWORD('NewStrongPass#2024') WHERE User='root';
DELETE FROM user WHERE User='';
DELETE FROM user WHERE Host='%';
FLUSH PRIVILEGES;

方案二:跳過授權表啟動(通用標準方案)

  1. 停止服務:killall -TERM mysqld(勿用 -9)
  2. 跳過授權啟動:mysqld_safe --skip-grant-tables --skip-networking &
    ※ --skip-networking 關閉網路,防止無授權狀態下被遠端連線。
  3. 無密碼登入:mysql -u root mysql
  4. 更新密碼:
UPDATE user SET authentication_string=PASSWORD('NewStrongPass#2024') WHERE User='root';
FLUSH PRIVILEGES;
  1. 正常重啟:mysqladmin shutdown && systemctl start mysqld

方案三:十六進位編輯器直接修改 user.MYD(不推薦,極高風險)

直接編輯二進位資料檔,需精確定位密碼雜湊位移,且易破壞索引結構。僅供極端情況參考,強烈建議使用方案二。

關鍵避坑指南

  • 權限問題:複製檔案後必須 chown mysql:mysql 且 chmod 600,否則報錯「Table 'user' is read only」。
  • 版本匹配:跨大版本(如 5.6 → 5.7)複製授權表會導致欄位結構不符(authentication_string 取代 Password),啟動失敗。
  • plugin 欄位:5.7+ user 表新增 plugin 欄位(mysql_native_password / caching_sha2_password),手動 UPDATE 時需同步設定。
  • SSL 憑證:若啟用 SSL,複製授權表後需同步 ca.pem、server-cert.pem、server-key.pem。

預防勝於治療

  • 使用密碼管理器(Bitwarden、1Password、KeePass)儲存 root 密碼。
  • 建立專用管理帳號 dba@localhost 擁有 SUPER、GRANT OPTION,日常運維不動 root。
  • 配置 validate_password 元件強制密碼複雜度與過期策略。
copyright © 萬盛學電腦網 all rights reserved