MySQL マスタースレーブレプリケーションスレッドの状態遷移に関する詳細な理解

MySQL マスタースレーブレプリケーションスレッドの状態遷移に関する詳細な理解

序文

MySQL マスター スレーブ レプリケーションの基本原理は、スレーブ データベースがマスター データベースに接続し、マスター データベースがマスター データベースの DUMP スレッドを生成することです。DUMP スレッドの主なタスクは、バイナリ ログのマイニングを継続し、それをスレーブ データベースの IO スレッドに送信することです。ログ ストリームを受け取った後、IO スレッドはそれをリレー ログに書き込みます。別のスレッドである SQL スレッドは、リレー ログの内容を読み取り、SQL ステートメントを再生します。

この記事では、主にMySQLマスタースレーブレプリケーションスレッドの状態遷移に関する関連コンテンツを紹介します。詳しい紹介を見てみましょう。

1. メインライブラリスレッドの状態値

次のリストは、マスター スレーブ レプリケーション (SHOW PROCESSLIST) のマスター サーバーの Binlog Dump スレッドの State 列に表示される可能性のある最も一般的なステータスを示しています。マスター サーバーに Binlog Dump スレッドが表示されない場合は、レプリケーションが実行されていない、つまり現在スレーブ ホストが接続されていないことを意味します。

バイナリログイベントをスレーブに送信

バイナリ ログはさまざまなイベントで構成されます。イベントは通常、更新とその他の情報から構成されます。スレッドはバイナリ ログからイベントを読み取り、それをスレーブに送信しています。

1 つのバイナリログの読み取りが終了しました。次のバイナリログに切り替えます。

スレッドはバイナリ ログ ファイルの読み取りを完了し、スレーブ サーバーに送信する次のログ ファイルを開いています。

すべてのバイナリログをスレーブに送信しました。バイナリログが更新されるのを待機しています。

スレッドはバイナリ ログからすべての主要な更新を読み取り、スレーブ サーバーに送信しました。スレッドは現在アイドル状態であり、マスター上の新しい更新の結果としてバイナリ ログに新しいイベントが表示されるのを待機しています。

終了の完了を待機中

スレッドが停止したときに発生する非常に単純な状態。

2. スレーブI/Oスレッド状態値

マスターに接続中

スレッドはプライマリ サーバーに接続しようとしています。

マスターバージョンの確認

プライマリ サーバーとの接続が確立された直後に発生する一時的な状態。

マスターにスレーブを登録する

プライマリ サーバーとの接続が確立された直後に発生する一時的な状態。

バイナリログダンプを要求しています

プライマリ サーバーとの接続が確立された直後に発生する一時的な状態。スレッドは、要求されたバイナリ ログ ファイル名と位置から始まるバイナリ ログの内容の要求をマスター サーバーに送信します。

バイナリログダンプ要求が失敗した後、再接続を待機しています

バイナリ ログ ダンプ要求が失敗した場合 (接続なしのため)、スレッドはスリープ状態になり、定期的に再接続を試みます。再試行の間隔は、--master-connect-retry オプションを使用して指定できます。

バイナリログダンプ要求が失敗した後の再接続

スレッドはプライマリ サーバーに再接続しようとしています。

マスターがイベントを送信するのを待っています

スレッドはプライマリ サーバーに接続し、バイナリ ログ イベントが到着するのを待機しています。プライマリ サーバーがアイドル状態の場合は、さらに長く続く可能性があります。待機が slave_read_timeout 秒続くと、タイムアウトが発生します。この時点で、スレッドは接続が切断されたと見なし、再接続を試みます。

マスターイベントをリレーログにキューイングする

スレッドはイベントを読み取り、SQL スレッドによる処理のためにそれをリレー ログにコピーしています。

マスターイベントの読み取りに失敗した後、再接続を待機しています

読み取り中にエラーが発生した場合 (接続なしのため)、スレッドは再接続を試行する前に master-connect-retry 秒間スリープします。

マスターイベントの読み取りに失敗した後の再接続

スレッドはマスター サーバーに再接続しようとしています。接続が再確立されると、状態は「マスターがイベントを送信するのを待機中」に変わります。

スレーブSQLスレッドが十分なリレーログスペースを解放するのを待機しています

ゼロ以外の relay_log_space_limit 値が使用されており、リレー ログが大きくなり、それらの合計サイズがその値を超えています。 I/O スレッドは、SQL スレッドがリレー ログの内容を処理し、十分なスペースを解放するためにいくつかのリレー ログ ファイルを削除するまで待機しています。

終了時にスレーブミューテックスを待機中

スレッドが停止したときに発生する非常に単純な状態。

3. スレーブSQLスレッドの状態値

リレーログからイベントを読み取り中

スレッドはリレー ログからイベントを読み取り、イベントを処理できます。

すべてのリレーログを読み取りました。スレーブI/Oスレッドがそれを更新するのを待機しています。

スレッドはリレー ログ ファイル内のすべてのイベントを処理し、I/O スレッドがリレー ログに新しいイベントを書き込むのを待機しています。

終了時にスレーブミューテックスを待機中

スレッドが停止したときに発生する非常に単純な状態。

4. スレーブ接続スレッドの状態値

これらのスレッド状態はレプリケーション スレーブで発生しますが、I/O スレッドや SQL スレッドではなく、接続スレッドに関連付けられています。

マスターの変更

スレッドは CHANGE MASTER TO ステートメントを処理しています。

奴隷の殺害

スレッドは STOP SLAVE ステートメントを処理しています。

マスターダンプテーブルを開く

この状態は、マスター ダンプからテーブルを作成した後に発生します。

マスターダンプテーブルデータの読み取り

この状態は、マスター ダンプ テーブルを開いた後に発生します。

マスターダンプテーブルのインデックスを再構築する

この状態は、マスター ダンプ テーブル データの読み取り後に発生します。

要約する

上記はこの記事の全内容です。この記事の内容が皆さんの勉強や仕事に一定の参考学習価値を持つことを願っています。ご質問があれば、メッセージを残してコミュニケーションしてください。123WORDPRESS.COM を応援していただきありがとうございます。

以下もご興味があるかもしれません:
  • MySQL マスタースレーブレプリケーションの遅延の原因と解決策
  • MySQL マスタースレーブレプリケーション構成プロセス
  • MySQL マスタースレーブレプリケーションの原理からインストールと設定までを包括的に解説します。
  • MySQL マスタースレーブレプリケーションの原理と実践の詳細な説明
  • MySQL のマスタースレーブレプリケーションと読み取り書き込み分離の原理と使用法の詳細な説明
  • MYSQL マスタースレーブ レプリケーションの知識ポイントの概要
  • MySQL マスタースレーブレプリケーションの役割と動作原理の詳細な説明
  • MYSQL フルバックアップ、マスタースレーブレプリケーション、カスケードレプリケーション、および半同期の概要
  • MySQL マスタースレーブレプリケーションでエラーをスキップする方法

<<:  JS関数のカリー化の詳細な説明

>>:  自作の Windows サーバーに egg アプリケーションを展開する方法 (画像とテキスト付き)

推薦する

MySQL データベースのインデックス順序の詳細な説明

目次事件の原因解剖学ファイルの並べ替えファイルのソートが非常に遅いのですが、他に解決策はありますか?...

入力ファイルの制御と美化について

一部のWebサイトでアップロードする場合、「参照」ボタンをクリックすると、[ファイルの選択]ダイアロ...

CSS属性のマージンの理解について話す

1.マージンとは何ですか?マージンは、要素の周囲のスペースの間隔を制御するために使用され、視覚的にス...

vuexプロジェクトにおけるログインステータス管理の実践プロセス

目次道具:ログインシナリオ:練習する:シナリオ1: 思考と実践シナリオ2: 思考と実践要約する道具:...

CSSで検索ボックスを非表示にする機能を実装します(アニメーション順方向と逆方向のシーケンス)

上部のメニュー バーに検索ボックスを配置するのは一般的なシナリオですが、検索機能がそれほど頻繁に使用...

Nginx リクエスト制限の設定方法

Nginx は、多くの優れた機能を備えた強力で高性能な Web およびリバース プロキシ サーバーで...

WeChat アプレットの日付と時刻のコンポーネント (年、月、日、時間、分)

この記事の例では、WeChatアプレットの日付と時刻コンポーネントの具体的なコードを参考までに共有し...

CSS3に基づいてiPhoneを描く

結果:実装コードhtml <div class='iphone'> &l...

CSSセレクターでの正規表現の使用

はい、CSS にも正規表現があります (アーメン) CSS で目立つための 2 つの強力なツール: ...

MySQL のフィールドに一意のインデックスを追加および削除する方法

1. PRIMARY KEY(主キーインデックス)を追加するmysql>ALTER TABLE...

Python スクリプトを Ubuntu で直接実行する方法

翻訳プログラムを例に挙げてみます。前回はWindowsでのアプリケーションのパッケージ化についてお話...

PXEを使用してLinuxシステムを自動的に展開する方法

目次背景DHCPの設定DHCP ファイル (動的ホスト構成プロトコル) の編集tftp 設定sysl...

カルーセル効果を実現するjQueryプラグイン

毎日jQueryプラグイン - カルーセルチャートを実装するためのjQueryプラグイン。参考までに...

電子メールの HTML ページを作成するための原則の概要

HTML メールはこのサイト上の独立したホスト ページではないため、他の誰かによってホストされていま...

MySQL テーブルをコピーする 3 つの方法 (要約)

テーブル構造とそのデータをコピーする次のステートメントは、データを新しいテーブルにコピーします。注:...