ホームページ  >  記事  >  データベース  >  MySQLのマスター/スレーブレプリケーションプロセスの詳細説明_MySQLのサンプルの詳細説明

MySQLのマスター/スレーブレプリケーションプロセスの詳細説明_MySQLのサンプルの詳細説明

小云云
小云云オリジナル
2018-01-06 14:21:571584ブラウズ

この記事では主に MySQL のマスター/スレーブ レプリケーションの実装プロセスを詳しく紹介します。興味のある方は参考にしていただければ幸いです。

1. マスター/スレーブ レプリケーションとは

マスター データベースの DDL および DML 操作をバイナリ ログ (BINLOG) を通じてスレーブ データベースに送信し、これらのログを再実行 (やり直し) します。データベース データはメイン データベースと一貫性を保ちます。

2. マスター/スレーブレプリケーションの役割

1. マスターデータベースに問題が発生した場合、スレーブデータベースに切り替えることができます。

2. データベースレベルで読み取りと書き込みの分離を実行できます。

3. レプリケーションプロセス

のバイナリログ。マスターデータベース

リレーログ:サーバーからのリレーログ

ステップ1:マスターは、各トランザクション更新データが完了する前に、操作レコードをbinlogファイルにシリアルに書き込みます。

ステップ 2: salve は I/O スレッドを開きます。このスレッドはマスター上で通常の接続を開き、その主なジョブは binlog ダンプ プロセスです。読み取りの進行状況がマスターに追いついた場合、マスターはスリープ状態に入り、マスターが新しいイベントを生成するのを待ちます。 I/O スレッドの最終的な目的は、これらのイベントをリレー ログに書き込むことです。

ステップ 3: SQL スレッドはリレー ログを読み取り、ログ内の SQL イベントを順番に実行して、メイン データベース内のデータとの一貫性を保ちます。

4. マスター/スレーブレプリケーションの具体的な操作

同じウィンドウ上の異なるパスに 2 つの msyql インスタンスをインストールしました。ここでは、マスターとスレーブ間でインストールされている mysql のバージョンが一貫していることをお勧めしますが、私のバージョンは一貫していません。

1. マスターデータベースとスレーブデータベースの設定ファイル my.ini をそれぞれ変更します

master

3306 は、mysql のデフォルトのポート番号を変更する必要はありません。ここで、server-id は、異なる mysql インスタンスで重複しないことを指定するために使用されます。binlog-do-db は、バイナリ ログを開くために使用されるデータベースを指定します。ファイル。

salve

マスターデータベースとスレーブデータベースは後で同じコンピューター上で実行されるため、ポートを異なるものに設定する必要があります。ここでは、3307

replicate-do-db: の名前を示します。マスター上の構成と一致するように同期する必要があるデータベース。

2. マスター上でレプリケーション専用のアカウントを作成します: weidai/123456

この新しく追加されたアカウントはテーブル mysql.user でクエリできます:

これが私の最初の操作です, ここでこのアカウントの作成は完了しましたが、実際にコピーしてみると、エラーのトラブルシューティングを行ったところ、マスターが生成したbinlongには問題がないことが分かりました。そして、スレーブのステータスを確認しました:

最後に次のようなエラーがあります:

Weidai アカウントを使用するとマスターに接続できないため、マスターのバイナリログを取得すべきではありませんそのため、リレー ログを生成できなくなります。

アカウントとパスワードを繰り返し確認しましたが、問題はありませんでした。その後、関連情報を検索したところ、マスターが新しいユーザーを作成するときに、次の手順が欠落していたためであることがわかりました。

新しいユーザーを設定した後、または変更した後。パスワードを指定するには、MySQL のシステム権限関連テーブルを更新するためにフラッシュ権限を使用する必要があります。そうしないと、アクセスが拒否されます。これが、前のエラーが発生した理由です。もう 1 つの方法は、mysql サーバーを再起動して新しい設定を有効にすることです。

3. 現時点でのメインデータベース内のデータの位置を取得します。ただし、このステータス値を取得する前に、データの開始位置をコピーするために使用されます。データを変更できなくなるため、最初に読み取りロックを有効に設定する必要があります

4. メイン ライブラリはデータのバックアップを実行します。バックアップの方法はここでは紹介しません。バックアップが完了したら、読み取りロックを解除して、メイン ライブラリを実行できます。書き込み操作

5 、スレーブ データベースを起動し、バックアップしたばかりのデータを復元します。この時点では、バックアップ時点のマスター データベースとスレーブ データベースのデータは一致しています。

6. データベースからのレプリケーション動作に関連する設定

7. この時点では設定は完了していますが、スレーブ データベースはまだ同期できないため、スレーブ スレッドを開始する必要があります

8. マスターでテーブルを作成し、新しく追加したデータをスレーブで観察します。

マスターで実行した操作がスレーブに反映されていることがわかります。このとき、スレーブは次のようになります。マスターの鏡。

5. マスターとスレーブの同期ステータスの解釈

スレーブでコマンドを使用して表示します:

レイアウトがあまりにも醜いので、次のようにコンパイルしました:

Slave_IO_STATE: マスターの待機中イベントを送信

Master_host: 127.0.0.1

Master_user:weidai

Master_port:3306

connnect_retry:60

Master_log_file:mysql-bin.000005

Read_Master_log_pos:1662

Relay_log_file:AE6 Z*****-リレービン.000002

Relay_log_pos:1415

Slave_IO_Running:yes

Slave_SQL_Running:yes

---------------------------- ------ -----------------------ゴージャスな分割ライン------ ----- -------------------

Slave_IO_Running:yes

Slave_SQL_Running:yes

これら 2 つのスレッドは前述したもので、スレーブ上のレプリケーションプロセスは非常に重要なスレッドです。 YESは正常、NOは異常を意味します。

Slave_IO スレッドは主にマスターの binlong ログの内容をスレーブのリレー ログ (Relay_log) にコピーします。一般に、問題が発生する可能性はほとんどなく、アクセス許可またはネットワークの問題が原因で発生します。マスター。 。先ほどのエラーと同じです。

Slave_SQL スレッドはリレー ログ内の SQL を実行する責任があり、エラーの可能性が比較的高くなります。誰かがスレーブ データベースに手動でレコードを挿入すると、マスターとスレーブの同期中に主キーの競合が発生します。

Slave_IO_STATE: マスターがイベントを送信するのを待っています

このステータスは、リレーログの同期が完了し、マスターによって生成される新しいイベントを待っていることを示します。

関連する推奨事項:

MySQL 5.7.18 マスター/スレーブ レプリケーションのマスター/スレーブ インスタンスを構築する方法の詳細な説明

MySQL マスター/スレーブ レプリケーションに基づく Mycat の読み取り/書き込み分離の例

MySQL がマスター/スレーブ レプリケーションを実装する方法 プロセスの詳細な例 (写真)

以上がMySQLのマスター/スレーブレプリケーションプロセスの詳細説明_MySQLのサンプルの詳細説明の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。