在 Linux 伺服器運維中,遺忘 MySQL root 密碼是常見狀況。本文記錄一次完整的密碼重置實戰過程,基於 Percona MySQL 5.6 環境,涵蓋停止服務、跳過授權表啟動、修改密碼、驗證登入等關鍵步驟,並解決啟動路徑報錯、權限刷新等實際坑點。
/alidata/server/mysql5.6/alidata/server/mysql/my.cnfservice mysqld stop
確認進程已完全停止:
ps -ef | grep mysqld
找到 mysqld_safe 與 mysqld 二進制位置,避免後續啟動報「文件不存在」。
find / -name mysqld_safe # 輸出範例:/alidata/server/mysql5.6/bin/mysqld_safe find / -name mysqld # 輸出範例:/alidata/server/mysql5.6/bin/mysqld # /etc/init.d/mysqld
確認配置文件位置:
cat /alidata/server/mysql/my.cnf
此模式下 MySQL 不驗證權限,可直接免密登入修改密碼。
/alidata/server/mysql5.6/bin/mysqld_safe \ --basedir=/alidata/server/mysql5.6 \ --skip-grant-tables &
關鍵參數說明:
--basedir:指定 MySQL 安裝根目錄,解決「The file /usr/local/mysql/bin/mysqld does not exist」報錯。--skip-grant-tables:跳過權限檢查。&:後台運行。常見報錯及解決:
mysqld_safe The file /usr/local/mysql/bin/mysqld does not exist or is not executable
原因:mysqld_safe 預設去 /usr/local/mysql 找 mysqld。必須顯式指定 --basedir 指向實際安裝目錄。
mysql -u root
進入 MySQL 後執行:
USE mysql;
UPDATE user SET authentication_string = PASSWORD('新密碼') WHERE User = 'root' AND Host = 'localhost';
FLUSH PRIVILEGES;
\q
注意: MySQL 5.7+ 密碼欄位為 authentication_string,5.6 為 Password。請根據版本調整。
mysqladmin -u root -p shutdown # 輸入新設定的密碼 service mysqld start mysql -u root -p'新密碼' -e "SELECT VERSION();"
若能正常查詢版本號,即重置成功。
| 參數 | 作用 |
|---|---|
--basedir=path | MySQL 安裝目錄路徑(必填,否則預設 /usr/local/mysql) |
--datadir=path | 數據目錄路徑 |
--core-file-size=size | core 文件大小限制,傳遞給 ulimit -c |
--skip-grant-tables | 跳過權限表驗證,用於密碼重置 |
--basedir + --skip-grant-tables 啟動 → 免密登入改密 → FLUSH PRIVILEGES → 正常重啟驗證。--basedir,否則 mysqld_safe 會去錯誤路徑找 mysqld 導致啟動失敗。FLUSH PRIVILEGES 刷新權限緩存。按此流程操作,幾分鐘即可搞定 Root 密碼遺忘問題,建議收藏備用。