SHOW 是 MySQL 元數據查看的瑞士軍刀。本文系統整理 18 種核心用法,按功能分類,附帶實戰場景、進階語法與常見誤區,建議收藏備查。
庫表結構類
| 命令 | 說明 | 等效/別名 | 典型場景 |
SHOW DATABASES; | 列出所有數據庫 | SHOW SCHEMAS | 實例巡檢、權限審計 |
SHOW TABLES [FROM db]; | 列出表 | | Schema 同步、腳本生成 |
SHOW COLUMNS FROM tbl [FROM db]; | 列定義 | DESC tbl / EXPLAIN tbl | 開發建表驗證、ORM 映射 |
SHOW CREATE TABLE tbl; | 完整建表 SQL | | 遷移評估、版本對比、文檔生成 |
SHOW INDEX FROM tbl; | 索引詳情 | SHOW KEYS FROM tbl | 索引優化、重複索引檢測 |
SHOW TABLE STATUS [FROM db]; | 表統計 (行數、大小、引擎、自增、更新時間、碎片) | | 容量規劃、碎片整理判斷 |
運行狀態與性能類
| 命令 | 說明 | 關鍵指標 |
SHOW STATUS; | 服務器狀態變量 (Session/Global) | Threads_connected、Queries、Innodb_buffer_pool_reads、Handler_read_rnd_next |
SHOW VARIABLES; | 配置參數 (Session/Global) | innodb_buffer_pool_size、max_connections、sql_mode、character_set_server |
SHOW PROCESSLIST; | 當前線程 (查詢、鎖等待、睡眠) | 慢查詢定位、阻塞鏈分析、KILL id |
SHOW ENGINE INNODB STATUS; | InnoDB 內部狀態 (事務、鎖、死鎖、緩衝池、日誌) | 死鎖復盤、鎖等待分析、刷盤性能 |
SHOW ENGINES; | 可用存儲引擎及默認 | 遷移前確認引擎支持 |
權限與安全類
| 命令 | 說明 |
SHOW GRANTS FOR user[@host]; | 用戶權限 (等同 SHOW GRANTS FOR CURRENT_USER) |
SHOW PRIVILEGES; | 服務器支持的所有權限類型 |
日誌與複製類
| 命令 | 說明 |
SHOW BINLOG EVENTS [IN 'log'] [FROM pos] [LIMIT n]; | 二進制日誌事件瀏覽 |
SHOW MASTER STATUS; | 主庫 Binlog 位置 |
SHOW SLAVE STATUS; / SHOW REPLICA STATUS; | 從庫複製狀態 (8.0.22+ 用 REPLICA) |
SHOW RELAYLOG EVENTS ... | 中繼日誌事件 |
診斷類
| 命令 | 說明 |
SHOW WARNINGS; | 最後語句的警告/錯誤/通知 |
SHOW ERRORS; | 僅最後語句的錯誤 |
SHOW [STORAGE] ENGINES; | 同 SHOW ENGINES |
進階技巧
- 模糊匹配:
SHOW VARIABLES LIKE 'innodb%';、SHOW STATUS LIKE 'Com_%';
- 作用域控制:
SHOW SESSION VARIABLES / SHOW GLOBAL STATUS。
- information_schema 替代:
SELECT * FROM information_schema.TABLES WHERE TABLE_SCHEMA='db'; 支持複雜過濾、聚合、JOIN,適合自動化腳本。
- 性能庫:
performance_schema / sys schema 提供更細粒度、標準化的儀表盤視圖。
常見誤區提醒
SHOW TABLE STATUS 的 Rows 在 InnoDB 中是**估算值**,不可用於精確計數。
SHOW PROCESSLIST 默認只顯示前 100 條,完整視圖需 SHOW FULL PROCESSLIST 或查 performance_schema.threads。
SHOW ENGINE INNODB STATUS 輸出文本長度受限(舊版 1MB),完整內容請啟用 innodb_print_all_deadlocks=ON 寫入錯誤日誌。
SHOW SLAVE STATUS 在 8.0.22+ 重命名為 SHOW REPLICA STATUS,舊命令兼容但建議遷移。
熟練掌握 SHOW 家族,是 MySQL 日常運維、故障排查、性能調優的「聽診器」與「手術刀」。