MySQL マスタースレーブレプリケーションプロセスの詳細な説明

MySQL マスタースレーブレプリケーションプロセスの詳細な説明

1. マスタースレーブレプリケーションとは何ですか?

マスター データベースの DDL および DML 操作は、バイナリ ログ (BINLOG) を介してスレーブ データベースに転送され、これらのログが再実行 (再実行) されるため、スレーブ データベースのデータはマスター データベースとの一貫性が保たれます。

2. マスタースレーブレプリケーションの役割

1. マスター データベースに問題がある場合は、スレーブ データベースに切り替えることができます。

2. データベースレベルで読み取りと書き込みの分離を実行できます。

3. スレーブデータベースで毎日のバックアップを実行できる

3. コピープロセス

バイナリログ: メインデータベースのバイナリログ

リレーログ: サーバーからのリレーログ

ステップ 1:各トランザクションがデータの更新を完了する前に、マスターは操作レコードを binlog ファイルに連続的に書き込みます。

ステップ 2:スレーブは I/O スレッドを開始し、マスター上で通常の接続を開きます。その主なタスクは、バイナリログ ダンプ プロセスです。読み取りの進行がマスターに追いついた場合は、スリープ モードに入り、マスターが新しいイベントを生成するのを待機します。 I/O スレッドの最終的な目標は、これらのイベントをリレー ログに書き込むことです。

ステップ 3: SQL スレッドはリレー ログを読み取り、ログ内の SQL イベントを順番に実行して、メイン データベースのデータとの一貫性を保ちます。

4. マスタースレーブレプリケーションの具体的な操作

同じウィンドウの異なるパスに msyql のインスタンスを 2 つインストールしました。私の環境では不一致ですが、マスターとスレーブの MySQL のインストール バージョンは一致させることをお勧めします。

1. マスターデータベースとスレーブデータベースの設定ファイルmy.iniをそれぞれ変更します。

マスター

3306 は MySQL のデフォルトのポート番号で、マスター インスタンスで変更する必要はありません。server-id は、異なる MySQL インスタンスで重複してはならない一意の ID を指定するために使用されます。binlog-do-db は、コピーするデータベースを指定します。log-bin は、バイナリ ログ ファイルを開くために使用されます。

軟膏

マスターデータベースとスレーブデータベースは同じコンピュータ上で実行されるため、ポートは異なる設定にする必要があります。ここでは3307です。

replicate-do-db: 同期するデータベースの名前。マスター上の構成と一致している必要があります。

2. マスター上のレプリケーション専用のアカウントを作成します: weidai/123456

この新しく追加されたアカウントは、mysql.user テーブルでクエリできます。

初めて操作したときはここでアカウントの作成を完了しましたが、実際にコピーしてみると、コピーが成功していないことがわかりました。エラーを確認すると、マスターによって生成されたbinlongは正常であることがわかり、次にスレーブのステータスを確認しました。

最後にエラー行があります:

weidai アカウントを使用してマスターに接続できないため、マスターの binlog が取得されず、リレー ログを生成できません。

アカウントとパスワードを何度も確認しましたが、問題は見つかりませんでした。次に関連情報を探したところ、マスターで新しいユーザーを作成するときに手順を忘れたためであることがわかりました。

新しいユーザーを設定したり、パスワードを変更したりした後は、フラッシュ権限を使用して MySQL システム権限関連のテーブルを更新する必要があります。そうしないと、アクセスが拒否されます。これが先ほどのエラーの原因です。別の方法としては、新しい設定を有効にするために MySQL サーバーを再起動することです。

3. マスター データベースの現在のデータ位置を取得します。これは主に、スレーブ データの開始後にデータの開始位置をコピーするために使用されます。ただし、このステータス値を取得する前に、マスター データベースはデータを変更できないため、最初に読み取りロックを有効に設定する必要があります。

4. メインデータベースはデータのバックアップを実行します。データのバックアップ方法はたくさんあります。ここでは紹介しません。前回の記事を参照してください。バックアップが完了すると、読み取りロックが解除され、メインデータベースは書き込み操作を実行できるようになります。

5. スレーブ データベースを起動し、バックアップしたデータを復元します。この時点で、バックアップ時点のマスター データベースとスレーブ データベースのデータは一致しています。

6. スレーブデータベース上のレプリケーション動作の関連構成

7. この時点で構成は完了していますが、スレーブデータベースはまだ同期できず、スレーブスレッドを開始する必要があります。

8. マスターにテーブルを作成し、新しいデータを追加し、スレーブで確認します。

マスターで行った操作がスレーブに反映されることがわかります。このとき、スレーブはマスターのミラーのようなものです。

5. マスタースレーブ同期ステータスの解釈

スレーブ上で表示するには次のコマンドを使用します。

レイアウトがあまりにも醜いので、次のように整理しました。

Slave_IO_STATE: マスターがイベントを送信するのを待機しています

マスターホスト:127.0.0.1

マスターユーザー:weidai

マスターポート:3306

