7

私は、MySQL の削除ステートメントがスレーブによって処理されないようにする方法を探していました。データ ウェアハウス プロジェクトに取り組んでおり、データをスレーブにレプリケートした後で、運用サーバーからデータを削除したいと考えています。

これを行うための最良の方法は何ですか?

ありがとうございました

4

2 に答える 2

8

これを行うにはいくつかの方法があります。

  1. 削除を実行SET SQL_LOG_BIN=0;する前に、マスターで関連するセッションを実行します。そうすれば、バイナリログに書き込まれません
  2. スレーブにトリガーを実装してBEFORE DELETE、削除を無視します。

複製したくないステートメントには、アプローチ #1 を使用する傾向があります。SUPER特権が必要です。

#2 は試していませんが、可能なはずです。

于 2013-03-13T15:13:32.443 に答える
5

これはハックでしか実現できず、問題が発生する可能性があります。MySQL のレプリケーションは、このために設計されていません。

マスターにレコードを挿入すると、スレーブにレプリケートされると想像してください。次に、マスターから削除しますが、スレーブからは削除しません。誰かが同じ一意のキーを持つレコードを追加すると、スレーブで競合が発生します。

いくつかの代替案:

  1. バックアップを作成する場合は、別の方法で行います。mysqldump を実行する cronjob を使用して定期的なバックアップを行うこともできますが、これは、すべてのレコードを保存するのではなく、定期的な復元ポイントのみを作成することを前提としています。
  2. 2 番目のミラー データベースを更新するトリガー。ただし、これはサーバーをまたぐことはできません。各テーブルを別の名前で再作成する必要があります。また、計算コストが高くなり、このバックアップからの復元が困難になります。
  3. 実際には何も削除せずに、Active または Disabled の Status フィールドを作成し、Disabled をユーザーから非表示にします。これにも問題があります。たとえば、ON DELETE CASCADE を使用できず、コードですべて手動で行う必要があります。

おそらく、このミラー データベースを削除せずに使用する理由を教えていただければ、より的を絞った解決策を提供できます。

于 2013-03-13T15:12:48.123 に答える