9

MySQL 5.1-lastest-stable のすべてのデータを含む 1 つの中央データベースがあります。
複数のクライアントを主従関係で接続したい。

質問

中央に 1 つの中央サーバーがあり、複数のクライアント データベースがあるスター トポロジをセットアップして、1 つのクライアントの変更が最初に中央サーバーに伝播され、そこから他のすべてのクライアント データベースに伝播されるようにするにはどうすればよいですか?

データベース情報

すべてのテーブルに inno-db を使用しており、バイナリ ログを有効にしています。
それ以外に、データベース間でマスター - マスターを行う方法を学びました。
すべてのテーブルには主キーがありますprimary integer autoincrement。自動インクリメントのオフセットと開始が異なるクライアント データベースに合わせて調整されている場合、主キーの競合は発生しません。

なぜ私はこれが欲しいのですか

ラップトップのローカル MySQL データベースに接続するクライアント ソフトウェア (Web サイトや PHP ではない) があります。これは中央データベースと同期する必要があるため、ラップトップでプログラムを使用しているすべての人が、他の人が行った他のすべての変更を確認できます。 .
ラップトップと中央データベースの間でインターネット接続が切断されると、アプリケーションが停止するため、中央データベースに直接接続したくありません。
このセットアップでは、アプリケーションは継続します。ラップトップは、中央データベースへの接続が再確立されるまで、他のユーザーから更新を取得しません。

4

3 に答える 3

10

DB を同期する手段として、フローティング スレーブに対して MySQL 循環レプリケーションを使用する必要がある場合の解決策は次のとおりです。

1 DB マスター
4 DB スレーブ


DBマスターのセットアップ

  1. MySQL 5.1.x をインストールする
  2. /etc/my.cnf
          server-id=1
          log-bin=mysql-bin
          expire-logs-days=14
          default-storgae-engine=InnoDBを確認してください
  3. MySQL の起動
  4. リセットマスター; (DB マスターからのバイナリ ログのクリア)
  5. マスターへのデータのロード
  6. GRANT SELECT,REPLICATION SLAVE ON . to replicator@'%' IDENTIFIED BY 'repl-password';

DB スレーブのセットアップ

  1. MySQL 5.1.x をインストールする
  2. /etc/my.cnf
          server-id=(一意のサーバー ID)
          log-bin=mysql-bin
          default-storage-engine=InnoDBを確認してください
  3. MySQL の起動
  4. CHANGE MASTER TO MASTER_HOST='DB マスターの IP アドレス', MASTER_PORT=3306, MASTER_USER='replicator', MASTER_PASSWORD='repl-password', MASTER_LOG_FILE='mysql-bin.000001', MASTER_LOG_POS=106;
  5. スレーブを開始します。(レプリケーションが追いつくように、SHOW SLAVE STATUS\G を確認してください)
  6. スレーブを停止します。
  7. CHANGE MASTER TO MASTER_HOST='DB 配信マスターの IP アドレス', MASTER_PORT=3306, MASTER_USER='replicator', MASTER_PASSWORD='repl-password', MASTER_LOG_FILE='mysql-bin.000001', MASTER_LOG_POS=106;
  8. スレーブを開始します。

輸入の流れ

すべての DB スレーブの準備が整ったら、DB マスターと DB スレーブ間のデータの移行を次のように進めることができます (DB マスターの場合は DM、DB スレーブの場合は DS)。

  1. DS で、SHOW MASTER STATUS を実行します。
  2. DS では、バイナリ ログのファイル名と位置を記録します。
  3. DM で、CHANGE MASTER TO MASTER_HOST='DS の IP アドレス'、MASTER_PORT=3306、MASTER_USER='replicator'、MASTER_PASSWORD='repl-password'、MASTER_LOG_FILE='LogFile From Step2'、MASTER_LOG_POS=(LogPos From Step2); を実行します。
  4. DM で START SLAVE を実行します。(レプリケーションが追いつくようにします。ポートの変更は DS によって DM に導入されます)
  5. DM では、SLAVE を停止します。
  6. DS で、/var/lib/mysql/master.info (ログ ファイル) の 2 行目を記録します。
  7. DS で、/var/lib/mysql/master.info の 3 行目を記録します (ログの位置)
  8. DS で、CHANGE MASTER TO MASTER_HOST='DM の IP アドレス', MASTER_PORT=3306, MASTER_USER='replicator', MASTER_PASSWORD='repl-password', MASTER_LOG_FILE='LogFile From Step6', MASTER_LOG_POS=(LogPos From Step7); を実行します。
  9. DS で START SLAVE を実行します。(レプリケーションが追いつくようにします。DM から DS へのポート変更が導入されます)
  10. DS では、スレーブを停止します。

警告

