交互式模式適合調試,但生產環境的定時任務、部署腳本、大批量操作,必須使用批處理模式。本文系統梳理 MySQL 批處理的啟動方式、參數控制、輸出格式差異、腳本複用等核心知識。
mysql < batch-file
# 帶連接參數
mysql -h host -u user -p < batch-file
Enter password: ********
mysql -e "source batch-file"
# 或
mysql -e "source C:/scripts/batch-file.sql"
Windows 下文件路徑含空格/特殊字符時,source 命令比重定向更穩健。
mysql> SOURCE filename;
mysql> \. filename
適用於已登入客戶端後動態執行腳本。
| 參數 | 作用 | 典型場景 |
|---|---|---|
--force | 遇錯繼續執行,不中斷 | 大腳本部署,部分語句可失敗 |
-t / --table | 輸出表格格式(同交互模式) | 人工查看報表 |
-v / --verbose | 顯示執行的 SQL 語句 | 調試腳本、審計日誌 |
-vvv | 更詳細輸出(含元數據) | 深度調試 |
-s / --silent | 表格格式輸出,制表符分隔 | 程序解析、管道傳輸 |
-r / --raw | 原始輸出,不轉義特殊字符 | 二進制數據導出 |
-N / --skip-column-names | 不輸出列名 | 純數據導出 |
+---------+
| species |
+---------+
| bird |
| cat |
| dog |
+---------+
species
bird
cat
dog
mysql -t < batch-file | more
mysql < batch-file > mysql.out
# 結合參數
mysql -t -v < batch-file > execution.log 2>&1
mysql < batch-file | more
mysql < batch-file | less
mysql -s -N < batch-file | while read col1 col2; do
echo "Processing: $col1 - $col2"
done
-- batch-script.sql
-- 版本:v1.2
-- 作者:DBA Team
-- 說明:月度數據歸檔
SET NAMES utf8mb4;
SET time_zone = '+08:00';
-- 安全檢查
SELECT 'Starting archive at ', NOW();
-- 核心業務邏輯
DELETE FROM logs WHERE create_time < DATE_SUB(NOW(), INTERVAL 1 YEAR) LIMIT 10000;
-- 驗證
SELECT 'Archive completed at ', NOW(), ROW_COUNT() AS deleted_rows;
#!/bin/bash
# run_batch.sh
mysql --force -h $HOST -u $USER -p$PASS -D $DB < batch-script.sql > result.log 2>&1
EXIT_CODE=$?
if [ $EXIT_CODE -ne 0 ]; then
echo "Batch execution failed, check result.log"
# 發送告警
exit 1
fi
echo "Batch completed successfully"
批處理模式下默認 AUTOCOMMIT=1。需事務保證一致性時,在腳本中顯式控制:
START TRANSACTION;
UPDATE account SET balance = balance - 100 WHERE id = 1;
UPDATE account SET balance = balance + 100 WHERE id = 2;
COMMIT;
-- 或遇錯回滾
-- ROLLBACK;
批處理模式是 MySQL 從「開發工具」走向「生產級組件」的關鍵能力。掌握 </source 兩種執行入口、-t/-v/-s/-N 輸出控制參數、錯誤處理與事務控制模式,配合 Shell/Python 自動化腳本,可構建穩健、可審計、可擴展的數據庫運維體系。