7

車のデータベースがあるとしましょう。MakesとModels(FK to Makes)があります。ユーザーに自分の車を追跡してもらう予定です。各車にはモデル化するFKがあります。今はたくさんのユーザーがいるので、データベースを分割して負荷を分散させたいと思っています。MakesテーブルとModelsテーブルはそれほど変更されませんが、シャード間で共有する必要があります。私の考えは、メーカーとモデルのマスターDBから各スレーブデータベースへのMySQLレプリケーションを使用することです。私の質問は、マスター上のそれらのテーブルに書き込まないことを前提として、スレーブデータベースに安全に書き込むことができるかどうかです。

そして、この件に関して、1つのスレーブデータベースに最新のデータがあることを保証する方法はありますか?たとえば、誰かが「おうし座」のメーカーを追加したばかりで、自分の車を追加したいとします。使用しているスレーブデータベースに最新のマスターデータがあることを確認できますか?

4

2 に答える 2

7

はい、一般的に、マスターに書き込まれていないスレーブのテーブルに安全に書き込むことができます。スレーブとマスターに独立して行を挿入するようなことを行うauto_incrementと、もちろん問題が発生します。実際には、そのテーブルをレプリケーションから完全に除外するように構成する必要があります。

最新のデータがあるかどうかを確認するために、スレーブが最新であるかどうかをSHOW SLAVE STATUS示すフィールドが含まれています。Seconds_Behind_Master明らかに、あなたはそれをゼロにしたいのです。もちろん、挿入および複製されたデータが存在することを確認するには、1秒待ってから、それがゼロであることを確認する必要がありますSeconds_Behind_Master

于 2009-10-04T23:28:06.360 に答える
5

これは私が検索中に収集した良い解決策でした

私はここに利用可能なものとして要点を含めました:

http://erlycoder.com/43/mysql-master-slave-and-master-master-replication-step-by-step-configuration-instructions-

MySQLマスターマスターレプリケーションと自動インクリメントインデックス

マスタースレーブレプリケーションを使用している場合は、ほとんどの場合、マスターに書き込み、スレーブまたは複数のスレーブから読み取る方法をアプリケーションに設計します。ただし、マスターマスターレプリケーションを使用している場合は、任意のマスターサーバーに対して読み取りと書き込みを行います。したがって、この場合、自動増分インデックスの問題が発生します。両方のサーバーが同じテーブルにレコード(サーバーごとに同時に異なる)を追加する必要がある場合。それぞれが同じインデックスを割り当て、軟膏に複製しようとします。これにより、衝突が発生します。簡単なトリックで、MySQLサーバーでのこのような衝突を回避できます。

マスター1/スレーブ2で/etc/my.cnfに追加します。

auto_increment_increment= 2
auto_increment_offset   = 1

マスター2/スレーブ1で/etc/my.cnfに追加します。

auto_increment_increment= 2
auto_increment_offset   = 2
于 2013-05-10T21:10:07.023 に答える