バックアップの目的でレプリケートする予定のデータベースがあります (現時点ではパフォーマンスは問題ではありません)。
レプリケーションを正しくセットアップしてテストしたところ、すべて問題ありませんでした。
その後、すべての書き込みが一時テーブルに複製されることに気付きました。これは、実際には、アイドル状態のスレーブで 1 日分のデータの複製に約 2 時間かかったことを意味します。
その理由は、15 分ごとに cronjob を介してデータベース内のデータの一部を再計算し、同期していることを確認するためです (合計で約 3 分かかるため、Web 要求中にこれらの操作を行うことは受け入れられません。代わりに、 Web リクエスト中に何も再計算を試みずに変更を保存し、すべての作業をまとめて実行します)。そのデータを効率的に処理するために、一時テーブルを使用します (多くの相互依存関係があるため)。
ここで、最初の問題は、一時テーブルを使用するトランザクションの処理中にスレーブを再起動すると、一時テーブルが保持されないことです。これは、一時テーブルを使用しないことで回避できますが、これには独自の問題があります。
より深刻な問題は、再計算がすべて行われなければ、スレーブが 30 分以内に簡単に追いつく可能性があることです (再計算は次々に行われるため、15 分ごとにデータを再構築する利点はありません...文字通り、たとえば 1115 でスタックしているのを見ることができますが、すぐに追いついて 1130 でスタックするなど)。
私たちが思いついた解決策の 1 つは、そのすべての再計算をレプリケートされたデータベースから移動して、スレーブがそれをレプリケートしないようにすることです。ただし、最終的に更新するテーブルを削除する必要があり、スレーブを実質的に「去勢」する必要があるという欠点があります。実際に使用する前に、すべてを再計算する必要があります。
誰かが同様の問題を抱えていましたか、またはどのように解決しますか? 明らかな何かが欠けていますか?