sql >> データベース >  >> RDS >> Mysql

これは、mysqlを使用して動的データをリアルタイムで双方向に同期するための最良の方法です

    2つのマスターでデータベースを複製することで得られるパフォーマンスはそれほど多くありません。ただし、アプリケーションを正しくコーディングすると、わずかなフェイルオーバーが発生します。

    マスター-マスターのセットアップは基本的にスレーブ-マスターのセットアップと同じですが、両方のスレーブが開始され、各ボックスの構成ファイルに重要な変更が加えられています。

    マスターMySQL1:

    auto_increment_increment = 2
    auto_increment_offset = 1 
    

    マスターMySQL2:

    auto_increment_increment = 2
    auto_increment_offset = 2
    

    これらの2つのパラメーターは、2つのサーバーが何らかの理由で主キーをめぐって競合しているときに、それらが複製されて複製が強制終了されないようにします。 1ずつインクリメントする代わりに、自動インクリメントフィールドはデフォルトで2ずつインクリメントします。1つのボックスでは1からオフセットを開始し、シーケンス1 3 5 7 91113などを実行します。2番目のボックスでは2からオフセットを開始します。 2 4 6 8 10 12などに沿って実行します。現在のテストから、自動インクリメントは、前に残っている番号ではなく、次の空き番号を取得するように見えます。
    例:サーバー2が4番目のレコードを挿入するときにサーバー1が最初の3つのレコード(1 3と5)を挿入すると、6のキーが与えられます(2ではなく、未使用のままになります)。

    設定が完了したら、両方をスレーブとして起動します。
    次に、両方が正常に機能していることを確認し、両方のマシンに接続して、コマンドSHOW SLAVE STATUSを実行します。 Slave_IO_Runningの両方に注意する必要があります およびSlave_SQL_Running 各ボックスで両方とも「はい」と言う必要があります。

    次に、もちろん、テーブルにいくつかのレコードを作成し、一方のボックスが奇数番号の主キーのみを挿入し、もう一方のボックスが偶数番号の主キーのみをインクリメントしていることを確認します。

    次に、すべてのテストを実行して、各ボックスですべての標準アプリケーションを実行し、他のボックスに複製できることを確認します。

    一度実行すると比較的簡単です。
    しかし、前述のように、MySQLはそれを推奨せず、アプリケーションコードを作成するときにこの機能に注意することをお勧めします。

    編集: オフセットが正しいことなどを確認すれば、理論的にはマスターを追加できると思います。ただし、より現実的には、スレーブをいくつか追加することもできます。



    1. OracleストアドプロシージャのASとISの違いは何ですか?

    2. SequelizeでMySQLに接続できません

    3. SQLServerストアドプロシージャからのAPIの呼び出し

    4. SQL SERVER – SQL_NO_CACHEおよびOPTION(RECOMPILE)