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

mysqldump 導出觸發器重複導入錯誤:--triggers=false 解決方案

     編輯:MySQL 資料庫相關知識

mysqldump 觸發器重複導入 ERROR 1235:預設行為陷阱與一鍵解決

使用 mysqldump 導出含觸發器的資料庫,預設會導出觸發器定義。若同一資料庫先後導入結構檔與觸發器檔,或目標庫已存在同名觸發器,將報錯 ERROR 1235 (42000): This version of MySQL doesn't yet support 'multiple triggers with the same action time and event for one table'。本文解析原因與標準解法。

問題復現

# 導出預設含觸發器
mysqldump -S /tmp/mysql.sock test > test.sql
# 導入
mysql -S /tmp/mysql.sock test < test.sql
# 若再導入單獨觸發器檔
mysqldump -S /tmp/mysql.sock -R test > triggers.sql  # -R 導出存儲過程/觸發器
mysql -S /tmp/mysql.sock test < triggers.sql
# ERROR 1235: 同一表同一事件同一時機重複觸發器

根因分析

  • mysqldump 預設 --triggers=TRUE,導出檔已包含 CREATE TRIGGER 語句
  • 參數 -R / --routines 同樣導出觸發器 (含存儲過程)
  • 分檔導入或目標庫已有觸發器時,嘗試建立同名/同事件/同時機觸發器 → MySQL 拒絕 (一張表同一事件同一時機僅允許一個觸發器)

標準解法

# 導出時明確禁用觸發器
mysqldump --triggers=false -u user -p db_name > dump.sql

# 或僅導出觸發器 (需配合無觸發器的結構/數據檔)
mysqldump --triggers=true --no-create-info --no-data --routines=false db_name > triggers_only.sql

參數對照表

參數預設值作用建議
--triggersTRUE導出觸發器遷移時通常 false,單獨管理觸發器
--routinesFALSE導出存儲過程/函數 (含觸發器)需遷移邏輯對象時 true
--eventsFALSE導出 Event Scheduler 事件按需

最佳遷移流程

  1. 結構+數據 (無觸發器/存儲過程/事件):
    mysqldump --triggers=false --routines=false --events=false \
      --single-transaction --master-data=2 \
      --databases src_db > structure_data.sql
  2. 邏輯對象單獨導出**:
    mysqldump --triggers=true --routines=true --events=true \
      --no-create-info --no-data \
      --databases src_db > routines_triggers.sql
  3. 目標庫按序導入**:
    mysql -u root -p target_db < structure_data.sql
    mysql -u root -p target_db < routines_triggers.sql
  4. 驗證**:
    SHOW TRIGGERS;
    SHOW PROCEDURE STATUS;
    SHOW EVENTS;

進階:觸發器版本控制與部署

生產環境建議:

  • 觸發器/存儲過程/事件 **納入版本控制** (Git),作為獨立 SQL 檔案管理
  • 部署流程:DROP TRIGGER IF EXISTS ...; CREATE TRIGGER ... 幂等腳本
  • 避免依賴 mysqldump 導出邏輯對象作為部署制品

總結

mysqldump --triggers=false 是避免 ERROR 1235 的**標準開關**。遷移時將結構數據與邏輯對象分離導出導入,配合版本控制管理觸發器,實現可重複、可審計、無衝突的資料庫部署。

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