萬盛學電腦網

您现在的位置: 萬盛學電腦網 >> 程式設計 >  >> 資料庫 >> MySQL 教學

MySQL 命令列資料匯出實戰:mysql 客戶端導出數據、執行腳本與備份自動化

MySQL 命令列客戶端 mysql 不僅是管理工具,更是自動化腳本、批量資料處理、CI/CD 流水線的核心組件。本文系統整理連接參數、SQL 腳本執行、結果導出、交互記錄、Xcopy 物理備份等實戰技巧。

基礎連接參數

mysql -h host_ip -P port -u username -p password dbname -A

場景一:執行 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
參數說明範例
-hMySQL 伺服器 IP/主機名-h 127.0.0.1
-P埠號(大寫 P)-P 3306
-u用戶名-u root
-p密碼(緊跟參數或留空提示輸入)-psecret / -p
dbname預設資料庫(位置參數)test_db
-A / --no-auto-rehash禁用自動補全,啟動更快生產環境推薦