Mysql のマスター/スレーブ同期原理の実装の詳細な紹介 (画像とテキスト)

黄舟
リリース: 2017-03-14 16:39:06
オリジナル
1456 人が閲覧しました

この記事では主に Mysqlマスターとスレーブの同期の実装原理を紹介しますが、編集者はそれが非常に優れていると考えたので、参考として共有します。エディターをフォローして一緒に見てみましょう

1. mysqlのマスター/スレーブ同期とは何ですか?

マスター(メイン)ライブラリーのデータが変更されると、その変更はスレーブ(スレーブ)ライブラリーにリアルタイムで同期されます。

2. マスター/スレーブ同期の利点は何ですか?

  • データベースの負荷容量を水平方向に拡張します。

  • 耐障害性、高可用性。フェイルオーバー/高可用性

  • データのバックアップ。

3. マスターとスレーブの同期の原理は何ですか?

まず、マスター/スレーブのアーキテクチャを理解しましょう。

以下に示すように:

削除、更新、挿入、関数ストアドプロシージャの作成のいずれであっても、すべての操作はマスター上で行われます。マスターが操作を行うと、スレーブはこれらの操作をすぐに受け取り、同期を実行します。

しかし、このメカニズムはどのように実装されているのでしょうか?

マスター マシンでは、マスターとスレーブの同期イベントが特別なログ ファイル (バイナリ ログ) に書き込まれ、スレーブはマスターとスレーブの同期イベントを読み取り、読み取りイベント、スレーブはライブラリに対応する変更を加えます。

このようにして、マスターとスレーブの同期が達成されます。

以下で詳しく学びましょう。

3.1 マスター/スレーブ同期イベントとは何ですか?

上で説明したように:

マスター マシンでは、マスター/スレーブ同期イベントは特別なログ ファイル (バイナリ ログ) に書き込まれます。

マスターとスレーブの同期 イベントには、ステートメント、行、混合の 3 つの形式があります。

  1. ステートメント: データベース操作の SQL ステートメントは binlog に書き込まれます。

  2. 行: 各データ変更はバイナリログに書き込まれます。

  3. mixed: ステートメントと行の混合。 Mysql は、いつステートメント形式で書き込み、いつバイナリログを行形式で書き込むかを決定します。

3.2 マスターマシンでの操作

マスター上のデータが変更されると、イベント (挿入、更新、削除) の変更が順番にバイナリログに書き込まれます。

バイログ ダンプ スレッド

スレーブがマスターに接続されると、マスター マシンはスレーブのバイナリ ダンプ スレッドを開きます。マスターのバイナリログが変更されると、バイナリログダンプスレッドはスレーブに通知し、対応するバイナリログコンテンツをスレーブに送信します。

3.3 スレーブマシンでの操作

マスター/スレーブ同期がオンになると、スレーブ上に 2 つのスレッドが作成されます。

  • I/O スレッド。このスレッドはマスター マシンに接続されており、マスター マシン上のバイナリ ログ ダンプ スレッドはバイナリ ログの内容を I/O スレッドに送信します。バイナリログの内容を受信した後、I/O スレッドはその内容をローカルリレーログに書き込みます。

  • SQL スレッド。このスレッドは、I/O スレッドによって書き込まれたリレー ログを読み取ります。そして、リレーログの内容に従って、スレーブデータベースに対して対応する操作を実行します。

3.4 マスターとスレーブで上記のスレッドを表示するにはどうすればよいですか?

表示するには SHOW PROCESSLIST コマンドを使用します。

図に示すように、マスター マシンでバイナリ ダンプ スレッドを表示します。

図に示すように、スレーブ マシンの I/O スレッドと SQL スレッドを確認します。

4. ここまで言いましたが、1枚の写真にまとめられます

以上がMysql のマスター/スレーブ同期原理の実装の詳細な紹介 (画像とテキスト)の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート