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

mysqldump 導出觸發器避坑:--triggers=false 解決多觸發器衝突錯誤

     編輯:MySQL 資料庫相關知識

mysqldump 觸發器導出導入錯誤 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'。

根因分析

  • MySQL 5.7.2 前,單表同一事件、同一時機(如 BEFORE INSERT)只能建一個觸發器。
  • mysqldump 默認 --triggers=TRUE,導出時包含觸發器定義。
  • 若源庫有多個同類型觸發器(或導入目標版本不支援),導入失敗。

解決方案

方案 1:導出時跳過觸發器 (推薦)


mysqldump --triggers=false -u root -p database > dump.sql

後續手動在目標庫重建觸發器(按新版本語法合併邏輯)。

方案 2:升級目標 MySQL 版本至 5.7.2+

5.7.2+ 支援同表同事件多觸發器,按創建順序執行。

方案 3:導出前合併觸發器


-- 查看現有觸發器
SHOW TRIGGERS;
-- 手動刪除多餘,合併邏輯為單個觸發器
DROP TRIGGER IF EXISTS trg_old1;
DROP TRIGGER IF EXISTS trg_old2;
CREATE TRIGGER trg_merged BEFORE INSERT ON t FOR EACH ROW BEGIN ... END;

相關參數對照

參數默認值作用
--triggersTRUE導出觸發器
--routinesFALSE導出存儲過程/函數
--eventsFALSE導出事件調度器
--single-transactionFALSEInnoDB 熱備份 (需配合 --master-data)
--master-data=20輸出 CHANGE MASTER TO 註釋,含 binlog 位點

最佳實踐建議

  1. 生產備份腳本顯式指定 --triggers=false --routines=true --events=true,避免默認值變更影響。
  2. 觸發器邏輯納入版本控制(SQL 文件),部署流程中獨立應用。
  3. 跨版本遷移前,必須在測試環境驗證導入,檢查觸發器/存儲過程/事件兼容性。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved