全新安裝的 MySQL 包含兩個系統庫:information_schema 和 mysql。**絕對不能刪除**,否則導致資料庫服務癱瘓。本文深度解析兩者核心作用、內部結構、常見誤區。
本質: 非實體表,而是**記憶體虛擬表**,查詢時動態從伺服器元數據讀取生成。
核心作用:
PROCESSLIST (當前連線)、INNODB_TRX (事務)、INNODB_LOCKS (鎖)、INNODB_BUFFER_PAGE (緩衝池頁面)SHOW 命令的底層實現:SHOW TABLES ≡ SELECT TABLE_NAME FROM information_schema.TABLES WHERE TABLE_SCHEMA=DATABASE()關鍵表分類:
| 類別 | 代表表 | 用途 |
|---|---|---|
| 結構定義 | SCHEMATA, TABLES, COLUMNS, INDEXES, CONSTRAINTS | DDL 逆向工程、架構文檔生成 |
| 權限控制 | USER_PRIVILEGES, SCHEMA_PRIVILEGES, TABLE_PRIVILEGES | 權限審計、合規檢查 |
| 運行狀態 | PROCESSLIST, INNODB_TRX, INNODB_LOCKS, INNODB_BUFFER_POOL_STATS | 性能診斷、阻塞分析、死鎖排查 |
| 字符集/排序 | CHARACTER_SETS, COLLATIONS, COLLATION_CHARACTER_SET_APPLICABILITY | 編碼遷移、相容性測試 |
本質: 實體表 (MyISAM/InnoDB),持久化儲存於磁碟。
核心作用:
user (帳號/密碼/全域權限)、db (庫級權限)、tables_priv (表級)、columns_priv (欄位級)、procs_priv (程序級)、proxies_priv (代理用戶)global_variables, persisted_variablestime_zone* 表,支援 CONVERT_TZ()event 表存儲定時任務func (UDF)、help_* (內建幫助)metadata_lock, backup_progress (8.0+)-- 假設誤刪 information_schema
DROP DATABASE information_schema;
-- 結果:所有 SHOW 命令失效、無法解析表結構、存儲程序無法編譯、備份工具崩潰
-- 假設誤刪 mysql
DROP DATABASE mysql;
-- 結果:無法驗證用戶登入 (權限表丟失)、啟動失敗、現有連線權限檢查失效
| 誤區 | 事實 |
|---|---|
| information_schema 佔用大量磁碟空間 | 虛擬表,不佔磁碟,僅佔少量記憶體 |
| 可以像業務表一樣 TRUNCATE/DELETE | 不可寫入,僅支援 SELECT 查詢 |
| mysql 庫只有 user 表重要 | 包含權限、時區、事件、變數持久化等多個核心子系統 |
| 遷移時可忽略這兩個庫 | 權限、時區、事件必須同步遷移 (mysqldump --system=all) |
mysqldump --system=all --routines --events --triggers 完整備份系統庫mysql.user 檢查無密碼帳號、過度授權、匿名用戶information_schema.INNODB_* 表分析鎖等待、緩衝池命中率、脏頁比例mysql_upgrade 會自動檢查並修復系統表結構information_schema.TABLES 監控表大小增長、碎片率