プロが教える店舗&オフィスのセキュリティ対策術

MySQL5.5の準同期レプリケーションを使って、マスターサーバー(insert用)とスレーブサーバー(select用)を組み合わせたサイトを作る予定です。
マスター側のサイトはトリガーとイベントを多用しております。(トリガー13個、イベント8個)

当初、マスター側にもスレーブ側にもどちらにもトリガーとイベントを組み込んでいましたが、テストして分かったことは、イベントがエラーを起こすということでした。

マスター側でイベントが始まり結果をスレーブ側に送ることになるわけですが、同時間にスレーブ側のイベントも始まるわけなので、マスターの結果が送られてきたときにはスレーブのテーブルには計算後の数値が記載されており、結果エラーになってしまうことがわかりました。
そのため、スレーブ側のイベントは削除して構築しています。

問題はトリガーについてです。

マスター側にはAテーブルにインサートするとBテーブル、Cテーブル、Dテーブルが連鎖的に変更されるトリガを組んでおり、スレーブ側も同様のトリガを組んでいます。

幸い、いままでのテストでは、トリガーで計算した値が連鎖的に伝わってもエラーになっていません。
ただ、マスター側に高負荷が掛かり、マスターのトリガの計算よりもスレーブ側の計算のほうが早く終了した場合、イベントの時に起こったエラーが出ないか懸念しています。
テストで壊れるのはいいですが、実際に運用した後で壊れることは許されません。

質問としては、「実際にトリガーを使った高負荷サイトを構築されている方でスレーブサーバーを準同期で設定している方」から、どのように組めばよいかのアドバイスを頂きたいというものです。(こんな高負荷サイトで運用しているがトリガを組んでて問題ないなどという例があるとうれしいです)
よろしくお願いいたします。

スレーブのトリガーを外すのが一番簡単な方法なのですが、万一マスターがハングアップした際にはスレーブを昇格させる予定ですので出来る限りトリガーはそのままにしたいと考えておりますが、スレーブ側にトリガを組んだままというのは常識的にあり得ないというアドバイスであればそれでも結構です。
これはお願いなのですが、「他のサイトを調べて回答する」という方は申し訳ございませんがご遠慮願います(私も簡単なテストは済ませており低負荷では問題が生じないことまでは分かっております。ブログに落ちているような経験値はこれと大差ありません。この程度ではアドバイスにならないと感じています。)
実際に運用経験があり、正確な知識をお持ちの方にアドバイス頂きたいと思います。
よろしくお願いいたします。
構成はCentOS 6.3 MySQL 5.5.28です。

A 回答 (1件)

こういう質問をするなら、semi-sync-replication の有無より、レプリケーションとトリガーの組み合わせについて質問するなら、バイナリログのフォーマット設定も書き込むべきじゃないかな?


http://dev.mysql.com/doc/refman/5.5/en/replicati …

MySQL 5.1のだけど、日本語ならここ
http://dev.mysql.com/doc/refman/5.1/ja/stored-pr …

もうマニュアルに書かれていることだから説明するのも二度手間になるけど…

row-basedなら、バイナリログでテーブルのデータが更新されてもトリガーがスレーブ側で実行されることは無いので、実行順序の問題は原理的に生じない。(トリガーで更新されたテーブルのデータもバイナリログに記録されてスレーブに反映される)

statement-basedならスレーブでもトリガーが実行されるので、実行順序に関しての保障は無い。

というのが回答になります。


で、"これはお願いなのですが、~(省略)~実際に運用経験があり、正確な知識をお持ちの方にアドバイス頂きたいと思います。"こういう情報がほしければ、お金を払ってプロに頼んでください。
    • good
    • 0
この回答へのお礼

大変ありがとうございます。
とても有益な情報ありがとうございました。
マニュアルに記載されている情報だったのですね。実務レベルでしか分からないものとばかり思っておりました。
大変失礼いたしました。
お願いの部分で不愉快に感じさせましたこと、お詫び申し上げます。
一度簡単な回答が付くと、本当に情報をお持ちの方から飛ばし読みされてしまうと感じましたので、このような記載をさせて頂きました。大変申し訳ございませんでした。
今回大変貴重な回答を得られたことにより、自信を持って開発を進めることが出来ます。
本当にありがとうございました。

お礼日時:2012/11/11 17:07

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

関連するカテゴリからQ&Aを探す