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

MySQL 5.1 忘記 root 密碼親測解決方案(Windows/Linux 通用)

     編輯:MySQL 綜合教學

MySQL 5.1 忘記 root 密碼親測解決方案(Windows/Linux 通用)

MySQL 5.1 作為經典長期支援版本,仍有大量存量系統在運行。本文提供經實測驗證的 5.1 版本專屬重置流程,針對 safe_mysqld、mysqld 兩種啟動腳本差異給出精確指令,避免網上過時教程導致的失敗。

核心差異提醒

  • MySQL 5.1 密碼欄位為 password(非 5.7+ 的 authentication_string)
  • 啟動腳本可能為 safe_mysqld 或 mysqld_safe,視安裝方式而定
  • Windows 服務名可能非標準 mysql,需確認實際服務名

一、Windows 環境操作步驟

1. 停止 MySQL 服務

REM 以管理員身分執行 CMD
net stop MySQL
REM 若服務名不同,用 `sc query` 或 `services.msc` 確認實際名稱

2. 跳過授權表啟動

REM 切換到 bin 目錄(請替換實際路徑)
cd "C:\Program Files\MySQL\MySQL Server 5.1\bin"

REM 方式 A:使用 mysqld(前景執行,視窗勿關)
mysqld --skip-grant-tables

REM 方式 B:若有 safe_mysqld 腳本
safe_mysqld --skip-grant-tables &

3. 新開視窗無密登入並改密

cd "C:\Program Files\MySQL\MySQL Server 5.1\bin"
mysql -u root

-- MySQL Shell 中執行:
USE mysql;
UPDATE user SET password=PASSWORD('NewPass123!') WHERE User='root';
FLUSH PRIVILEGES;
QUIT;

4. 重啟服務驗證

REM 關閉步驟 2 的視窗(Ctrl+C 或任務管理器結束 mysqld.exe)
net start MySQL
mysql -u root -pNewPass123!

二、Linux 環境操作步驟

方法 A:使用 safe_mysqld(官方 tarball/舊版 RPM 常見)

# 1. 停止服務
/etc/init.d/mysql stop
# 或
service mysql stop

# 2. 確認進程已停
ps -ef | grep mysql
kill -9   # 若有殘留

# 3. 跳過授權表啟動(背景執行)
safe_mysqld --skip-grant-tables --skip-networking &

# 4. 無密登入
mysql -u root

# 5. 更新密碼
USE mysql;
UPDATE user SET password=PASSWORD('NewPass123!') WHERE User='root';
FLUSH PRIVILEGES;
QUIT;

# 6. 重啟服務
/etc/init.d/mysql restart
# 或
service mysql restart

方法 B:直接用 mysqld(無 safe_mysqld 時,如 Ubuntu apt 安裝)

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

# 2. 直接啟動 mysqld(需指定資料目錄、socket、pid-file 等參數,建議用方法 A)
# 若必須直啟,參考下方最小參數集:
mysqld --skip-grant-tables --skip-networking \
  --datadir=/var/lib/mysql \
  --socket=/var/run/mysqld/mysqld.sock \
  --pid-file=/var/run/mysqld/mysqld.pid \
  --user=mysql &

# 3. 後續同方法 A 步驟 4-6

三、關鍵驗證指令(執行改密後必跑)

# 確認密碼已更新
mysql -e "SELECT User, Host, password FROM mysql.user WHERE User='root';"

# 驗證新密碼可登入
mysql -u root -p'NewPass123!' -e "SELECT VERSION();"

# 檢查權限生效
mysql -u root -p'NewPass123!' -e "SHOW GRANTS FOR 'root'@'localhost';"

四、常見失敗原因對照表

現象可能原因解決
UPDATE 影響 0 行Host 欄位不匹配(如 '127.0.0.1'、'%')SELECT User, Host FROM user; 全部更新
啟動報錯 "Can't create test file"資料目錄權限錯誤或 --datadir 指定錯誤確認 mysql 用戶擁有 datadir 讀寫權
Windows 服務啟動失敗skip-grant-tables 寫在 [mysql] 而非 [mysqld] 區段移至 [mysqld] 區段
Linux 提示 "unknown variable 'skip-grant-tables'"寫在 [client] 或其他區段同左,必須在 [mysqld]

五、5.1 版本特有注意事項

  1. PASSWORD() 函數:5.1 使用雜湊演算法與 5.6 相容,但 8.0 已移除,若未來升級需重新設定密碼
  2. 舊版驗證插件:5.1 僅支援 mysql_native_password,無 caching_sha2_password 相容性問題
  3. 配置檔位置:Windows 通常在安裝目錄 my.ini;Linux 可能在 /etc/my.cnf、/etc/mysql/my.cnf、/usr/my.cnf 多處,用 mysql --help | grep my.cnf 確認讀取順序

親測總結:MySQL 5.1 重置核心就是「停服務 → safe_mysqld --skip-grant-tables → UPDATE user SET password=PASSWORD(...) → 重啟」。關鍵在確認服務名、啟動腳本名、Host 欄位值三個變量。建議將本流程寫成腳本納入運維手冊,定期演練。

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