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

MySQL Root 密碼遺失急救:skip-grant-tables 免密登入重置流程詳解

     編輯:MySQL 資料庫相關知識

適用版本

MySQL 所有版本通用 (含 5.x/8.x)。

四步驟重置

1. 停止服務

killall -TERM mysqld
# 或 systemctl stop mysqld / service mysql stop

2. 跳過授權啟動

mysqld_safe --skip-grant-tables --skip-networking &
  • --skip-networking:僅允許本地 Socket 連線,防止無授權狀態下被遠端存取。
  • 若找不到 mysqld_safe,嘗試 /usr/bin/mysqld_safe 或 /usr/local/mysql/bin/mysqld_safe。

3. 免密登入並更新

mysql -u root mysql
UPDATE user SET authentication_string=PASSWORD('newpass') WHERE User='root';
-- MySQL 5.7+ 欄位名為 authentication_string,5.6 為 Password
FLUSH PRIVILEGES;
QUIT

4. 正常重啟

killall -TERM mysqld
systemctl start mysqld  # 或對應啟動指令
# 驗證
mysql -u root -p'newpass' -e "SELECT VERSION();"

關鍵提醒

  • 必須用 PASSWORD():MySQL 8.0 預設 caching_sha2_password,手動更新建議用 ALTER USER 'root'@'localhost' IDENTIFIED BY 'newpass'; (需正常啟動後)。
  • 生產環境:操作前備份 /var/lib/mysql/mysql 目錄。
  • Windows:以管理員身分開啟 CMD,net stop mysql → mysqld --skip-grant-tables --skip-networking → 新視窗執行更新。

替代方案 (不停機)

若有另一個擁有 SUPER 權限的帳號,可直接登入執行 SET PASSWORD FOR 'root'@'localhost' = PASSWORD('newpass'); 無需重啟。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved