| 類別 | 命令 | 用途 | 實戰範例 |
|---|---|---|---|
| 對象列表 | SHOW DATABASES | 列出所有數據庫 | SHOW DATABASES LIKE 'prod_%'; |
SHOW TABLES [FROM db] | 列出表 | SHOW TABLES FROM mysql LIKE 'user%'; | |
SHOW COLUMNS FROM tbl [FROM db] | 列出欄位結構 (等同 DESC) | SHOW COLUMNS FROM users WHERE Field LIKE '%time%'; | |
SHOW INDEX FROM tbl [FROM db] | 列出索引詳情 | SHOW INDEX FROM orders WHERE Key_name != 'PRIMARY'; | |
| 權限與安全 | SHOW GRANTS [FOR user] | 顯示用戶權限 (可用於審計) | SHOW GRANTS FOR 'app'@'%'; |
SHOW PRIVILEGES | 列出服務器支援的所有權限 | 確認動態權限 (如 BACKUP_ADMIN) | |
SHOW CREATE USER user | 8.0+ 顯示創建用戶完整語句 | 遷移用戶定義 | |
| 運行狀態 | SHOW PROCESSLIST [FULL] | 當前線程列表 (FULL 顯示完整 SQL) | SHOW FULL PROCESSLIST WHERE Time > 60; |
SHOW STATUS [LIKE 'pat'] | 會話/全局狀態變量 | SHOW GLOBAL STATUS LIKE 'Threads_%'; | |
SHOW VARIABLES [LIKE 'pat'] | 會話/全局系統變量 | SHOW GLOBAL VARIABLES LIKE 'max_connections'; | |
SHOW ENGINE INNODB STATUS | InnoDB 內部狀態 (鎖、事務、緩衝池、死鎖) | 死鎖分析、監控腳本核心數據源 | |
| 表維護 | SHOW TABLE STATUS [FROM db] | 表統計 (行數、大小、自增值、碎片率) | SHOW TABLE STATUS WHERE Data_free > 100*1024*1024; |
SHOW CREATE DATABASE db | 庫創建 DDL | 遷移庫定義 | |
SHOW CREATE TABLE tbl | 表創建 DDL (含索引、分區、外鍵) | 版本控制、跨環境同步結構 | |
| 存儲引擎 | SHOW ENGINES | 可用引擎及默認引擎 | 確認 InnoDB 是否 DEFAULT |
SHOW PLUGINS | 已安裝插件狀態 | 確認 validate_password、audit_log 是否 ACTIVE | |
SHOW ENGINE INNODB MUTEX | Mutex 爭用統計 (性能診斷) | 高併發鎖熱點分析 | |
| 診斷與日志 | SHOW WARNINGS [LIMIT n] | 上條語句的警告/通知 | INSERT 後檢查數據截斷警告 |
SHOW ERRORS [LIMIT n] | 上條語句的錯誤 | 批量導入失敗快速定位 | |
SHOW BINLOG EVENTS [IN 'file' FROM pos] | 二進制日志事件瀏覽 | PITR 恢復定位、複製延遲分析 | |
| 複制 | SHOW SLAVE STATUS / SHOW REPLICA STATUS | 從庫狀態 (Seconds_Behind_Master 等) | 監控複製延遲、錯誤號 |
SHOW MASTER STATUS | 主庫二進制日志文件/位置 | 建立新從庫起點 |
-- 1. 找出無主鍵表
SELECT TABLE_SCHEMA, TABLE_NAME FROM information_schema.TABLES
WHERE TABLE_TYPE='BASE TABLE' AND TABLE_SCHEMA NOT IN ('mysql','sys','performance_schema','information_schema')
AND TABLE_NAME NOT IN (SELECT TABLE_NAME FROM information_schema.TABLE_CONSTRAINTS WHERE CONSTRAINT_TYPE='PRIMARY KEY');
-- 2. 找出碎片率 > 20% 表 (需優化)
SELECT TABLE_SCHEMA, TABLE_NAME, Data_free, Data_length+Index_length AS total_size,
ROUND(Data_free/(Data_length+Index_length)*100,2) AS frag_pct
FROM information_schema.TABLES
WHERE Data_free > 0 AND (Data_length+Index_length) > 100*1024*1024
ORDER BY frag_pct DESC;
-- 3. 監控長事務 (InnoDB)
SHOW ENGINE INNODB STATUS\G
-- 關注 TRANSACTIONS 區塊:看 trx_id、trx_started、trx_mysql_thread_id
SHOW 系列是 MySQL DBA 的「聽診器」。熟練掌握 PROCESSLIST 看阻塞、ENGINE INNODB STATUS 診斷死鎖、TABLE STATUS 發現碎片、SLAVE STATUS 監控複製、VARIABLES/STATUS 調優參數,日常運維 80% 場景無需登入系統、無需第三方工具,原生命令即可搞定。