MySQL5.5の準同期レプリケーションを使って、マスターサーバー(insert用)とスレーブサーバー(select用)を組み合わせたサイトを作る予定です。
マスター側のサイトはトリガーとイベントを多用しております。(トリガー13個、イベント8個)
当初、マスター側にもスレーブ側にもどちらにもトリガーとイベントを組み込んでいましたが、テストして分かったことは、イベントがエラーを起こすということでした。
マスター側でイベントが始まり結果をスレーブ側に送ることになるわけですが、同時間にスレーブ側のイベントも始まるわけなので、マスターの結果が送られてきたときにはスレーブのテーブルには計算後の数値が記載されており、結果エラーになってしまうことがわかりました。
そのため、スレーブ側のイベントは削除して構築しています。
問題はトリガーについてです。
マスター側にはAテーブルにインサートするとBテーブル、Cテーブル、Dテーブルが連鎖的に変更されるトリガを組んでおり、スレーブ側も同様のトリガを組んでいます。
幸い、いままでのテストでは、トリガーで計算した値が連鎖的に伝わってもエラーになっていません。
ただ、マスター側に高負荷が掛かり、マスターのトリガの計算よりもスレーブ側の計算のほうが早く終了した場合、イベントの時に起こったエラーが出ないか懸念しています。
テストで壊れるのはいいですが、実際に運用した後で壊れることは許されません。
質問としては、「実際にトリガーを使った高負荷サイトを構築されている方でスレーブサーバーを準同期で設定している方」から、どのように組めばよいかのアドバイスを頂きたいというものです。(こんな高負荷サイトで運用しているがトリガを組んでて問題ないなどという例があるとうれしいです)
よろしくお願いいたします。
スレーブのトリガーを外すのが一番簡単な方法なのですが、万一マスターがハングアップした際にはスレーブを昇格させる予定ですので出来る限りトリガーはそのままにしたいと考えておりますが、スレーブ側にトリガを組んだままというのは常識的にあり得ないというアドバイスであればそれでも結構です。
これはお願いなのですが、「他のサイトを調べて回答する」という方は申し訳ございませんがご遠慮願います(私も簡単なテストは済ませており低負荷では問題が生じないことまでは分かっております。ブログに落ちているような経験値はこれと大差ありません。この程度ではアドバイスにならないと感じています。)
実際に運用経験があり、正確な知識をお持ちの方にアドバイス頂きたいと思います。
よろしくお願いいたします。
構成はCentOS 6.3 MySQL 5.5.28です。
No.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ならスレーブでもトリガーが実行されるので、実行順序に関しての保障は無い。
というのが回答になります。
で、"これはお願いなのですが、~(省略)~実際に運用経験があり、正確な知識をお持ちの方にアドバイス頂きたいと思います。"こういう情報がほしければ、お金を払ってプロに頼んでください。
大変ありがとうございます。
とても有益な情報ありがとうございました。
マニュアルに記載されている情報だったのですね。実務レベルでしか分からないものとばかり思っておりました。
大変失礼いたしました。
お願いの部分で不愉快に感じさせましたこと、お詫び申し上げます。
一度簡単な回答が付くと、本当に情報をお持ちの方から飛ばし読みされてしまうと感じましたので、このような記載をさせて頂きました。大変申し訳ございませんでした。
今回大変貴重な回答を得られたことにより、自信を持って開発を進めることが出来ます。
本当にありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- その他(データベース) pythonでsqlight勉強中、クエリー結果の利用法教えて下さい 1 2022/04/28 20:38
- サーバー Webサイト構築フリーランスの案件受注について 1 2022/03/27 18:16
- 統計学 回帰分析検証不一致 5 2022/05/04 20:48
- 大学受験 日本史の受験勉強について 2 2022/11/22 19:00
- 高校 有効数字計算 確定した値を含む 2 2023/01/18 06:03
- Visual Basic(VBA) Excel のユーザー定義関数でソルバーが動作しない 1 2022/09/05 19:51
- IT・エンジニアリング インフラエンジニア(ネットワークエンジニア)の検証業務について教えてください。 インフラ初心者なので 2 2022/06/26 00:08
- その他(プログラミング・Web制作) mariadbでのエラー 1 2022/11/15 12:31
- 掃除機・クリーナー・空気清浄機 掃除機が使用不能になり、メーカ問い合わせで修理不可と言われてしまいました。 4 2022/12/01 00:43
- MySQL PhpMyAdminで作成して実行せよ。 東京23区を、皇居を中心とした4つのエリア(南東, 南西, 1 2023/06/11 11:58
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Access2000の削除クエリで消し...
-
物理削除と論理削除、どっちが...
-
アクセスのクエリでレコード削...
-
ACCESSでデータシートビュー上...
-
SELECT 文の NULL列は?
-
一つ前に戻るには…
-
ROWNUMでUPDATEをしたいのです...
-
SQL、2つのテーブルで条件一致...
-
テーブルリンク リンク元を知...
-
テーブル名をカラムとして取得...
-
男性と2人で飲食店に行きテーブ...
-
面接のときテーブルが正面に。...
-
テーブルで一番古いレコードだ...
-
accessでレコード更新直後の反...
-
テーブルに存在しない列をselec...
-
SQLにて指定日付より前、かつ最...
-
SQLで違うテーブルの値を比較し...
-
「テーブルに座って……」という...
-
Notion@リレーション値の取得...
-
Accessでデータシートに同じデ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Excel テーブル内の空白行の削除
-
ACCESSのマクロでテーブルのデ...
-
ワークテーブルなのに自動で削...
-
トリガって、自分自身のテーブ...
-
アクセス2010について
-
大量のレコードを削除する方法
-
アクセスのクエリでレコード削...
-
Access2000の削除クエリで消し...
-
HiRDBのPURGEとDROPの違い
-
削除フラグってどうなんでしょう?
-
列のDEFAULT設定を削除するコマ...
-
CSVファイルから一括して削除す...
-
テーブルが削除できない
-
物理削除と論理削除、どっちが...
-
リレーションについて
-
すべてのテーブル削除
-
SQLSERVERで関数作成?
-
マージレプリケーション
-
レコードの削除で delete from ...
-
テーブルデータの削除による対応策
おすすめ情報