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はブラウザ適応機能を実装します

推薦する

すべてのブラウザとの完全な互換性を実現するために最適なプリセットを選択してください

各ブラウザの select タグのプロパティと各ブラウザのサポートが多少異なるため、各ブラウザでの選...

W3C チュートリアル (10): W3C XQuery アクティビティ

XQuery は、XML ドキュメントからデータを抽出するための言語です。 XQuery は、XML...

Ubuntuが仮想マシンでインターネットに接続できない問題の解決策

インターネットに接続できない仮想マシンをセットアップするのは非常に面倒です。ここでは、Ubuntu ...

フローティングをクリアするいくつかの方法(推奨)

1. 同じタイプの空の要素を追加し、要素の CSS 属性 clear:both; を設定します。 ...

Vue で jsx 構文を正しく使用する方法

目次序文仮想DOM仮想DOMとは仮想DOMの利点レンダリング関数とは何ですか? jsx Vue3 で...

メッセージボードにメッセージを追加および削除するための JavaScript

この記事では、JavaScript メッセージ ボードでメッセージを追加および削除する小さな例を詳細...

MySQLアカウントのパスワード変更方法(概要)

序文:データベースを日常的に使用すると、パスワードが単純すぎて変更する必要がある場合、パスワードの有...

jQueryはすべてのショッピングカート機能を実装します

目次1. すべて選択2. 商品の数量を増やすか減らす3. 商品の小計を変更する4. 合計と合計額を計...

Docker コンテナのタイムゾーン エラーの問題

目次背景質問問題分析と解決策新たな問題問題分析と解決策背景node-schedule スケジュール ...

Windows (コミュニティ エディション) に MySQL 8.0.18 をインストールするためのチュートリアル

この記事では、Windows で MySQL をインストールする方法について簡単に説明します。他にご...

CocosCreator 一般的なフレームワーク設計リソース管理

目次Cocos Creator のリソース管理に関する問題リソースの依存関係リソースの使用レスローダ...

Nginx 環境での WordPress マルチサイト構成の詳細な説明

WordPress のマルチサイト機能を使用すると、1 つの WordPress プログラムをインス...

Centos8 で yum を使用して mongodb 4.2 をインストールする方法

1. リポジトリファイルを作成するmongodb の公式インストール ドキュメントを参照し、次のスク...

最新の高品質な英語無料フォント36個を公開

01. 無限フォントのダウンロード02. バンダフォントのダウンロード03. ロールアップフォントの...

CSS で background-color を使用して背景画像にマスク効果を追加する 2 つの方法

div で background-color と background-image を同時に設定する...