萬盛學電腦網

您现在的位置: 萬盛學電腦網 >> 程式設計 >  >> 資料庫 >> MySQL 教學

MySQL 重裝後 1045 錯誤:skip-grant-tables 重置 root 密碼全流程

現象

重裝 MySQL 後,root 密碼輸入正確仍報 ERROR 1045 (28000): Access denied for user 'root'@'localhost'。

核心原因

  • 數據目錄遺留舊 mysql.user 表,密碼雜湊不匹配
  • 或權限表損壞、skip-grant-tables 未生效

標準修復流程

  1. 停庫:service mysqld stop
  2. 編輯配置:vi /etc/my.cnf,在 [mysqld] 下加 skip-grant-tables
  3. 啟庫:service mysqld start(無需密碼直接進)
  4. 重置密碼:
    mysql -u root
    USE mysql;
    UPDATE user SET authentication_string=PASSWORD('NewPass123!') WHERE user='root';
    FLUSH PRIVILEGES;

    MySQL 5.7+ 用 authentication_string,5.6 用 password。

  5. 移除 skip-grant-tables 並重啟:
    vi /etc/my.cnf 刪除該行 → service mysqld restart
  6. 驗證:mysql -u root -p'NewPass123!'

若仍失敗:檢查 host 權限

SELECT host, user FROM mysql.user;
-- 僅有 localhost?遠程需 '%' 或具體 IP
UPDATE user SET host='%' WHERE user='root';
FLUSH PRIVILEGES;

更簡潔的 GRANT 寫法(自動 FLUSH)

GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'NewPass123!';

安全收尾

  • 刪除匿名用戶:DELETE FROM mysql.user WHERE user='';
  • 禁止 root 遠程:DELETE FROM mysql.user WHERE user='root' AND host='%';
  • 移除 test 庫:DROP DATABASE test; DELETE FROM mysql.db WHERE db='test' OR db='test\_%';
  • FLUSH PRIVILEGES;
copyright © 萬盛學電腦網 all rights reserved