SHOW 是 MySQL 管理員和開發者最常用的元數據查看命令族。本文系統梳理 18 種核心用法,按功能分類並附帶實戰場景說明,助你快速定位問題。
數據庫與表結構類
| 命令 | 說明 | 典型場景 |
SHOW DATABASES; | 列出所有數據庫 | 確認實例級架構、權限規劃 |
SHOW TABLES [FROM db_name]; | 列出當前/指定庫的所有表 | Schema 核對、腳本生成 |
SHOW COLUMNS FROM tbl_name [FROM db_name]; | 顯示表列定義(等同 DESC tbl_name) | 開發建表驗證、ORM 映射 |
SHOW CREATE TABLE tbl_name; | 顯示建表完整 SQL(含引擎、字符集、分區、索引) | 遷移評估、版本對比、文檔生成 |
SHOW INDEX FROM tbl_name; | 顯示索引詳細信息(基數、前綴長度、類型) | 索引優化、重複索引檢測 |
SHOW TABLE STATUS [FROM db_name]; | 表級統計:行數、大小、引擎、自增值、更新時間、碎片率 | 容量規劃、碎片整理判斷、備份窗口估算 |
運行狀態與性能類
| 命令 | 說明 | 關鍵指標示例 |
SHOW STATUS; | 服務器狀態變量(會話/全局) | Threads_connected、Queries、Innodb_buffer_pool_reads、Handler_read_rnd_next |
SHOW VARIABLES; | 服務器配置參數(會話/全局) | 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 LOGS; | BDB 引擎日誌(已棄用,歷史參考) |
SHOW WARNINGS; | 最後一條語句產生的警告、錯誤、通知 |
SHOW ERRORS; | 僅顯示最後一條語句的錯誤 |
SHOW BINLOG EVENTS [IN 'log_name'] [FROM pos] [LIMIT n]; | 二進制日誌事件瀏覽(複製、PITR 核心) |
SHOW MASTER STATUS; / SHOW SLAVE STATUS; | 主從複製狀態核心命令 |
進階技巧
- 模糊匹配:
SHOW VARIABLES LIKE 'innodb%';、SHOW STATUS LIKE 'Com_%';
- 會話 vs 全局:
SHOW SESSION VARIABLES / SHOW GLOBAL STATUS 精確控制作用域。
information_schema 替代:SELECT * FROM information_schema.TABLES WHERE TABLE_SCHEMA='db'; 可做複雜過濾、聚合、Join,適合自動化腳本。
常見誤區提醒
SHOW TABLE STATUS 的 Rows 在 InnoDB 中是估算值,不可用於精確行數統計。
SHOW PROCESSLIST 默認只顯示前 100 條,完整視圖需 SHOW FULL PROCESSLIST 或查 performance_schema.threads。
SHOW ENGINE INNODB STATUS 輸出文本長度受限(舊版 1MB),完整內容請查 innodb_status 表或啟用 innodb_print_all_deadlocks 寫入錯誤日誌。
熟練掌握 SHOW 家族,是 MySQL 日常運維、故障排查、性能調優的「聽診器」與「手術刀」。