升級腳本包含大量 DDL/DML,部分語句可能因重複執行、物件不存在等報錯,需「錯誤繼續執行」而非中斷。
mysql -uroot -ppassword --force db_name < patch.sql
--force / -f:遇錯繼續,不退出,錯誤輸出到 stderr-v(verbose)可看清哪條語句失敗--show-warnings 顯示警告| 行為 | 預設 | --force |
|---|---|---|
| 遇錯 | 立即退出,返回碼非 0 | 輸出錯誤,繼續下一條 |
| 事務 | 隱含提交已執行部分 | 同預設(非事務包裹) |
| 適用 | 嚴格遷移、不可部份成功 | 冪等腳本、補丁升級、清理類腳本 |
CREATE TABLE IF NOT EXISTS、DROP COLUMN IF EXISTS、INSERT ... ON DUPLICATE KEY UPDATE)pt-online-schema-change / gh-ost 線上變更,避免鎖表--force,並事後檢查錯誤日誌確認無副作用# 將大檔案拆分為小批次,每批次獨立事務 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 是「急救包」,冪等設計才是「長效藥」。