首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

MySQL 批次腳本執行遇錯不中斷:--force 參數實戰

     編輯:MySQL 資料庫相關知識

場景

升級腳本包含大量 DDL/DML,部分語句可能因重複執行、物件不存在等報錯,需「錯誤繼續執行」而非中斷。

解決方案

mysql -uroot -ppassword --force db_name < patch.sql

參數說明

  • --force / -f:遇錯繼續,不退出,錯誤輸出到 stderr
  • 搭配 -v(verbose)可看清哪條語句失敗
  • 搭配 --show-warnings 顯示警告

對比:預設行為 vs --force

行為預設--force
遇錯立即退出,返回碼非 0輸出錯誤,繼續下一條
事務隱含提交已執行部分同預設(非事務包裹)
適用嚴格遷移、不可部份成功冪等腳本、補丁升級、清理類腳本

最佳實踐

  1. 優先編寫冪等腳本(CREATE TABLE IF NOT EXISTS、DROP COLUMN IF EXISTS、INSERT ... ON DUPLICATE KEY UPDATE)
  2. 大型升級用 pt-online-schema-change / gh-ost 線上變更,避免鎖表
  3. 必要時才用 --force,並事後檢查錯誤日誌確認無副作用
  4. 生產環境執行前必在測試環境全量演練

進階:分批執行大腳本

# 將大檔案拆分為小批次,每批次獨立事務
split -l 1000 patch.sql patch_part_
for f in patch_part_*; do
  mysql -uroot -ppassword --force db_name < "$f"
  echo "Completed $f"
done

--force 是「急救包」,冪等設計才是「長效藥」。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved