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 を使用してパスワード ジェネレータを作成するための完全な手順

推薦する

どのような種類の MYSQL 接続クエリを知っていますか?

序文クエリ情報が複数のテーブルから取得される場合、クエリのためにこれらのテーブルを結合する必要があり...

myisamchk および mysqlcheck ツールを使用して破損した MySQL データベース ファイルを迅速に修復する方法

サーバーのデータベース ハード ディスク領域がいっぱいだったため、大量のデータの書き込みに失敗し、「...

Vue3を使用してjsで呼び出せるコンポーネントを実装する

目次序文1. 従来のVueコンポーネント1. メインコンポーネントコード: 2. 使用方法3. 成果...

VUE v-for の :key の詳細な説明

v-for タグにキーが追加されていない場合。 <!DOCTYPE html> <...

nginx 設定ファイルパスとリソースファイルパスを表示する方法

nginx 設定ファイルのパスを表示する nginx -t 経由nginx -t コマンドの本来の機...

MySQLマスタースレーブデータベース構築方法の詳細な説明

この記事では、MySQL マスター/スレーブ データベースの構築方法について説明します。ご参考までに...

js を使用して USB スキャナー データを取得する方法

この記事では、USBバーコードスキャナデータを取得するjsの具体的なプロセスを参考までに紹介します。...

きれいなJavaScriptコードの書き方を教える記事

目次1. 変数意味のある名前を使う不必要なコンテキストを追加しないようにするハードコードされた値を避...

uniapp 要素ノードスタイルの動的変更の詳細な説明

目次1. スタイル属性をバインドして変更するhtml:対応するjs:達成された効果:次に、refを使...

CSS で overflow-y: visible; が機能しない理由の分析と解決

シナリオ最近の要件は、モバイル デバイス用の h5 ページです。これには、選択可能なカードの行が必要...

Nginx リバース プロキシを使い始める

目次概要リバースプロキシの役割Nginx リバース プロキシ イントラネット侵入 8081 ポートの...

Node.js で簡単なクローラーケースを作成するチュートリアル

準備まず、nodejs をダウンロードする必要がありますが、これは問題ないはずです。原文はwebst...

MySQL でシンプルな検索エンジンを実装するためのサンプルコード

目次序文導入ngram全文パーサー全文インデックスを作成する検索方法1. 自然言語検索(自然言語モー...

JavaScript で Webpack を使用するチュートリアル

目次0. Webpackとは1. Webpackの使用2. Webpackのコアコンセプト2.1 エ...

Linux に nodejs 環境とパス構成をインストールするための詳細な手順

Linux に Node.js をインストールする方法は 2 つあります。1 つは簡単で、解凍して使...