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

MySQL 密碼修改與找回大全:六大法、跨平台、文件級恢復

     編輯:MySQL 資料庫相關知識

    前言

    MySQL 密碼管理場景多樣:知舊密碼改密、忘記密碼重置、跨機遷移 user 表、甚至十六進位編輯 .MYD 檔。本文系統整理 6 類主流方法,附 Windows/Linux 雙平台指令,並針對權限、檔案屬主、存儲引擎差異給出避坑指南。

    方法一:phpMyAdmin 圖介介面(最直觀)

    登入 phpMyAdmin → 選 mysql 資料庫 → user 表 → 編輯 root 列 → Password 欄位選 PASSWORD 函數 → 輸入新密碼 → 執行。務必勾選 PASSWORD() 函數,否則存明文無法登入。

    方法二:mysqladmin 命令列(知舊密碼)

    mysqladmin -u root -p password '新密碼'
    # 輸入舊密碼後生效
    # 修改非 root 用戶:將 root 替換為目標用戶名

    限制:需網路連線正常、無法將密碼設為空字串。

    方法三:INSERT 新用戶(需 root 權限)

    INSERT INTO mysql.user (Host, User, Password) VALUES ('%', 'jeffrey', PASSWORD('biscuit'));
    FLUSH PRIVILEGES;

    本質是新增用戶,適用於建立應用專用帳號。

    方法四:REPLACE 覆寫/新增

    REPLACE INTO mysql.user (Host, User, Password) VALUES ('%', 'jeffrey', PASSWORD('biscuit'));
    FLUSH PRIVILEGES;

    若用戶存在則更新,否則插入,比 INSERT 更彈性。

    方法五:SET PASSWORD 語句(推薦)

    SET PASSWORD FOR 'jeffrey'@'%' = PASSWORD('biscuit');
    -- 無需 FLUSH PRIVILEGES,即時生效

    方法六:GRANT ... IDENTIFIED BY(最通用)

    GRANT USAGE ON *.* TO 'jeffrey'@'%' IDENTIFIED BY 'biscuit';
    -- 無需 PASSWORD(),無需 FLUSH,支援權限與密碼同步設定

    忘記 Root 密碼:跨平台通用流程

    Windows

    net stop mysql
    cd C:\mysql\bin
    mysqld-nt --skip-grant-tables
    # 另開視窗
    mysqladmin -u root flush-privileges password "新密碼"
    mysqladmin -u root -p shutdown
    net start mysql

    Linux/Unix

    killall -TERM mysqld
    mysqld_safe --skip-grant-tables &
    mysqladmin -u root flush-privileges password "新密碼"
    killall -TERM mysqld
    systemctl start mysqld

    進階:user 表檔案級遷移與恢復

    適用於跨機房、跨 OS 遷移密碼:

    1. 停止 MySQL
    2. 複製 data/mysql/user.frm、user.MYD、user.MYI 三個檔案
    3. 覆蓋目標機器對應檔案
    4. 關鍵步驟:修正檔案擁有者與權限
    chown -R mysql:mysql /var/lib/mysql/mysql/user.*
    chmod 600 /var/lib/mysql/mysql/user.*
  • 重啟 MySQL,登入後再次執行 UPDATE user SET Password=PASSWORD('xxx') WHERE User='root'; FLUSH PRIVILEGES;
  • 避坑:若來源為 Windows 預設配置,目標 Linux 需額外清理匿名帳號:

    DELETE FROM user WHERE User='';
    DELETE FROM user WHERE Host='%';
    FLUSH PRIVILEGES;

    極客技巧:十六進位編輯 user.MYD

    關閉 MySQL → 用 UltraEdit 開啟 user.MYD → 找到 root 後 8 位元組 → 改為 565491d704013245(對應密碼 123456) → 存檔啟動。風險極高,僅供學習參考。

    總結建議

    • 日常改密首選 SET PASSWORD 或 GRANT
    • 忘記密碼用 --skip-grant-tables 標準流程
    • 跨機遷移優先備份 SQL,檔案級僅作最後手段
    • 生產環境嚴禁十六進位編輯資料檔
    1. 上一篇文章:
    2. 下一篇文章:
    Copyright © 程式碼之家 All Rights Reserved