多數 DBA 熟知 mysqld 服務端啟動參數,卻忽略 mysql 客戶端同樣擁有豐富選項。善用這些參數能大幅簡化日常操作、腳本編寫與自動化流程。
| 參數 | 短參數 | 用途與場景 |
|---|---|---|
--auto-rehash | -A | 啟動時自動載入資料庫/表/欄位名稱自動完成(預設開啟),大型庫可用 --skip-auto-rehash 或 -A 加快啟動 |
--batch | -B | 非互動模式輸出(Tab 分隔、不含邊框),適合腳本解析、管道傳遞 |
--column-names | 輸出欄位標題(預設開啟),--skip-column-names 僅輸出資料行 | |
--compress | -C | 啟用壓縮協議傳輸(慢速網路/跨機房連線顯著降低延遲) |
--database=name | -D | 連線後直接 USE name,腳本中避免額外語句 |
--delimiter=str | 自訂語句分隔符(預設 ;),批次執行含 ; 的複雜語句時極有用 | |
--execute=statement | -e | 執行單條 SQL 並退出,自動化腳本核心參數,例:mysql -e "SHOW SLAVE STATUS\G" |
--force | -f | 遇錯誤繼續執行後續語句(預設遇錯停止),批次匯入 SQL 檔時防止中斷 |
--html | -H | 輸出 HTML 表格格式,快速生成報表網頁 |
--ignore-spaces | -i | 忽略函數名後的空格,允許 COUNT (*) 寫法 |
--line-numbers | 錯誤訊息顯示行號,除錯大型 SQL 檔必備 | |
--no-beep | -b | 禁用錯誤蜂鳴聲 |
--pager=command | 指定分頁器(如 less -SFX),長結果集瀏覽神器 | |
--prompt=format | 自訂提示符,支援 \u用戶 \h主機 \d資料庫 \D時間,例:--prompt="(\u@\h) [\d]>\ " | |
--quick | -q | 不緩存查詢結果直接逐行輸出,處理超大結果集避免客戶端 OOM |
--raw | -r | 原始輸出(不轉義特殊字元),配合 --batch 產出純文字資料 |
--safe-updates | -U | 拒絕無 WHERE 的 UPDATE/DELETE、限制大結果集,防止手滑刪庫(新手強烈建議開啟) |
--silent | -s | 靜默模式(減少輸出),配合 -e 只取純結果 |
--skip-line-numbers | -L | 不顯示錯誤行號 |
--table | -t | 表格格式輸出(預設互動模式),--batch 時預設關閉 |
--tee=file | 將所有輸出同時寫入檔案(日誌/稽核),--disable-tee 關閉 | |
--vertical | -E | 垂直顯示結果(等同 \G),寬表單欄位閱讀更清晰 |
--wait | -w | 連線失敗等待重試(預設 1 次),配合 --connect-timeout 用於高可用切換腳本 |
--xml | -X | 輸出 XML 格式,便於程式解析 |
mysql -uroot -p'pass' -h 10.0.0.1 -B -E -e "SHOW GLOBAL STATUS LIKE 'Threads_connected'; SHOW SLAVE STATUS\G"
mysql -uroot -p'pass' -D mydb -B -q --skip-column-names -e "SELECT * FROM huge_table" > huge_table.tsv
mysql -uroot -p'pass' --prompt="(\u@\h) [\d]>\ " --pager="less -SFX"
mysql -uroot -p'pass' --delimiter=// < complex_procedures.sql
mysql 客戶端並非單純的互動工具,其豐富的啟動參數讓它化身為自動化、報表、ETL、巡檢的瑞士刀。建議 DBA 將上表收藏,並在日常運維、CI/CD 流水線、應急演練腳本中靈活組合,事半功倍。