| 參數 | 說明 | 範例 |
-h | MySQL 伺服器 IP/主機名 | -h 127.0.0.1 |
-P | 埠號(大寫 P) | -P 3306 |
-u | 用戶名 | -u root |
-p | 密碼(緊跟參數或留空提示輸入) | -psecret / -p |
dbname | 預設資料庫(位置參數) | test_db |
-A / --no-auto-rehash | 禁用自動補全,啟動更快 | 生產環境推薦 |
場景一:執行 SQL 腳本檔案(導入/建表/批量操作)
# 方式 1:標準輸入重定向(推薦)
mysql -h host -P port -u user -p dbname < script.sql
# 方式 2:source 命令(已進入 mysql shell 後)
mysql> source /path/to/script.sql;
場景二:執行查詢並導出結果到檔案
方法 A:管道 + 重定向(無表頭,Tab 分隔)
cat query.sql | mysql -h host -P port -u user -p dbname > /tmp/data.txt
輸出格式:欄位間 Tab 分隔,無表頭,NULL 顯示為 NULL 字串。適合直接導入 Excel/資料倉庫。
方法 B:mysql 內建 tee 命令(含表頭、格式化表格)
mysql> tee /tmp/textdata
Logging to file '/tmp/textdata'
mysql> SELECT * FROM user;
mysql> notee -- 停止記錄
輸出為終端顯示的表格格式,含表頭、邊框,適合人工閱讀/報告。
方法 C:--batch --raw 獲得原始 Tab 分隔(含表頭)
mysql --batch --raw -h host -u user -p dbname -e "SELECT * FROM user" > /tmp/raw.tsv
--batch:非互動模式,輸出 Tab 分隔
--raw:不轉義特殊字符(配合 --batch)
-e:直接執行 SQL 字串
場景三:Xcopy 物理冷備份(Windows 環境)
適用於 MyISAM/靜態 InnoDB、停機維護窗口:
@echo off
REM db_back.bat
net stop mysql
xcopy "E:\AppServ\MySQL\data\*" "D:\db_backup\%date:~0,10%\" /E /Y /I
net start mysql
參數說明:/E 包含空目錄,/Y 覆蓋不提示,/I 目標視為目錄。
⚠️ 限制:需停機、無法增量、InnoDB 需確保 innodb_fast_shutdown=0 乾淨關閉。
進階自動化腳本範例
#!/bin/bash
# daily_export.sh - 每日導出核心業務表
set -euo pipefail
DB_HOST="127.0.0.1"
DB_USER="exporter"
DB_PASS="$(cat /etc/mysql/exporter.pass)"
DB_NAME="prod_db"
OUT_DIR="/backup/exports/$(date +%F)"
mkdir -p "$OUT_DIR"
TABLES=("orders" "users" "products" "payments")
for tbl in "${TABLES[@]}"; do
mysql --batch --raw -h"$DB_HOST" -u"$DB_USER" -p"$DB_PASS" "$DB_NAME" \
-e "SELECT * FROM \`$tbl\` WHERE created_at >= DATE_SUB(CURDATE(), INTERVAL 1 DAY)" \
> "$OUT_DIR/${tbl}_$(date +%F).tsv"
# 壓縮
gzip "$OUT_DIR/${tbl}_$(date +%F).tsv"
done
# 上傳至對象儲存 / 異地備份
# rclone copy "$OUT_DIR" remote:mysql-exports/$(date +%F)
效能與安全提示
- 大結果集:加
--quick(服務端不緩衝,直接流式傳輸)防止客戶端 OOM
- 密碼安全:避免命令列明文密碼,使用
--defaults-extra-file 或環境變數 MYSQL_PWD(8.0+ 棄用)
- 字符集:
--default-character-set=utf8mb4 確保中文正確導出
- 並行導出:多表可用
xargs -P 或 GNU Parallel 並行
總結
命令列 mysql 客戶端是「瑞士軍刀」:腳本執行用重定向、結果導出用 --batch/tee、自動化用 Shell/Python 封裝。掌握這些組合拳,能構建零依賴、高可靠的資料處理管線。
copyright ©
萬盛學電腦網 all rights reserved