インポートプロセスは非常に重要です!!! 毎回、正確なログ ファイルとログの位置を正しく記録する必要があります。

試してみる !!!

それがどうなるか教えてください!!!

于 2011-04-26T00:04:12.163 に答える
2

これは、特殊なタイプの MySQL レプリケーション トポロジの仕事のように思えます。

私が念頭に置いているトポロジーは「ディストリビューション マスター」と呼ばれます。これは、本High Performance MySQL : Optimizations, Backups, Replication and moreのサブタイトル「マスター、ディストリビューション マスター、およびスレーブ」の 368 ~ 370 ページに由来します。

以下が必要になります

1 つの DB マスター サーバー
1 つの DB ディストリビューション マスター (/dev/null スレーブまたはブラックホール スレーブとして知られる)
DB スレーブの数に関係なく


DBマスターのセットアップ

  1. MySQL 5.1.x をインストールする
  2. /etc/my.cnf
          server-id=1
          log-bin=mysql-bin
          expire-logs-days=14
          default-storgae-engine=InnoDBを確認してください
  3. MySQL の起動
  4. リセットマスター; (DB マスターからのバイナリ ログのクリア)
  5. マスターへのデータの読み込み
  6. GRANT SELECT,REPLICATION SLAVE ON . to replicator@'%' IDENTIFIED BY 'repl-password';

DB配信マスターの設定

  1. MySQL 5.1.x をインストールする
  2. /etc/my.cnf
          server-id=2
          log-bin=mysql-bin
          expire-logs-days=14
          default-storage-engine=BLACKHOLE
          skip-innodb を確認してください
  3. MySQL の起動
  4. CHANGE MASTER TO MASTER_HOST='DB マスターの IP アドレス', MASTER_PORT=3306, MASTER_USER='replicator', MASTER_PASSWORD='repl-password', MASTER_LOG_FILE='mysql-bin.000001', MASTER_LOG_POS=106;
  5. スレーブを開始します。
  6. GRANT SELECT,REPLICATION SLAVE ON . to replicator@'%' IDENTIFIED BY 'repl-password';
  7. information_schema データベースにも mysql データベースにもないすべてのテーブルについて、次のように各テーブルを BLACKHOLE ストレージ エンジンに変換します。
  8. リセットマスター; (DB配布マスタからバイナリログをクリア)

DB スレーブのセットアップ

  1. MySQL 5.1.x をインストールする
  2. /etc/my.cnf
          server-id=3
          default-storage-engine=InnoDBを確認してください
  3. MySQL の起動
  4. CHANGE MASTER TO MASTER_HOST='DB マスターの IP アドレス', MASTER_PORT=3306, MASTER_USER='replicator', MASTER_PASSWORD='repl-password', MASTER_LOG_FILE='mysql-bin.000001', MASTER_LOG_POS=106;
  5. スレーブを開始します。(レプリケーションが追いつくように、SHOW SLAVE STATUS\G を確認してください)
  6. スレーブを停止します。
  7. CHANGE MASTER TO MASTER_HOST='DB 配信マスターの IP アドレス', MASTER_PORT=3306, MASTER_USER='replicator', MASTER_PASSWORD='repl-password', MASTER_LOG_FILE='mysql-bin.000001', MASTER_LOG_POS=106;
  8. スレーブを開始します。

このセットアップの目的は、DB マスターのみが DB マスター専用の SQL を処理するようにすることです。DB スレーブにレプリケートされる SQL は、DB ディストリビューション マスターによって処理されます。これにより、スレーブへの SQL の転送を処理する DB マスターが軽減されます。それはDBディストリビューションマスターの責任になります。すべてのスレーブは、DB マスターではなく DB ディストリビューション マスターから SQL の変更を読み取ります。

私はあなたのアプリケーションを完全には理解していませんが、このトポロジは、I/O が中央データベースを制限することなく、1 つの中央データベースと複数の読み取りスレーブを適切にサポートする必要があります。アプリケーションは、各ラップトップが他のラップトップとは異なる固有のクライアント セットを処理する限り、クライアント データベースに対して INSERT、UPDATE、および DELETE を編成する必要があります。


警告

BLACKHOLE セットアップが原因でデータが消失しないことを確認するために、DB スレーブで本格的なテストを行う必要がある場合があります。これが発生した場合は、'default-storage-engine=BLACKHOLE' を削除して、すべてをリロードしてみてください。


この種の今後の質問は、dba.stackexchange.comで質問する必要があります。

于 2011-04-25T18:10:23.287 に答える
0

はい、説明したトポロジで複数のMySQLデータベースを設定できます。

あなたがしたいことはレプリケーションと呼ばれます。

これがMySQL5.1マニュアルのレプリケーションセクションです。

于 2011-03-11T14:33:26.070 に答える