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 アプリケーションを展開する方法 (画像とテキスト付き)

推薦する

Vue ミックスインの使い方の詳しい説明

目次Vue ミックスインの使用ミックスインでのデータアクセスミックスイン/index.jsホーム.v...

Nginxはドメイン名のアクセス方法を定義しています

最近Nginxを構築しているのですが、ドメイン名でアクセスできません。 nginx 構成ファイル n...

IIS7~IIS8.5 サーバープロトコルヘッダーの削除または変更

要件: IIS 7、7.5、8.0、8.5、および ASP.NET で HTTP 応答ヘッダーを削除...

インタラクティブデザインでページングと読み込みのどちらを選択するかについての説明

この記事の著者@子木yoyoが個人ブログに投稿したものです。 Web ページでもモバイル アプリでも...

CSS 要素で計算されたスタイルを取得します (カスケード/最終スタイル後)

CSS 要素内の計算されたスタイル (つまり、カスケード後の最終的なスタイル) を取得するには、W3...

高度な CSS の 3 つの方法を使用して複数行の省略を実装するサンプル コード

序文これは古くからの要望ですが、オンラインで解決策を探している人はまだ多く、特に検索結果の上位にラン...

vue+elementuiは、共有箇条書きボックスの追加と変更の完全なコードを実装します。

目次1. 新しいII. 変更element-ui は、Ele.me のフロントエンド チームが開発者...

JavaScriptページングコンポーネントの使い方の詳細な説明

ページネーションコンポーネントはWeb開発でよく使われるコンポーネントです。ページネーション機能を実...

mysqlのkey_lenの計算方法についての簡単な説明

MySQL の explain コマンドは SQL のパフォーマンスを分析できます。その 1 つが ...

TypeScript で時間を費やした場所の概要

TS で時間を過ごした場所をいくつか記録します。 (まず、文句を言わせてください。stackover...

docker run後にコンテナがExited (0)と表示される問題を解決する

Centos7 上で openresty 用の Dockerfile を作成し、ビルドしました。 d...

実行中の Docker コンテナにボリュームを動的に追加する方法

以前、Docker コンテナの起動後にボリュームをマウントできるかどうか尋ねられたことがあります。m...

Nginx の一般的な設定とテクニックの概要

序文この記事では、Nginx の一般的な、実用的で興味深い構成をいくつか紹介します。この記事を読んだ...

Vueでaxiosをカプセル化する方法

目次1. インストール1. はじめに3. インターフェースルートアドレス4. 使用例4.1 ダウンロ...

Vuex全体のケースの詳細な説明

目次1. はじめに2. 利点3. 使用手順1. Vuexをインストールする2. Vuexを参照する3...