2011-10-28 13 views
1

私は1つのマスターと1つのスレーブでmysqlレプリケーションを設定しました。コードのバグのために、途中でエントリがスレーブサーバーに書き込まれ始め、数日後に検出されました。 今、私はどのような手間や最小限の停止時間なしに正しく切り替える方法を考えています、これを行うための最善の方法は何ですか? 1誤ってmysqlスレーブサーバに書き込む

は、単にスレーブの最後のIDにAUTO_INCREMENTを設定した後、今からマスターへの書き込みを開始

ソリューション... 1つのテーブルのみを考えることができます。マスターとスレーブを同期させないようにするのは面倒ですか?

溶液2

クリアマスタからのすべてのデータ、任意のより多くのエントリがmysqldumpをを使用してデータを再充填した後、正しい設定で逆にアプリを切り替える製造からアプリを停止します。

stop slave 
// load the dump 
start slave 

これは、マスターが同じデータをスレーブに書き直すのをやめないようにしますか?

助けてください。その他のソリューションも歓迎されています。

おかげ スシル

答えて

0

私は単にそれへの書き込みからマスターを防ぐことはできませんスレーブを停止すると、バイナリログだあなたは解決策2で正しい軌道に乗っていると思います。したがって、スレーブを再起動すると、マスタからのすべてのSQL文がレプリケートされます。

ただし、テーブルを作成する前に「DROP TABLE」を含めておけば、これを利用することができます。 mysqldumpは前に「DROP TABLEを」含まれていることを確認(スレーブからのデータをダンプ)

1)

2)S(マスターテーブル内の任意のより多くのエントリを作るからアプリを停止します。これは、次のしていることを意味します各テーブルのインポート - それはmysqldumpのデフォルトのオプションであるとして、それが何をすべき)

3)マスター

4)に対して実行ダンプはSHOW SLAVE STATUS\Gを使用して、スレーブの状態を確認してください。 Seconds_Behind_Masterが0に達すると、アプリを再びオンにすることができます(マスターに書き込んでいることを確認してください!!)

ステップ3は、スレーブからのデータを使用してマスター上のテーブルを削除して再作成します。このドロップと再作成はスレーブに複製されるため、2つの同期が完了し、正しいマスタースレーブがセットアップされるはずです。

幸運を祈る!

+0

ありがとうTom!しかし、_start/stop slave_ doは何をするのですか?スレーブでも実行したくないマスターテーブルを変更するにはどうしたらいいですか? – Sushil

+0

レプリケーション環境でスレーブを起動および停止すると、単にスレーブが一時停止します。再度スイッチをオンにすると、停止時にマスターbinlogの位置に複製が開始されます。効果的に複製を一時停止します。私の答えの要点は、スレーブに変更を加えたいということです。私の答えでは、あなたのマスタにあるすべてのデータが現在あなたのスレーブにあると仮定しているので、 'アプリケーションを停止し、スレーブデータをダンプし、スレーブデータをマスタにダンプしてスレーブにレプリケートさせます。 –

0

私はあなたの最良のオプションは完全にスレーブ/マスターをリセットすることだと思います。スレーブ上のデータが正しい場合は、データをリロードしてから、新しいダンプをマスタからエクスポートしてスレーブにインポートし、新しい「CHANGE MASTER TO ...」コマンドを実行してください。

お勧めしますスレーブ上の "read_only"グローバル変数を設定します。

http://dev.mysql.com/doc/refman/5.1/en/replication-options-slave.html#option_mysqld_read-only

関連する問題