萬盛學電腦網

您现在的位置: 萬盛學電腦網 >> 作業系統 >  >> Linux 教學

Linux 環境下 MySQL Root 密碼重置完整流程

遺忘 MySQL Root 密碼?六步驟安全重置指南

MySQL Root 密碼遺失是資料庫管理常見情境。本文提供標準化、安全的重置流程,適用於 MySQL 5.7/8.0 及 MariaDB 10.x,並針對常見坑點給出解決方案。

前置條件

  • 具備作業系統 root 或 sudo 權限
  • 確認 MySQL 資料目錄位置(datadir,通常為 /var/lib/mysql)
  • 備份關鍵資料(如可能)

步驟 1:停止 MySQL 服務

systemctl stop mysqld
# 或
service mysql stop

步驟 2:啟動跳過權限表模式

以 root 身分直接啟動 mysqld 進程,繞過權限驗證:

mysqld_safe --skip-grant-tables --skip-networking --datadir=/var/lib/mysql &

關鍵參數說明:

  • --skip-grant-tables:不載入權限表,允許無密碼登入
  • --skip-networking:禁用網路連線,防止外部入侵(極重要)
  • --datadir:明確指定資料目錄,避免預設值錯誤
  • &:放入背景執行,保留終端機操作

步驟 3:無密碼登入 MySQL

mysql -u root

成功進入 mysql> 提示符即表示繞過驗證生效。

步驟 4:重置 Root 密碼

MySQL 5.7 / MariaDB 10.2 以下

USE mysql;
UPDATE user SET authentication_string=PASSWORD('NewStrongPass123!') WHERE User='root' AND Host='localhost';
FLUSH PRIVILEGES;
EXIT;

MySQL 8.0 / MariaDB 10.3 以上

USE mysql;
-- MySQL 8.0 使用 authentication_string 欄位,採用 caching_sha2_password
ALTER USER 'root'@'localhost' IDENTIFIED BY 'NewStrongPass123!';
-- 或若仍用 mysql_native_password
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'NewStrongPass123!';
FLUSH PRIVILEGES;
EXIT;

步驟 5:正常重啟 MySQL 服務

# 先關閉 skip-grant-tables 的進程
mysqladmin -u root -p shutdown
# 輸入新設定的密碼

# 以系統服務正常啟動
systemctl start mysqld
# 或
service mysql start

步驟 6:驗證新密碼並清理

mysql -u root -p'NewStrongPass123!' -e "SELECT VERSION();"

若正常顯示版本號,重置成功。建議同步更新應用程式設定檔中的密碼。

常見問題排查

現象原因解決
ERROR 1045 (28000): Access denied未加 --skip-grant-tables 或參數位置錯誤檢查啟動指令順序,確保 --skip-grant-tables 在最前
Can't connect to local MySQL server through socketsocket 路徑不匹配指定 --socket=/var/run/mysqld/mysqld.sock 或用 -S 參數
密碼重置後應用連線失敗應用使用舊密碼或不同 Host 權限檢查 user 表 Host 欄位,必要時建立 '%' 主機權限

安全建議

  • 重置後立即執行 mysql_secure_installation 強化安裝
  • 建立專用應用帳號,避免 Root 直接供應用程式使用
  • 啟用密碼輪換策略,定期更換(建議 90 天)
  • 記錄操作日誌,納入變更管理流程
copyright © 萬盛學電腦網 all rights reserved