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

MySQL 5.x Root 密碼重置完整操作手冊

     編輯:MySQL 資料庫相關知識

遺忘 MySQL root 密碼是常見運維場景。本文提供 Debian/Ubuntu/CentOS 通用的標準化重置流程,涵蓋跳過授權表啟動、密碼更新、權限刷新、恢復正常模式全步驟。

一、標準重置流程(適用 MySQL 5.0 - 5.7)

  1. 以系統 root 登錄服務器
  2. 停止 MySQL 服務
    systemctl stop mysql          # systemd
    # 或
    service mysql stop            # SysVinit
    # 或
    mysql.server stop             # 通用腳本
  3. 跳過授權表、禁用網絡啟動 mysqld
    mysqld_safe --skip-grant-tables --skip-networking &

    參數說明:

    • --skip-grant-tables:不載入權限表,任意用戶無密碼登錄
    • --skip-networking:僅本地 Unix Socket 連接,防止外部入侵

  4. 無密碼登錄並更新密碼
    mysql -u root
    -- 進入 mysql> 提示符後執行:
    USE mysql;
    UPDATE user SET authentication_string=PASSWORD('NewStrongPass123!') WHERE User='root';
    FLUSH PRIVILEGES;
    EXIT;

    ⚠️ MySQL 5.7+ 欄位名為 authentication_string;5.6 及之前為 Password。可用 DESC user; 確認。

  5. 停止臨時實例,正常啟動服務
    mysqladmin -u root -p shutdown   # 用新密碼關閉臨時實例
    systemctl start mysql            # 正常模式啟動
  6. 驗證新密碼
    mysql -u root -p'NewStrongPass123!' -e "SELECT VERSION();"

二、MySQL 8.0 專用差異點

  • 密碼列統一為 authentication_string
  • 默認加密插件 caching_sha2_password,若客戶端不支持可改回 mysql_native_password:
    ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'NewPass123!';
  • FLUSH PRIVILEGES 在 8.0 可省略(隱式提交),但保留無害。

三、Windows 平台操作差異

  1. 以管理員身份打開 CMD / PowerShell
  2. 停止服務:net stop mysql 或服務管理器
  3. 建立初始化文件 C:\mysql-init.txt:
    ALTER USER 'root'@'localhost' IDENTIFIED BY 'NewStrongPass123!';
  4. 啟動帶初始化文件:
    "C:\Program Files\MySQL\MySQL Server 8.0\bin\mysqld.exe" --init-file=C:\mysql-init.txt --console
  5. 新窗口測試登錄,確認後關閉控制台窗口,重新啟動 MySQL 服務

四、安全加固建議(重置後必做)

  • 運行 mysql_secure_installation:移除匿名用戶、禁止 root 遠程登錄、刪除 test 庫、重新加載權限
  • 為應用創建專用賬號,最小權限原則(僅授必要庫表的 SELECT/INSERT/UPDATE/DELETE)
  • 啟用密碼過期策略:ALTER USER 'app_user'@'%' PASSWORD EXPIRE INTERVAL 90 DAY;
  • 審計日誌:INSTALL PLUGIN audit_log SONAME 'audit_log.so';(企業版)

五、常見失敗原因排查

現象可能原因對策
mysqld_safe` 無法啟動權限問題、datadir 路徑錯誤、端口被佔用查看 /var/log/mysql/error.log,修正 my.cnf 路徑
更新密碼後仍無法登錄未執行 FLUSH PRIVILEGES、列名錯誤、插件不匹配確認列名、執行 FLUSH PRIVILEGES、檢查 plugin 列
啟動報 unknown variable 'skip-grant-tables'放在錯誤區段(需在 [mysqld] 或命令行)移至命令行參數或 [mysqld] 區段

按標準流程操作,root 密碼重置通常在 5 分鐘內完成。建議將此流程納入運維手冊,定期演練。

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