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

Linux 下 MySQL 安裝後無法登入?Root 密碼重置完整指南

     編輯:MySQL 資料庫相關知識

問題現象

全新安裝 MySQL(yum install mysql mysql-server)後,啟動服務 service mysqld start,預設 root 無密碼可登入。執行 mysqladmin password '123' 設定密碼後,反而無法登入(無論輸入密碼與否皆失敗),報錯如 Access denied for user 'root'@'localhost'。

根因分析

  • MySQL 5.7+ 預設安裝會生成隨機臨時密碼(存放在 /var/log/mysqld.log 或 ~/.mysql_secret),直接用 mysqladmin password 可能因認證插件、密碼策略、匿名用戶衝突導致失效。
  • 部分版本預設啟用 auth_socket 外掛,root 僅允許本地 Unix socket 免密登入,密碼認證被忽略。
  • mysqladmin password 在某些版本不更新 mysql.user 表的 authentication_string 欄位,導致實際密碼未變更。

標準修復流程(跳過授權表啟動)

  1. 停止服務
    systemctl stop mysqld    # 或 service mysqld stop
    
  2. 以跳過授權表模式啟動
    mysqld_safe --skip-grant-tables --skip-networking &
    

    --skip-networking 防止外部連入,安全第一。

  3. 免密登入並修改密碼
    mysql -u root
    

    進入 MySQL 提示符後:

    USE mysql;
    -- 5.7.6+ 使用 authentication_string 欄位
    UPDATE user SET authentication_string=PASSWORD('NewStrongPass123!') WHERE User='root' AND Host='localhost';
    -- 8.0+ 推薦使用 ALTER USER(需先 flush privileges)
    -- ALTER USER 'root'@'localhost' IDENTIFIED BY 'NewStrongPass123!';
    FLUSH PRIVILEGES;
    EXIT;
    
  4. 正常重啟服務
    systemctl stop mysqld
    systemctl start mysqld
    # 或
    service mysqld restart
    
  5. 驗證新密碼
    mysql -u root -p'NewStrongPass123!'
    

進階:MySQL 8.0 專用修復(不跳過授權表)

8.0 支援 --init-file 初始化腳本,更安全:

  1. 建立腳本 /tmp/mysql-init.sql:
    ALTER USER 'root'@'localhost' IDENTIFIED BY 'NewStrongPass123!';
    
  2. 停止服務,以 init-file 啟動:
    systemctl stop mysqld
    mysqld --init-file=/tmp/mysql-init.sql --user=mysql &
    
  3. 登入驗證後正常重啟服務。

常見坑點與檢查清單

現象可能原因解決
密碼正確仍報 Access deniedHost 欄位不匹配('root'@'%' vs 'root'@'localhost')檢查 SELECT User, Host FROM mysql.user;,確保 Host 匹配連線方式
ERROR 1820 (HY000): You must reset your password密碼過期標記ALTER USER 'root'@'localhost' PASSWORD EXPIRE NEVER;
ERROR 1819 (HY000): Password does not meet policy密碼策略過嚴暫時降低 validate_password.policy 或用複雜密碼
Authentication plugin 錯誤root 使用 caching_sha2_password,客戶端不支援改用 mysql_native_password:ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'pass';
啟動失敗 PID file 錯誤目錄權限、殘留進程、磁碟滿檢查 datadir 權限、ps -ef | grep mysql 清理、df -h

最佳實踐建議

  • 安裝後首要動作:mysql_secure_installation 互動式腳本,自動處理匿名用戶、遠程 root 登入、測試庫、密碼策略。
  • 生產環境禁用密碼登入:改用 SSH 金鑰 + 本地 Unix socket (auth_socket) 或 TLS 憑證認證。
  • 密碼管理:使用密碼管理器、定期輪換、避免在腳本/歷史指令明文出現。
  • 備份授權表:重大變更前 mysqldump mysql user db tables_priv columns_priv procs_priv proxies_priv > grants_backup.sql。

總結

MySQL root 密碼重置核心在於 跳過授權表啟動 → 直接操作 mysql.user 表 → 刷新權限 → 正常重啟。MySQL 8.0 推薦使用 --init-file 避免無授權模式風險。遇到登入問題先查 User、Host、plugin、authentication_string 四欄位,對症下藥即可快速恢復。

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