首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> MySQL 資料庫 >> MySQL 綜合教學

Linux MySQL 忘記密碼重置 5 種方法完整教學

     編輯:MySQL 綜合教學

核心原理

同 Windows:跳過權限表啟動 → 無密碼登入 → 修改 mysql.user 表 → 重新載入權限 → 正常重啟。

方法一:systemd 服務管理(現代 Linux 推薦)

# 1. 停止服務
systemctl stop mysqld

# 2. 建立臨時 override
systemctl edit mysqld
# 在編輯器輸入:
# [Service]
# ExecStart=
# ExecStart=/usr/sbin/mysqld --skip-grant-tables --user=mysql

# 3. 重新載入並啟動
systemctl daemon-reload
systemctl start mysqld

# 4. 無密碼登入
mysql -u root

# 5. 修改密碼 (MySQL 8.0+)
FLUSH PRIVILEGES;
ALTER USER 'root'@'localhost' IDENTIFIED BY 'NewStrongPass123!';
FLUSH PRIVILEGES;
EXIT;

# 6. 恢復正常啟動
systemctl revert mysqld
systemctl daemon-reload
systemctl restart mysqld

方法二:mysqld_safe 傳統模式

# 1. 停止服務
systemctl stop mysqld
# 或
/etc/init.d/mysqld stop

# 2. 跳過權限啟動(背景執行)
mysqld_safe --skip-grant-tables --skip-networking &

# 3. 登入修改密碼(同方法一步驟 4-5)

# 4. 結束進程並正常啟動
pkill -f mysqld
systemctl start mysqld

方法三:修改設定檔 my.cnf

# 1. 編輯 /etc/my.cnf 或 /etc/mysql/my.cnf
# 在 [mysqld] 區段加入
skip-grant-tables

# 2. 重啟服務
systemctl restart mysqld

# 3. 無密碼登入修改密碼(同步驟 4-5)

# 4. 移除 skip-grant-tables,重啟服務
systemctl restart mysqld

方法四:Debian/Ubuntu 專用 - debian-sys-maint 帳號

Debian 系安裝 MySQL 時會自動建立 debian-sys-maint 使用者,密碼存放在 /etc/mysql/debian.cnf,擁有完整權限。

# 1. 讀取密碼
cat /etc/mysql/debian.cnf
# 輸出範例:
# [client]
# host     = localhost
# user     = debian-sys-maint
# password = xxxxxxxxxxxxxxxx

# 2. 使用此帳號登入
mysql -u debian-sys-maint -p
# 輸入上述密碼

# 3. 修改 root 密碼
FLUSH PRIVILEGES;
ALTER USER 'root'@'localhost' IDENTIFIED BY 'NewStrongPass123!';
FLUSH PRIVILEGES;

方法五:init-file 方式(不需停止服務長時間)

# 1. 建立 SQL 腳本
echo "FLUSH PRIVILEGES;
ALTER USER 'root'@'localhost' IDENTIFIED BY 'NewStrongPass123!';
FLUSH PRIVILEGES;" > /tmp/reset_root.sql

# 2. 停止服務
systemctl stop mysqld

# 3. 以 init-file 啟動(執行腳本後正常運行)
mysqld --init-file=/tmp/reset_root.sql --user=mysql &

# 4. 等待幾秒,新密碼生效
sleep 5

# 5. 正常登入驗證
mysql -u root -p'NewStrongPass123!' -e "SELECT VERSION();"

# 6. 正常重啟
pkill -f mysqld
systemctl start mysqld

MySQL 版本差異提醒

版本密碼欄位修改語法
5.6 及之前passwordSET PASSWORD = PASSWORD('x')
5.7authentication_stringSET PASSWORD = 'x' / ALTER USER
8.0+authentication_stringALTER USER IDENTIFIED BY 'x'

安全性注意事項

  • --skip-grant-tables 期間**任何人可無密碼登入**,務必加 --skip-networking 限制本機
  • 操作完成**立即移除** skip-grant-tables 並重啟
  • 新密碼**必須符合 validate_password 政策**(長度、大小寫、數字、特殊字元)
  • 建議同步建立備用管理帳號

驗證與後續

# 測試新密碼
mysql -u root -p -e "SELECT USER(), VERSION();"

# 建立備用帳號
CREATE USER 'admin'@'localhost' IDENTIFIED BY 'AnotherStrongPass!';
GRANT ALL PRIVILEGES ON *.* TO 'admin'@'localhost' WITH GRANT OPTION;
FLUSH PRIVILEGES;

總結

Linux 重置 MySQL root 密碼有 5 種方法:systemd override(推薦)、mysqld_safe、my.cnf、debian-sys-maint、init-file。現代系統首選 systemd override,不需修改設定檔、自動清理、最安全。操作核心相同:跳過權限 → 改密碼 → 恢復正常。

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