我在MySQL 5.0.45上運行幾個數據庫,並試圖讓我的遺留數據庫與修訂的模式同步,所以我可以並排運行。我正在通過向新數據庫添加觸發器來實現這一點,但我遇到了複製問題。我的設置如下。MySQL觸發器+複製與多個數據庫
服務器的 「主人」
- 數據庫 「legacydb」,複製到服務器的 「奴隸」。
- 數據庫「newdb」,觸發器更新「legacydb」並且不復制。
服務器 「奴隸」
- 數據庫 「legacydb」
我的更新 「NEWDB」 運行良好,並掀起我的觸發器。他們更新「主」服務器上的「legacydb」。但是,這些更改不會複製到奴隸身上。 MySQL文檔說,爲了簡單起見,在決定要複製哪些查詢而不是查看查詢產品時,複製會查看當前數據庫上下文(例如"SELECT DATABASE();"
)。我的觸發器是從數據庫「newdb」的上下文運行的,因此複製會忽略更新。
我曾嘗試將更新語句移動到「legacydb」中的存儲過程。當我連接到「主」並手動運行"USE newdb; CALL legacydb.do_update('Foobar', 1, 2, 3, 4);"
時,這工作正常(即數據複製到從屬)。但是,從觸發器調用此過程時,它不會複製。
到目前爲止,我對如何解決這個問題的思考一直是下列問題之一。
強制觸發器設置新的當前數據庫。這將是最簡單的,但我不認爲這是可能的。這是我希望用存儲過程實現的。
複製這兩個數據庫,並且在主站和從站中都有觸發器。這將是可能的,但一個痛苦的設立。
無論當前的數據庫上下文如何,強制複製都會選取「legacydb」的所有更改。
如果複製的運行水平太高,它甚至不會看到我的觸發器運行的任何更新,在這種情況下,沒有任何黑客攻擊會達到我想要的效果。
任何有關如何實現這一目標的幫助將不勝感激。
基本上,萬無一失的辦法是更新數據庫,如果有觸發複製的數據庫,或存儲功能,他們也必須存在在從數據庫上。對於如何編寫觸發器和函數還有一些限制,以便它們自己複製。 – Chris 2008-09-19 03:37:23