接続再試行:60

マスターログファイル:mysql-bin.000005

読み取りマスターログ位置:1662

リレーログファイル:AE6Z*****-リレーbin.000002

リレーログ位置:1415

スレーブIO実行中: はい

スレーブSQL実行中: はい

---------------------------------------------------------- ゴージャスな分割線------------------------------------------

スレーブIO実行中: はい

スレーブSQL実行中: はい

前述したように、これら 2 つのスレッドは、スレーブ上のレプリケーション プロセスに関係する非常に重要な 2 つのスレッドです。 YESは正常、NOは異常を意味します。

Slave_IO スレッドは、主にマスター上の binlong ログの内容をスレーブのリレー ログ (Relay_log) にコピーします。通常、問題が発生する可能性は高くありません。問題のほとんどは、権限またはネットワークの問題によって発生し、マスターに接続できなくなります。まさに上記のエラーと同じです。

Slave_SQL スレッドはリレー ログ内の SQL を実行する役割を担っており、エラーが発生する可能性が比較的高くなります。たとえば、誰かが手動でスレーブ データベースにレコードを挿入すると、マスターとスレーブの同期中に主キーの競合が発生する可能性があります。

Slave_IO_STATE: マスターがイベントを送信するのを待機しています

このステータスは、リレー ログの同期が完了し、マスターによって新しいイベントが生成されるのを待機していることを示します。

以上がこの記事の全内容です。皆様の勉強のお役に立てれば幸いです。また、123WORDPRESS.COM を応援していただければ幸いです。

以下もご興味があるかもしれません:
  • MySQL マスタースレーブレプリケーションの原理と設定方法(詳細)
  • MySQL マスタースレーブレプリケーションの手順と一般的なエラーの解決方法の詳細な説明
  • MySQL マスタースレーブレプリケーション(マスタースレーブ)の実際の動作例
  • MySQL マスタースレーブレプリケーション構成のハートビート機能の紹介
  • MySQL マスタースレーブレプリケーションの役割と動作原理の詳細な説明
  • MySQL マスタースレーブレプリケーション、読み取り/書き込み分離、バックアップとリカバリの詳細な説明
  • MySQLはマスタースレーブレプリケーションプロジェクトの実践を実装します

<<:  Docker で Tomcat を使用して Web アプリケーションを迅速にデプロイする方法の例

>>:  Linux CentOS でスケジュールされたバックアップ タスクを設定する方法

推薦する

Dockerにelasticsearchとkibanaをインストールする方法

Elasticsearchは現在非常に人気があり、多くの企業が利用しているため、esを知らないと軽蔑...

フォームタグの Enctype 属性とその応用例の紹介

Enctype : ブラウザがデータをサーバーに送り返すときに使用するエンコーディングのタイプを指定...

純粋な JS を使用して vue.js で双方向バインディング機能を実装する方法

目次まず、双方向バインディングを実装するアイデアについて説明します。これらの機能を実装するための j...

Linux でのファイル コンテンツの重複排除と交差と差異の実装

1. データ重複排除日常業務では、Hive や Impala を使用してクエリとエクスポートを行う際...

Dockerを使用してMQTTサーバーを構築するプロセスの詳細な説明

1. イメージをプルするdocker pull registry.cn-hangzhou.aliyu...

Vue ログインページでクッキーを使用してパスワードを 7 日間記憶する方法

問題の説明プロジェクトのログインページでは、7日間パスワードを記憶する必要がある機能があります。この...

JavaScript は大容量ファイルのアップロード処理を実装します

数十 MB 程度の小さいものから 1G 以上の大きいものまで、ビデオ ファイルなどのファイルのアップ...

Docker がポート 2375 を公開し、サーバー攻撃を引き起こす問題と解決策

docker リモート API を学習した学生であれば、ポート 2375 についてよくご存知だと思い...

ES6 Promiseの使い方の詳細な説明

目次約束とは何ですか?拒否の使用法キャッチの使い方すべての使用法レースの使用約束とは何ですか? Pr...

Vue+Elementでページング効果を実現

この記事の例では、ページング効果を実現するためのvue+Elementの具体的なコードを参考までに共...

HTML ハイパーリンク スタイル (4 つの異なる状態) の設定例

コードをコピーコードは次のとおりです。 <スタイル タイプ="text/css&qu...

Nginx操作応答ヘッダー情報の実装

前提条件: ヘッダー情報操作をサポートするには、ngx_http_headers_module モジ...

React+Amapは緯度と経度をリアルタイムで取得し、住所を特定します

目次1. マップを初期化する2. マップポイント3. 位置決めを有効にする4. マップの変更を監視す...

WeChatアプレットは写真アップロード機能を実現

この記事の例では、WeChatアプレットで写真をアップロードするための具体的なコードを参考までに共有...

JavaScript の重要なブレークポイント デバッグ手法の概要 (推奨)

目次デバッガーを使用する理由は何ですか? Chromeデバッガーの基本的な使い方VS Code によ...