使用 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 同樣導出觸發器 (含存儲過程)# 導出時明確禁用觸發器
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
| 參數 | 預設值 | 作用 | 建議 |
|---|---|---|---|
--triggers | TRUE | 導出觸發器 | 遷移時通常 false,單獨管理觸發器 |
--routines | FALSE | 導出存儲過程/函數 (含觸發器) | 需遷移邏輯對象時 true |
--events | FALSE | 導出 Event Scheduler 事件 | 按需 |
mysqldump --triggers=false --routines=false --events=false \
--single-transaction --master-data=2 \
--databases src_db > structure_data.sqlmysqldump --triggers=true --routines=true --events=true \
--no-create-info --no-data \
--databases src_db > routines_triggers.sqlmysql -u root -p target_db < structure_data.sql
mysql -u root -p target_db < routines_triggers.sqlSHOW TRIGGERS;
SHOW PROCEDURE STATUS;
SHOW EVENTS;生產環境建議:
DROP TRIGGER IF EXISTS ...; CREATE TRIGGER ... 幂等腳本mysqldump 導出邏輯對象作為部署制品mysqldump --triggers=false 是避免 ERROR 1235 的**標準開關**。遷移時將結構數據與邏輯對象分離導出導入,配合版本控制管理觸發器,實現可重複、可審計、無衝突的資料庫部署。