したがって、私の問題は興味深いものです。あるサーバーから別のサーバーに移行したいのです。マスタースレーブレプリケーションを作成しましたが、上司は、一度に1つのデータベースに移行するというアイデアを思いつきました。
そこで彼は、新しいサーバーで別のMySQLインスタンスをセットアップし、スレーブをほぼそのままにして、新しいインスタンスを一度に1つのデータベースで段階的に新しいマスターにするように依頼しました。つまり、データベース「x」を古いマスターから新しいマスターに転送し、スレーブに「x」を新しいマスターで同期するように指示することはできますか?
私はこの古いスレッド( Mysqlレプリケーション-データベースごとのスレッドは可能ですか? )で、当時はこれが不可能であったことを読みました。これは今行うことができますか?
ありがとう!
ルーカス・ブレイチャー。
はい、できます。 MySQLのレプリケーションでは、レプリケートするスキーマ[1]を指定するかどうかを指定し、replicate_wild_do_tableパラメーターを探します。
ただし、これを行うのも非常にばかげています。データが失われないようにするために、移行ごとにダウンタイムが必要になるためです。また、すべてのデータベースを単純に複製しない理由も考えられません。
[1]スレーブは引き続き完全なビンログをフェッチしますが、フィルターに一致するステートメントのみを実行します。
あなたcouldこのようなことをしますが、メリットはありません。
できないことは、「スレーブに「x」を同期するように指示する」ことです。これは、レプリケーションが機能する方法ではありません。レプリケーションは、指示した位置からマスターからのイベントを再生するだけです。したがって、レプリケーションを開始する前に、一貫した時点でマスターからデータのスナップショットを取得し、そのデータをスレーブにコピーする必要があります。
マスターからスレーブまで一度に1つのデータベースで実行することに実質的な利点はありません。実際、それははるかに難しいです。
スレーブを設定する最も簡単な方法は、マスターの完全バックアップを作成し、binlogの位置を記録してから、そのバックアップをスレーブに復元し、記録されたbinlogの位置からレプリケーションを開始することです。
しかし、一歩下がって、あなたが何をしているのかを見てみましょう本当にしようとしていること:
新しいサーバーに移行し、スレーブを一度に1つのデータベースの「マスター」にします。
これは簡単です。
これがあなたの複製です:Master -> Slave
スレーブをマスターの完全なコピーとして設定し、変更を複製して同期を維持します。
スレーブがマスターになるとはどういう意味ですか?これは、スレーブを使用してすべての読み取りと書き込みを行うようにアプリケーションに指示することを意味します。それでおしまい。レプリケーションを設定すると、他にmysqlを変更する必要はありません。
スレーブをマスターにプロモートすることはアプリケーション構成の変更のみ(1つのスレーブがそこから複製するマスターmysqlサーバーがある場合)。
したがって、使用しようとしているデータベースごとに異なるmysqlデータベースを使用するようにアプリケーション構成を変更できる場合は、一度にdbに移行できます。
シンプル。
いいえ-MySQLレプリケーションはオールオアナッシングです。 1つのMySQLサーバーを2つの別々のマスターからスレーブ化することはできません。