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

Linux MySQL 忘記 Root 密碼三種解決方案:skip-grant-tables、debian.cnf、免密登入

     編輯:MySQL 資料庫相關知識

Linux MySQL Root 密碼重置三大法:適用 5.6/5.7/8.0 全版本

遇到 ERROR 1045 (28000): Access denied for user 'root'@'localhost' 時,提供三種經驗證的重置方案,涵蓋 Ubuntu/Debian/CentOS/RHEL 等主流發行版。

方案一:通用標準法 — skip-grant-tables (全版本通用)


# 1. 停止服務
systemctl stop mysqld
# 或 service mysql stop

# 2. 啟動跳過授權表模式 (後台運行)
mysqld_safe --skip-grant-tables --skip-networking &

# 3. 免密登入
mysql -u root mysql

# 4. 修改密碼
-- MySQL 5.7.6+ / 8.0 (authentication_string 列)
UPDATE user SET authentication_string=PASSWORD('newpass') WHERE User='root';
FLUSH PRIVILEGES;

-- MySQL 5.7.5 及之前 (password 列)
UPDATE user SET password=PASSWORD('newpass') WHERE User='root';
FLUSH PRIVILEGES;

-- MySQL 8.0.4+ 推薦語法 (PASSWORD() 已移除)
ALTER USER 'root'@'localhost' IDENTIFIED BY 'newpass';
FLUSH PRIVILEGES;

# 5. 正常重啟
systemctl restart mysqld
# 驗證
mysql -u root -p'newpass'

方案二:Debian/Ubuntu 專屬 — 利用 debian-sys-maint 用戶

Debian 系安裝 MySQL 時自動創建 debian-sys-maint 用戶,密碼存於 /etc/mysql/debian.cnf,擁有完全權限。


# 1. 讀取密碼
cat /etc/mysql/debian.cnf
# [client]
# user = debian-sys-maint
# password = xxxxxxxx

# 2. 登入修改
mysql -u debian-sys-maint -p'xxxxxxxx' mysql
UPDATE user SET authentication_string=PASSWORD('newpass') WHERE User='root';
FLUSH PRIVILEGES;
QUIT;

# 3. 驗證
mysql -u root -p'newpass'

方案三:嘗試 debian.cnf 密碼作為 Root 密碼 (極少數情況)


# 某些安裝腳本會將 root 密碼同步設置為 debian-sys-maint 密碼
mysql -u root -p'xxxxxxxx'  # 使用 debian.cnf 中的 password
# 若成功登入,立即修改密碼
ALTER USER 'root'@'localhost' IDENTIFIED BY 'newpass';

注意: 此法不通用,僅作嘗試。

版本差異速查表

版本密碼列修改語法PASSWORD()
5.6 / 5.7.5-passwordUPDATE user SET password=PASSWORD('x')支援
5.7.6+authentication_stringUPDATE user SET authentication_string=PASSWORD('x')支援
8.0.4-authentication_stringUPDATE user SET authentication_string=PASSWORD('x')支援
8.0.11+authentication_stringALTER USER 'root'@'localhost' IDENTIFIED BY 'x'移除

常見問題

  • mysqld_safe 找不到:嘗試 mysqld --skip-grant-tables --skip-networking & 或確認 PATH 包含 bin 目錄。
  • --skip-grant-tables 啟動後無法連接:檢查 --skip-networking 是否導致本地 socket 連接失效,嘗試 mysql -u root --protocol=socket。
  • FLUSH PRIVILEGES 報錯:在 --skip-grant-tables 模式下無需執行,直接退出重啟即可。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved