2008-09-18 35 views
2

好吧,我正在運行一個單一的主設備和一些奴隸的設置。所有寫入都通過主設備,並複製到嚴格用於讀取的從設備。MySQL觸發器和存儲過程複製

現在我有一個存儲過程(不是函數),它是由插入上的觸發器調用的。根據MySQL文檔,對於複製觸發器,將調用記錄到觸發器,而存儲過程實際記錄存儲過程的結果。

所以我的問題是,當我的觸發器被觸發時,它是否會複製觸發器和觸發器調用的過程的結果(導致該過程有效地運行兩次)?或者它會簡單地複製觸發器,讓奴隸自己重新運行存儲過程?

感謝

回答

6

在MySQL 5.0(和MySQL 5.1與基於二進制日誌聲明),只調用查詢記錄,所以在你的情況下,INSERT將被記錄。

在從站上,INSERT將被執行,然後觸發器將在從站上重新運行。因此,觸發器需要存在於從屬設備上,並假設它已經存在,那麼它將以與主設備完全相同的方式執行。

在MySQL 5.1中,有基於行的二進制日誌記錄,它只記錄被更改的行,因此觸發器不會在從屬系統上重新啓動,但所有更改的行仍會傳播。

0

除了哈里森的出色答卷:

  • 假設數據庫是同步的(架構,數據,相同的版本),開始時,它應該只是工作
  • 如果沒有,那麼它可能是因爲你在查詢或觸發器中使用了非確定性的東西。修復。
  • 無論您如何使用複製,都需要進行監視以檢查從站是否始終處於同步狀態。沒有任何監控,他們會變得不同步(巧妙),你不會注意到。 MySQL沒有自動內置功能來檢查或修復它。