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

CentOS 找回 MariaDB Root 權限實戰記:從誤刪 user 表到恢復訪問

     編輯:MariaDB 資料庫

一次好奇心驅使的 MariaDB 遷移,差點釀成資料庫無法訪問的災難。本文記錄從 Root 密碼為空、誤刪 user 表記錄、導致 mysql 資料庫隱匿,到最終透過 127.0.0.1 繞過本機認證機制恢復權限的完整排查過程。

事故經過

  1. 初始狀態:CentOS 上全新安裝 MariaDB,Root 無密碼
  2. 設定密碼:執行 mysqladmin password 設定 Root 密碼
  3. 誤操作:發現 user 表有 5 條 Root 記錄(不同 Host),僅保留 Host='%',刪除其餘
  4. 補救失敗:發現無法本機登入,補插 Host='localhost' 記錄
  5. 災難發生:重新登入後 mysql 系統資料庫消失,SHOW DATABASES 不見蹤影

根因分析

MariaDB 權限系統核心邏輯:

  • user 表中 Host='localhost' 代表 Unix Socket 本機連線
  • Host='127.0.0.1' 代表 TCP/IP 回環連線
  • 誤刪導致本機 Socket 連線無有效權限記錄,系統判定權限不足,隱藏 mysql 資料庫
  • skip-grant-tables 繞過權限檢查,但 MariaDB 行為與 MySQL 有差異,無效

破解關鍵:使用 127.0.0.1 連線

# 關鍵指令:強制使用 TCP/IP 而非 Unix Socket
mysql -h 127.0.0.1 -u root -p

成功登入後,發現 mysql 資料庫重現,權限系統恢復正常。

完整修復步驟

  1. 以 -h 127.0.0.1 登入
  2. 檢查 user 表現狀:
    SELECT User, Host FROM mysql.user WHERE User='root';
  3. 補齊缺失的 Host='localhost' 與 Host='::1' (IPv6) 記錄
  4. FLUSH PRIVILEGES; 生效
  5. 驗證本機 Socket 連線恢復正常

經驗總結

「念念不忘,必有回響。」—— 葉問

  • 操作權限表前務必備份:mysqldump mysql user > user_backup.sql
  • 理解 localhost vs 127.0.0.1 的本質差異
  • MariaDB 雖相容 MySQL,但權限系統細節有差異,勿盲目套用 MySQL 救援方案
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved