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

解決 MySQL 系統預設帳號消失、僅剩 information_schema 與 test 資料庫問題

     編輯:MySQL 綜合教學

誤刪 mysql.user 表中 Host='localhost' 的 root 記錄,或錯誤修改權限欄位,導致重啟後 SHOW DATABASES 僅顯示 information_schema、test,無法看見 mysql 系統庫,也無法正常登入管理。

根本原因

權限表資料損毀,導致帳號無 SELECT 權限於 mysql.*,MySQL 權限系統啟動時載入失敗,帳號實際上「隱形」而非刪除。

緊急修復步驟 (跳過權限驗證啟動)

  1. 停止 MySQL 服務
    systemctl stop mysqld
    # 或
    service mysql stop
  2. 以 --skip-grant-tables 啟動
    mysqld_safe --skip-grant-tables --skip-networking &
    # --skip-networking 防止此期間外部連入
    
  3. 無密碼登入修復權限
    mysql -u root
    mysql> USE mysql;
    # 檢查現有 root 帳號
    mysql> SELECT User, Host, plugin, authentication_string FROM user WHERE User='root';
    # 修復:確保 localhost 與 127.0.0.1 皆有 root,且權限全 Y
    mysql> UPDATE user SET 
        Select_priv='Y', Insert_priv='Y', Update_priv='Y', Delete_priv='Y',
        Create_priv='Y', Drop_priv='Y', Reload_priv='Y', Shutdown_priv='Y',
        Process_priv='Y', File_priv='Y', Grant_priv='Y', References_priv='Y',
        Index_priv='Y', Alter_priv='Y', Show_db_priv='Y', Super_priv='Y',
        Create_tmp_table_priv='Y', Lock_tables_priv='Y', Execute_priv='Y',
        Repl_slave_priv='Y', Repl_client_priv='Y', Create_view_priv='Y',
        Show_view_priv='Y', Create_routine_priv='Y', Alter_routine_priv='Y',
        Create_user_priv='Y', Event_priv='Y', Trigger_priv='Y',
        Create_tablespace_priv='Y'
      WHERE User='root' AND Host IN ('localhost','127.0.0.1','::1');
    # 若缺少記錄則 INSERT
    mysql> FLUSH PRIVILEGES;
    mysql> EXIT;
  4. 正常重啟 MySQL
    pkill -f "mysqld_safe --skip-grant-tables"
    systemctl start mysqld
  5. 驗證
    mysql -u root -p
    mysql> SHOW DATABASES;  -- 應包含 mysql, information_schema, performance_schema, sys 等

MySQL 5.7+ / 8.0 注意事項

  • 密碼欄位為 authentication_string,不再是 Password。
  • plugin 欄位預設 caching_sha2_password (8.0) 或 mysql_native_password (5.7),若客戶端不支援需同步修改。
  • 8.0 新增 mysql.global_grants、mysql.role_edges 等權限表,修復時需一併檢查。

預防措施

  1. 嚴禁直接 DELETE/UPDATE mysql.user,改用 CREATE/DROP/ALTER USER、GRANT/REVOKE 管理帳號。
  2. 備份權限表:mysqldump --system=mysql.user,mysql.db,mysql.tables_priv,mysql.columns_priv,mysql.procs_priv -d mysql > grants.sql
  3. 變更前先 FLUSH PRIVILEGES 並備份。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved