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 でスケジュールされたバックアップ タスクを設定する方法

推薦する

ユーザーはその理由を知る必要がある

証券会社にいた頃、設計業務が忙しくなかったため、商品のマニュアルを書く役割を担ったことがありました。...

Win7x64でのMySQL 5.7.18解凍版のインストール方法

関連記事: Win7 x64 に解凍版の mysql 5.7.18 winx64 をインストールする...

MySQL 接続制御プラグインの紹介

目次1. 接続制御プラグイン(connection_control)の紹介1.1 connectio...

マウスのドラッグ効果を実現するJavaScript

この記事では、マウスドラッグ効果を実現するためのJavaScriptの具体的なコードを参考までに紹介...

Jenkins でユーザー ロールの権限を設定する方法

Jenkinsのユーザーロール権限の設定には、ロール戦略プラグインのインストールが必要です。 1.ロ...

HTML ユーザー登録ページ設定ソースコード

上記の Web ページをデザインします。 <!DOCTYPE html> <htm...

MySQL の連結で複数の一重引用符と三重引用符を使用する際の問題

文字列を動的に連結する場合、文字連結を使用することが多いです。次のような連結の引用符の意味がわかりま...

Vue + Axios リクエストインターフェース方式とパラメータ渡し方式の詳しい説明

目次1. リクエストを取得する: 2. 投稿リクエスト: 3. 拡張と補足Vue スキャフォールディ...

jsプロキシの原理の詳細な説明

目次プロキシモードとは何ですか?実例を紹介例を使ってプロキシモデルの定義を理解するプロキシとはget...

MySQL におけるデータタイムとタイムスタンプの違い

MySQL には 3 つの日付型があります。日付(年-月-日)テーブル test(hiredate ...

MySQLデータベースでスロークエリログを有効にする方法の詳細な説明

データベースはスロークエリログを有効にします設定ファイルを変更する設定ファイルmy.iniに次の2つ...

lnmp を使用して MySQL データベースのルート パスワードをリセットする 2 つの方法

最初の方法: Junge のワンクリック スクリプトを使用して、LNMP 環境で MYSQL データ...

Vue+Openlayerはグラフィックスのドラッグと回転変形効果を実現します

目次序文関連資料成果を達成する実装手順序文Openlayer には独自の拡張プラグイン ol-ext...

MySQLにおける分散ロックの考え方をDBの助けを借りて詳しく説明します

序文スタンドアロン ロックであっても分散ロックであっても、共有データに基づいて現在の操作の動作を判断...