1

これが私のシナリオです

サーバー上で各サイトの他の DB とともにマスター DB を実行しているサーバー。更新がマスター DB に書き込まれ、トリガーがこのレコードを特定のサイトの関連 DB に挿入します。これは、サイト DB レベルまで複製されることを目的としています。

トリガーは正常に機能しますが、挿入されたレコードはスレーブ DB に到達しません。行ベースはオプションではないため、ステートメントベースのレプリケーションを使用しています。また、ストアド プロシージャを呼び出して、これをイベントとして実行しようとしましたが、何も起こりません。

これを回避する方法はありますか-ところで、私はMySQL 5.1を使用しています

ありがとう

以下のトリガーの構文

dbmaster=サーバー マスター db dbsite= サーバー サイト DB (これはレプリケーション マスターです)

delimiter # 
create trigger rstreplicate after insert on dbmaster.exchange 
for each row begin insert into dbsite.exchange 
select distinct new.TYPE, new.FILENAME, new.STATUS, new.USER_ID, new.INP_DATE, new.CHG_DATE from dbmaster.exchange where new.IP='127.0.0.1'; 
end# 
delimiter ;
4

1 に答える 1

0

MySQLのドキュメントから:

B.5.12: トリガーはレプリケーションで機能しますか?

はい。ただし、それらがどのように機能するかは、MySQL のすべてのバージョンで利用可能な MySQL の「従来の」ステートメントベースのレプリケーションを使用しているか、MySQL 5.1 で導入された行ベースのレプリケーション形式を使用しているかによって異なります。

ステートメントベースのレプリケーションを使用する場合、スレーブのトリガーは、マスターで実行される (そしてスレーブにレプリケートされる) ステートメントによって実行されます。

行ベースのレプリケーションを使用する場合、マスターで実行されたステートメントがスレーブにレプリケートされるため、トリガーはスレーブで実行されません。代わりに、行ベースのレプリケーションを使用する場合、マスターでトリガーを実行することによって発生した変更がスレーブに適用されます。

そのため、トリガーをトリガーしてスレーブに複製するステートメントが必要になります。また、ステートメントに応答して同じ更新を適用する複製トリガーをスレーブに作成する必要があります。

于 2012-03-21T16:56:23.333 に答える