| 層級 | 命令 | 預期結果 | 異常排查 |
|---|---|---|---|
| 進程 | tasklist | findstr mysqld | 進程存在 | 查 .err 日誌、事件查看器 |
| 端口 | netstat -ano | findstr 3306 | LISTENING | 防火牆、bind-address、端口衝突 |
| 協議 | mysqlshow | 列出所有數據庫 | 認證失敗、skip-networking |
| 認證 | mysqlshow -u root -p mysql | 列出 mysql 庫表 | 密碼錯誤、host 不匹配 |
| 服務器狀態 | mysqladmin version status processlist | 版本、運行時間、線程數 | 服務器掛起、連線數耗盡 |
| 業務 SQL | mysql -u root -p test -e "SELECT 1;" | 返回 1 | 權限不足、表損壞 |
# 列出所有庫
mysqlshow -u root -p
# 列出指定庫所有表
mysqlshow -u root -p my_db
# 列出表結構 (欄位、類型、索引)
mysqlshow -u root -p my_db my_table
# 列出索引詳情
mysqlshow -u root -p --keys my_db my_table
# 版本與狀態
mysqladmin -u root -p version
mysqladmin -u root -p status
# 進程列表 (相當於 SHOW PROCESSLIST)
mysqladmin -u root -p processlist
# 變量與狀態變量
mysqladmin -u root -p variables
mysqladmin -u root -p extended-status
# 關閉服務器
mysqladmin -u root -p shutdown
# 刷新權限/日志/表
mysqladmin -u root -p flush-privileges
mysqladmin -u root -p flush-logs
mysqladmin -u root -p flush-tables
# 啟動/停止複製 (從庫)
mysqladmin -u root -p start-slave
mysqladmin -u root -p stop-slave
# 交互式
mysql -u root -p
# 批量執行文件
mysql -u root -p my_db < schema.sql
# 單條 SQL 並退出 (腳本友好)
mysql -u root -p -e "SELECT COUNT(*) FROM orders WHERE date=DATE(NOW());"
# 垂直輸出 (寬表易讀)
mysql -u root -p -E -e "SHOW ENGINE INNODB STATUS;"
# 禁用表格格式 (CSV/TSV 導出)
mysql -u root -p --batch --skip-column-names -e "SELECT * FROM users" > users.tsv
現象:客戶端連接緩慢 (數秒)、show processlist 顯示 Unauthenticated 狀態。
原因:服務器對客戶端 IP 執行反向 DNS 解析,DNS 失敗/超時導致阻塞。
解決:
# my.cnf
[mysqld]
skip-name-resolve
# 授權表 Host 列僅用 IP 或 localhost
或強制客戶端用協議:
mysql --protocol=TCP -h 127.0.0.1 # 強制 TCP
mysql --protocol=PIPE # Windows 命名管道
mysql --protocol=SOCKET -S /tmp/mysql.sock # Unix Socket
「進程在、端口通、庫可見、表可查、SQL 跑通」五步驗證法,配合 mysqlshow 看結構、mysqladmin 管狀態、mysql 跑業務,構建 MySQL 交付驗收標準化 SOP。