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

MySQL Root 密碼遺失?標準重置流程 (Linux/Unix)

     編輯:MySQL 資料庫相關知識

適用場景

  • MySQL 正在運行,但忘記 root 密碼。
  • 擁有作業系統 root/sudo 權限。
  • Linux/Unix 環境 (Windows 請參考官方文件)。

標準三步驟重置流程

  1. 停止 MySQL 服務
    killall -TERM mysqld
    # 或 systemctl stop mysqld / service mysqld stop
  2. 跳過權限表啟動
    mysqld_safe --skip-grant-tables --skip-networking &
    # --skip-networking 防止遠程連線,安全第一
  3. 無密碼登入並更新密碼
    mysql -u root
    USE mysql;
    -- MySQL 5.7+ 欄位為 authentication_string
    UPDATE user SET authentication_string=PASSWORD('NewStrongP@ss') WHERE User='root';
    -- MySQL 5.6 或更舊
    -- UPDATE user SET Password=PASSWORD('NewStrongP@ss') WHERE User='root';
    FLUSH PRIVILEGES;
    EXIT;
  4. 正常重啟 MySQL
    killall -TERM mysqld
    systemctl start mysqld
    # 現在可用新密碼登入:mysql -u root -p

版本差異提醒

MySQL 版本密碼欄位推薦語法
8.0authentication_stringALTER USER 'root'@'localhost' IDENTIFIED BY 'newpass';
5.7authentication_stringALTER USER 'root'@'localhost' IDENTIFIED BY 'newpass'; 或 UPDATE
5.6 / 5.5PasswordSET PASSWORD FOR 'root'@'localhost' = PASSWORD('newpass');

安全檢查清單 (重置後必做)

  • [ ] 移除啟動腳本/服務中的 --skip-grant-tables。
  • [ ] 確認 user.Host 包含實際連線來源 (localhost, 127.0.0.1, ::1, 具體 IP)。
  • [ ] 刪除匿名帳號:DELETE FROM mysql.user WHERE User='';。
  • [ ] 禁止 root 遠程登入:DELETE FROM mysql.user WHERE User='root' AND Host NOT IN ('localhost','127.0.0.1','::1');。
  • [ ] 移除 test 資料庫:DROP DATABASE test; DELETE FROM mysql.db WHERE Db='test' OR Db='test\_%';。
  • [ ] 執行 mysql_secure_installation 互動式加固。

常見問題

更新後仍無法登入
檢查 FLUSH PRIVILEGES; 是否執行;確認 plugin 欄位為 mysql_native_password 或 caching_sha2_password (8.0 預設)。
Windows 環境如何操作?
管理員 CMD:net stop mysql → mysqld --skip-grant-tables --skip-networking → 新視窗 mysql -u root 更新 → net stop mysql (Ctrl+C 停止 --skip-grant-tables 實例) → net start mysql。
系統無 mysqld_safe 指令
嘗試 mysqld --skip-grant-tables --skip-networking --user=mysql &,指定 --user、--basedir、--datadir。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved