MySQL レプリケーション メカニズムの原理の説明

MySQL レプリケーション メカニズムの原理の説明

背景

レプリケーションはデータの完全なコピーです。レプリケーションが必要な理由として、まず思い浮かぶのは、ユーザーに損失をもたらす可能性のある偶発的なデータ損失の恐れです。

データレプリケーションを完了すると、それ以上の利点があることがわかります。1 台のマシンがダウンしても、別のマシンにバックアップされたデータを有効にできます。結局のところ、ダウンタイムの確率は非常に小さく、バックアップマシンは空き時間にメインマシンのトラフィックの負荷を分担することができます。さらに、データベースのバージョンをアップグレードする必要がある場合は、ユーザー サービスを停止せずに最初にスタンバイ マシンをアップグレードし、メイン データベースが使用可能で安定していることが確認されたら、メイン データベースをアップグレードできます。

しかし、DBA が手動コピーでレプリケーションを完了できるとは限りません。DBA の勤務中にクラッシュが発生した場合、その期間に生成されたデータは時間内にバックアップされず、スタンバイ データベースでデータが失われることになります。そのため、自動レプリケーションのメカニズムを設計する必要があります。

複製メカニズムの設計

コピーしたデータベースをマスター データベース、貼り付けたデータベースをスレーブ データベースとして暫定的に定義します。マスター データベースからスレーブ データベースへのレプリケーションを実現するのは非常に簡単です。マスター データベースのデータ ファイルのコピーを定期的にコピーし、スレーブ データベースが配置されているサーバーに転送するスケジュールされたタスクのみが必要です。

しかし、結局のところ、スケジュールされたタスクはリアルタイムではありません。マスター データベースが最後のレプリケーションから 10 分後に失敗した場合、アクティブ化されたスレーブ データベースは最後にレプリケーションされたデータを使用するため、10 分間のデータが失われ、結果は悲惨なものになります。

リアルタイムのレプリケーションが依然として必要な場合は、マスター データベースは実行された各ステートメントをスレーブ データベースにリアルタイムで送信し、スレーブ データベースがそれを即座に実行できるようにすることで、両側のデータの一貫性を確保できます。

あまり良くないのは、マスター データベースがスレーブ データベースにデータをリアルタイムで送信し、スレーブ データベースの実行が終了してからでないと次のステートメントを処理できないため、マスター データベースの実行時間が大幅に消費されることです。スレーブ データベースが多すぎると、マスター データベースは役に立たなくなります。

メイン データベースの時間を節約するには、非同期に変更する必要があります。メイン データベースによって実行されたステートメントはファイルに保存され、スレーブ データベースはそれを取得できるため、メイン データベースはスレーブ データベースを待つ必要がありません。ファイルに書き込まれるため、速度が非常に高速です。メインデータベースは、実行前にステートメントをファイルに書き込むことで、より高い同期効率を実現できます。

上記の問題の一部では、スレーブ データベースはマスター データベースを実行してデータを取得することができません。スレッドを開始してマスター データベースとの接続を確立し、マスター データベースからデータを要求することしかできません。次に、マスター データベースもスレッドを開始してファイル コンテンツを読み取り、スレーブ データベース スレッドにプッシュします。ステートメントを受け取った後、スレーブ データベースはすぐにそれを実行できます。

これはまだ非常に非効率的です。マスター データベースのスレッドは、スレーブ データベースがステートメントを受信して​​実行を完了するまで待機してから、次のステートメントをプッシュする必要があります。スレーブ データベースが複数ある場合、マスター データベースは各スレーブ データベースとの長期通信を維持するために複数のスレッドを開始する必要があり、マスター データベース サーバーのリソースを占有します。スレーブ データベースでは、マスター データベースから送信されたステートメントを一時的に保存するファイルを作成し、最初に保存してからゆっくりと実行する方がよいでしょう。これにより、マスター データベースへの負荷が軽減され、スレーブ データベースも軽減されます。

スレーブにリレー用の独自のファイルが用意されたので、心配する必要はありません。スレーブは別のスレッドを開始し、リレー ファイル内のステートメントをゆっくりと実行できます。実行が完了すると、元のファイルには価値がなくなり、サーバー リソースの占有を避けるためにクリーンアップできます。

これまで、最も基本的なレプリケーション メカニズムが設計されています。マスター データベースからスレーブ データベースへのこのレプリケーション方法は、典型的なマスター スレーブ アーキテクチャであり、これに基づいて進化させることができます。たとえば、スレーブ データベースが多数ある場合、マスター データベースは各スレーブ データベースにデータをプッシュする必要があり、それに応じてマスター データベースへの負荷が増加します。マスター データベースの役割は、データの同期だけでなく、データの読み取りと書き込みも行うため、データ同期タスクは他の誰かに置き換えることができます。たとえば、マスター データベースとスレーブ データベースの間に別のマスター データベースが確立されます。新しく確立されたマスター データベースの役割は、スレーブ データベースにデータを同期することです。このようにして、実際のマスター データベースは、新しく確立されたマスター データベースにデータを 1 回プッシュするだけで済み、残りの時間はデータの読み取りと書き込みに集中できます。

この進化したレプリケーションモードは、マルチレベルレプリケーションアーキテクチャと呼ばれます。この記事はここで終わります。上記は、3つのレプリケーションアーキテクチャのうちの2つです。さらに、「マスターマスター」アーキテクチャもあります。ここでは詳細には触れません。興味がある場合は、自分で詳しく調べたり、以降の記事に注目したりしてください。

以上がMySQLレプリケーションメカニズムに関する知識のすべてです。123WORDPRESS.COMへのご支援に感謝いたします。

以下もご興味があるかもしれません:
  • MYSQL フルバックアップ、マスタースレーブレプリケーション、カスケードレプリケーション、および半同期の概要
  • MySQLカスケードレプリケーションの実装方法の例
  • あるテーブルのデータの列を別のテーブルの列にコピーするMySQLメソッド
  • MySQL の異なるテーブル間でフィールドをコピーする
  • MySQL マスタースレーブレプリケーションスレッドの状態遷移に関する詳細な理解
  • Mysql マスタースレーブレプリケーションの注意事項の説明

<<:  Tomcat を IDEA にダウンロード、インストール、デプロイするチュートリアル (IDEA の 2 つのホット デプロイ設定方法付き)

>>:  Node.js を使用してパスワード ジェネレータを作成するための完全な手順

推薦する

WIN10 での JDK インストールと環境変数の設定手順 (詳細版)

目次1. JDKをダウンロードする(例としてjdk1.8.0を使用する) 2. JDK をインストー...

web.config (IIS) および .htaccess (Apache) の構成

xml <?xml バージョン="1.0" エンコーディング="...

JS を使って CSS3 で丸い角を実装する方法

IE で CSS3 を使用して角を丸くする方法を探していたときに、例を見つけました。まだテストして...

MySQL 8.0.24 バージョンのインストールと設定方法のグラフィックチュートリアル

この記事ではMySQL 8.0.24バージョンのインストールと設定方法を記録し、皆さんと共有しますM...

Vueはダイアログのカプセル化を実装します

目次Vue2 ライティングVue3プラグインのバージョンの記述Vue3 動的コンポーネントの記述書き...

SQL文のパフォーマンスを分析するための標準的な要約

この記事では、explain を使用して SQL ステートメントを分析する方法を紹介します。実際、イ...

ファイル書き込みを使用して Linux アプリケーションをデバッグする方法

Linux ではすべてがファイルなので、Android システム自体は Linux + Java だ...

Linux のパスワードを紛失した場合にリセットする方法

1. スタートアップメニューでは、カーソルを最初の行に移動します - eを押します 2. UTF-8...

vuex データの永続化のための 2 つの実装ソリューション

目次ビジネス要件:解決策 1: vuex-persistedstate解決策2: vuex-pers...

Windows 10 で Ubuntu 20.04 LTS をアップデートする方法

2020 年 4 月 23 日、本日、Windows 上の Ubuntu 20.04 では、Ubun...

CSSカスケーディングメカニズムについての簡単な説明

CSS にカスケード メカニズムがあるのはなぜですか? CSS では、同じ要素の特定のプロパティに同...

タイプファイルの入力ボタン機能の研究

<br />一部のWebサイトでアップロードする場合、「参照」ボタンをクリックすると[フ...

バックエンドデータを取得するためのVue Elementフロントエンドアプリケーション開発

目次概要1. バックエンドデータの取得と処理2. インターフェース表示処理概要前回のエッセイ「ステッ...

Ajax jQueryはページ上のdivの更新効果を実現します

元のコードは次のとおりです。 <div class='コントロールグループ'&...

Linuxシステムの入出力管理とvimの共通機能の詳細な説明

####システム内の入出力の管理#### 1. システムの入力と出力のリダイレクトを理解する入力リダ...