リモートマスターの読み取り専用スレーブとして機能するMySQLサーバー5.1インスタンスで構成されたクライアントPC(Win)で実行するアプリケーションを開発しています。リモートマスターには多数のスキーマがありますが、クライアントごとに1つしか必要ないため、my.iniでreplication-do-db設定を指定して、クライアントが必要とするスキーマのみを複製します。レプリケーションは機能しますが、クライアントがデータ使用量によって課金される3Gワイヤレス経由でのみインターネットアクセスが利用できる世界の地域に入ると、データプランの制限をすぐに超えて、高価な問題が発生します。
私が理解しているように、MySQLはすべてのスキーマのすべてのトランザクションを単一のbinlogファイルに書き込みます。つまり、各クライアントはマスターのすべてのスキーマで実行されるすべてのトランザクションをダウンロードし、ダウンロードしたら、レプリケーションごとにデータベースフィルターを適用する必要があります。クライアントのmy.iniファイルのdo-db設定。
この非効率性を最小限に抑えるために、slave_compressed_protocol = 1の設定を使用しました。これにより、送信データが50%削減されるように見えますが、クライアントのデータ制限をすぐに超えて3Gの請求額が発生します。
私がこれに直面しているのは自分だけだとは想像できないので、x = yを設定することでこれを達成する方法についてたくさんの答えが得られると確信しています。ただし、このような設定のドキュメントも、推奨されるアプローチも見つかりません。
これまでのところ、可能な解決策に対する私の考えは、フィードバックまたは代替ルートを提供してください:
- 各スキーマに「プロキシ」スレーブを設定します(異なるボックス、または異なるMySQLインスタンス/ポートを持つ同じボックスに)
- クライアントが複製したい1つのデータベースのみをreplicate-do-dbにプロキシスレーブを設定します。
- クライアントのMySQLインスタンスを適切なプロキシスレーブのスレーブとして構成します。
これがなければならないだけで自分のスキーマのビンログデータを引っ張って、クライアントにつながります。欠点(私が知る限り)は、セットアップの複雑さを劇的に増加させ、おそらくより脆弱にすることです。
考え?このアプローチは機能しますか?
RedHatでMySQL 5.0サーバーを実行していることに注意してください。ただし、ソリューションが生成される場合は5.5にアップグレードできます。