SHOW 是 MySQL 運維、開發、調優的「瑞士軍刀」。本文按功能域分類匯總 20+ 高頻 SHOW 命令,附帶輸出關鍵列解讀與實戰用法,建議收藏備查。
一、 對象結構類
| 命令 | 說明 | 關鍵輸出列 | 典型用途 |
SHOW DATABASES; | 列出所有數據庫 | Database | 巡檢、腳本遍歷 |
SHOW TABLES [FROM db_name]; | 列出當前/指定庫的表 | Tables_in_db | Schema 同步、遷移清單 |
SHOW COLUMNS FROM tbl_name [FROM db_name]; | 列定義 (等同 DESC) | Field, Type, Null, Key, Default, Extra | 快速查結構 |
SHOW CREATE TABLE tbl_name; | 完整建表 DDL | Table, Create Table | 遷移、審計、版本控制 |
SHOW TABLE STATUS [FROM db_name]; | 表級統計信息 | Name, Engine, Rows, Data_length, Index_length, Auto_increment, Create_time, Collation | 容量規劃、碎片判斷 |
SHOW INDEX FROM tbl_name; | 索引詳情 | Key_name, Non_unique, Seq_in_index, Column_name, Cardinality, Index_type | 索引優化、重複索引檢測 |
二、 運行時狀態類
| 命令 | 說明 | 關鍵指標 |
SHOW STATUS; | 服務器狀態變量 (會話/全局) | Threads_connected, Questions, Slow_queries, Innodb_buffer_pool_reads, Handler_read_rnd_next |
SHOW GLOBAL STATUS; | 全局累計計數器 | 同上,適合監控採集 |
SHOW SESSION STATUS; | 當前會話計數器 | 排查單連接行為 |
SHOW PROCESSLIST; | 當前線程列表 | Id, User, Host, db, Command, Time, State, Info (SQL文本) |
SHOW FULL PROCESSLIST; | 完整 SQL 文本 (不截斷) | 同上,Info 列完整 |
SHOW ENGINE INNODB STATUS; | InnoDB 內部狀態 (鎖、事務、緩衝池、日志) | 死鎖信息、事務等待、緩衝池命中率 |
SHOW ENGINES; | 可用存儲引擎及默認引擎 | Engine, Support, Comment, Transactions, XA, Savepoints |
三、 配置與權限類
| 命令 | 說明 | 關鍵輸出 |
SHOW VARIABLES [LIKE 'pattern']; | 系統變量 (配置參數) | Variable_name, Value (如 max_connections, innodb_buffer_pool_size) |
SHOW GRANTS [FOR user@host]; | 用戶權限 (可用於審計/遷移) | Grants for user@host (GRANT 语句形式) |
SHOW PRIVILEGES; | 服務器支持的所有權限類型 | Privilege, Context, Comment |
SHOW CREATE DATABASE db_name; | 建庫 DDL | Database, Create Database |
四、 診斷與日志類
| 命令 | 說明 |
SHOW WARNINGS; | 上一條語句產生的警告/提示/錯誤 (含代碼、消息) |
SHOW ERRORS; | 僅顯示錯誤 (ERROR 級別) |
SHOW BINLOG EVENTS [IN 'log_name'] [FROM pos] [LIMIT n]; | 解析二進制日志事件 (需 REPLICATION CLIENT 權限) |
SHOW MASTER STATUS; | 主庫當前 Binlog 文件/位置 |
SHOW SLAVE STATUS \G; | 從庫複製狀態 (Seconds_Behind_Master, Last_IO_Error, Last_SQL_Error) |
SHOW RELAYLOG EVENTS ...; | 解析中繼日志 |
五、 實戰組合拳
- 找慢查詢源頭:
SHOW FULL PROCESSLIST → 看 State 為 Sending data/Locked、Time 大的線程 → KILL id。
- 判斷主從延遲:
SHOW SLAVE STATUS \G 看 Seconds_Behind_Master 及 Relay_Log_Space。
- 分析死鎖:
SHOW ENGINE INNODB STATUS 找 LATEST DETECTED DEADLOCK 區塊。
- 配置驗收:
SHOW VARIABLES LIKE 'innodb_%'; 對比標準化參數模板。
- 權限遷移:
SHOW GRANTS FOR 'app'@'%'; → 在新實例執行輸出的 GRANT 語句。
六、 輸出格式小技巧
\G 替換分號:垂直顯示,適合寬表/長文本 (如 SHOW ENGINE INNODB STATUS\G)。
LIKE 'pattern%' 支持通配符過濾,減少輸出噪音。
mysql -e "SHOW ..." -t 表格輸出,便於腳本解析/報表嵌入。
七、 總結
SHOW 族命令覆蓋「靜態結構 → 動態運行 → 配置權限 → 複製日志」全鏈路。熟練掌握高頻 10 條 (DATABASES, TABLES, COLUMNS, CREATE TABLE, INDEX, STATUS, PROCESSLIST, VARIABLES, GRANTS, ENGINE INNODB STATUS) 即可應對 90% 運維開發場景。