首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> MySQL 資料庫 >> MySQL 綜合教學

MySQL 重裝後 1045 錯誤解決:跳過授權表重置 Root 密碼

     編輯:MySQL 綜合教學

MySQL 重裝後 1045 錯誤解決:跳過授權表重置 Root 密碼

MySQL 重裝或非正常關機導致授權表損壞、Root 密碼未知,連線報 ERROR 1045 (28000): Access denied for user 'root'@'localhost'。標準修復流程:停服務 → skip-grant-tables → 免密登入 → 重置密碼 → 恢復配置 → 重啟。本文提供完整命令序列與避坑細節。

標準修復流程 (適用 MySQL 5.7+ / 8.0)

  1. 停止服務
    systemctl stop mysqld
    # 或 service mysqld stop
  2. 編輯配置啟用 skip-grant-tables
    vim /etc/my.cnf
    # 在 [mysqld] 區段下添加
    skip-grant-tables
    skip-networking  # 建議同時關閉網路,防止無授權遠程訪問
  3. 啟動服務
    systemctl start mysqld
  4. 免密登入並重置密碼
    mysql -u root
    # 進入 MySQL 後
    FLUSH PRIVILEGES;  -- 5.7+ 必須先執行,否則 UPDATE 無效
    
    -- MySQL 5.7
    UPDATE mysql.user SET authentication_string=PASSWORD('NewP@ss123') WHERE User='root' AND Host='localhost';
    
    -- MySQL 8.0 (authentication_string 已棄用,使用 authentication_string 或 ALTER USER)
    ALTER USER 'root'@'localhost' IDENTIFIED BY 'NewP@ss123';
    
    FLUSH PRIVILEGES;
    EXIT;
  5. 移除 skip-grant-tables 並重啟
    vim /etc/my.cnf  # 刪除或註釋 skip-grant-tables, skip-networking
    systemctl restart mysqld
  6. 驗證新密碼
    mysql -u root -p'NewP@ss123' -e "SELECT VERSION();"

進階場景:授權表損壞需重建

若 mysql.user 表結構異常或缺失,需初始化系統表:

# 停止服務
systemctl stop mysqld

# 備份舊數據目錄 (謹慎)
mv /var/lib/mysql /var/lib/mysql.bak.$(date +%F)

# 重新初始化 (MySQL 5.7)
mysqld --initialize-insecure --user=mysql --datadir=/var/lib/mysql

# MySQL 8.0
mysqld --initialize-insecure --user=mysql --datadir=/var/lib/mysql

# 啟動並按上述流程設定密碼
systemctl start mysqld

常見失敗原因排查

現象原因對策
UPDATE 無效,密碼未變未執行 FLUSH PRIVILEGES 或 5.7 欄位名錯誤確認欄位 authentication_string,必須 FLUSH PRIVILEGES
啟動報錯 skip-grant-tables 不生效配置段落錯誤 (放在 [client] 或 [mysqld_safe])確保在 [mysqld] 區段
遠程仍無法連線skip-networking 開啟、bind-address、防火牆、Host 欄位不匹配檢查 SELECT User, Host FROM mysql.user; 授權對應 Host
密碼策略拒絕validate_password 插件要求複雜度暫時降低策略 SET GLOBAL validate_password.policy=LOW; 或用高強度密碼

替代方案:mysql_secure_installation

全新安裝後直接執行:

mysql_secure_installation
# 互動式:設定 root 密碼、移除匿名用戶、禁止 root 遠程、移除 test 庫、重新載入授權表

核心提醒: skip-grant-tables 會讓 MySQL 完全失去存取控制,任何本地用戶均可無密操作資料庫。務必加上 skip-networking 限制本地,並在重置完成後 立即移除並重啟,切勿長期運行於此模式。

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