質問: 間違ってmysqlスレーブサーバーに書き込みます 私は1つのマスターと1つのスレーブで設定されたmysqlレプリケーションを持っています。コードのバグのために、途中でエントリがスレーブサーバーに書き込まれ始め、数日後に検出されました。 今私はどのようにどのようにどのような手間や最小限のダウンタイム、これを行うための最良の方法になるだろうが正しく切り替えるのを考えていますか? 1つのテーブルだけを考慮してみましょう... > ソリューション1 > > auto_incrementをスレーブの最後のIDに設定した後で、今からマスタに書き始めるだけです。マスターとスレーブを同期させないようにするのは面倒ですか? > ソリューション2 > > マスターからのすべてのデータをクリアして、アプリケーションがmysqldumpを使用してデータを補充してから、正しい設定でアプリケーションを再びオンにすることを止めてください。 ``` stop slave // load the dump start slave ``` これにより、マスターは同じデータをスレーブに書き直そうとするのをやめますか? どんな助けもありがたい。その他のソリューションも歓迎されています。 ありがとう スシル
回答: 私は解決策2で正しい軌道に乗っていると思います。単にスレーブを止めても、マスタがバイナリログに書き込むのを妨げません。したがって、スレーブを再起動すると、マスタからのすべてのSQL文がレプリケートされます。 ただし、各テーブルの作成前に「DROP TABLE」を含めると、これを有効に利用できます。これはあなたが次のことを意味します: 1)アプリケーションがマスターテーブルにそれ以上エントリを作成しないようにする 2)スレーブからデータをダンプします(各テーブルのインポートの前に `mysqldump` に 'DROP TABLE'が含まれていることを確認してください - これは `mysqldump` 3)マスターに対してダンプを実行する 4) `SHOW SLAVE STATUS \ G` を使用してスレーブステータスを確認します。 `Seconds_Behind_Master` が0に達すると、アプリを再びオンに切り替えることができます(マスターに書き込んでいることを確認してください!!) ステップ3は、スレーブからのデータを使用して、マスター上のテーブルを削除して再作成します。このドロップと再作成はスレーブに複製されるため、2つの同期が完了し、正しいマスタースレーブがセットアップされるはずです。 がんばろう!