Mysqlマスタースレーブ同期の実装原理

Mysqlマスタースレーブ同期の実装原理

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

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

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

  • データベースの負荷容量を水平方向に拡張します。
  • フォールトトレランスと高可用性。フェイルオーバー/高可用性
  • データのバックアップ。

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

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

以下のように表示されます。

削除、更新、挿入、関数やストアド プロシージャの作成など、すべての操作はマスター上で実行されます。マスターに操作がある場合、スレーブはすぐにこれらの操作を受信して​​同期します。

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

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

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

以下で詳しく見てみましょう。

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

上記に述べられています:

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

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

  1. ステートメント: データベース操作の SQL ステートメントが binlog に書き込まれます。
  2. 行: 各データの変更は binlog に書き込まれます。
  3. 混合: ステートメントと行の混合。 Mysql は、ステートメント形式を書き込むタイミングと行形式 binlog を書き込むタイミングを決定します。

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

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

binlog ダンプ スレッド

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

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

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

  • I/O スレッド。このスレッドはマスター マシンに接続されており、マスター マシン上の binlog ダンプ スレッドは binlog の内容を I/O スレッドに送信します。バイナリログの内容を受け取った後、I/O スレッドはその内容をローカル リレー ログに書き込みます。
  • SQL スレッド。このスレッドは、I/O スレッドによって書き込まれたリレー ログを読み取ります。リレーログの内容に応じて、スレーブデータベースに対して対応する操作を実行します。

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

SHOW PROCESSLIST コマンドを使用して表示できます。

図に示すように、マスター マシン上の binlog ダンプ スレッドを表示します。

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

4. ここまで述べてきたことを、写真でまとめてみましょう

5. 実戦について

実戦については、私の別の記事を参照してください:MySQLマスタースレーブ同期実戦

以上がこの記事の全内容です。皆様の勉強のお役に立てれば幸いです。また、123WORDPRESS.COM を応援していただければ幸いです。

以下もご興味があるかもしれません:
  • MySQL マスタースレーブ同期の原理と応用
  • Mysql データベースのマスタースレーブ同期構成
  • この記事では、MySQLのマスタースレーブ同期の原理を説明します。
  • MySQL マスタースレーブ同期メカニズムと同期遅延問題追跡プロセス
  • Mysql マスタースレーブ同期構成の実践の詳細な説明
  • MYSQLデータベースでマスタースレーブ同期を設定する方法

<<:  Linux のスケジュールタスク Crontab コマンドの使用に関する詳細な説明と概要

>>:  Vant+postcss-pxtoremはブラウザ適応機能を実装します

推薦する

js でオブジェクトとオブジェクト メソッドを作成するいくつかの方法の詳細な説明

この記事は、JS レッドブックの第 8 章に記載されているオブジェクトに関する 2 番目の記事です。...

MySQL で遅い SQL 文を見つける方法

MySQL で遅い SQL ステートメントを見つけるにはどうすればよいでしょうか?これは、多くの人を...

Ubuntu 20.04 に Python 3 仮想環境をインストールする詳細なチュートリアル

以下はすべて仮想マシン上で実行されます1. pip3をインストールするsudo apt で pyth...

js を使用してシンプルなスイッチ ライト コードを実装する

体の部位: <button>ライトのオン/オフを切り替える</button>...

CSS スティッキーフッタークラシックレイアウトの実装

スティッキーフッターレイアウトとは何ですか?一般的な Web ページのレイアウトは、通常、ヘッダー部...

MySQL 上級学習ノート (パート 3): MySQL 論理アーキテクチャの紹介、MySQL ストレージ エンジンの詳細な説明

MySQL 論理アーキテクチャの概要他のデータベースと比較すると、MySQL は、そのアーキテクチャ...

Linux で特定のプログラムを見つけるための whereis の例の詳細な説明

Linuxは特定のプログラムを見つけますwhereis コマンドは主にプログラム ファイルを検索し、...

MySQL サーバー ログイン エラー ERROR 1820 (HY000) の解決方法

障害サイト: MySQL サーバーにログインし、どのコマンドを実行してもこのエラーが発生します my...

文字列から指定された文字を削除または抽出する JavaScript メソッド (非常によく使用されます)

目次1. 部分文字列() 2. サブストラクチャ() 3.インデックス() 4.最後のインデックス(...

Vueソースコード解析における仮想DOMの詳しい説明

なぜ仮想DOMが必要なのでしょうか?仮想 DOM はブラウザのパフォーマンス問題を解決するために設計...

Ubuntu 20.04 CUDA & cuDNN のインストール方法 (グラフィカル チュートリアル)

CUDA インストール cuda をダウンロードサポートされているcudaバージョンを表示するには...

MySQL 8.0 の統計が不正確である理由

序文Oracle であれ MySQL であれ、新バージョンで導入された新機能は、一方では製品の機能性...

純粋な CSS を使用してドロップダウン メニューを作成するサンプル コード

導入:最近の面接の質問を見ると、ドロップダウン メニューを実装するために CSS を使用することが多...

Windows での MySQL データベースのマスター/スレーブ構成チュートリアル

WindowsでMySQLデータベースのマスターとスレーブを構成する詳細なプロセスは次のとおりです。...

MySQL インデックスのカーディナリティの概念と使用例

この記事では、例を使用して、MySQL インデックス カーディナリティの概念と使用方法を説明します。...