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

推薦する

VMWare Linux MySQL 5.7.13 のインストールと設定のチュートリアル

この記事では、参考までにVMWare LinuxにMySQL 5.7.13をインストールするチュート...

react+reduxを使用してカウンター機能を実装すると発生する問題

Redux はシンプルな状態マネージャーです。その歴史をたどることはしません。使用法の観点から見ると...

Mysqlは実行中のトランザクションを照会し、ロックを待機する方法

navicatを使用してテストと学習を行います。まず、 set autocommit = 0;を使用...

XHTML の珍しいが便利なタグ

Xhtml には、あまり使用されないが非常に便利なタグが多数あります。半分の労力で 2 倍の結果を達...

opensslを使用して無料の証明書を生成する方法

1: openssl とは何ですか? その機能は何ですか?適用シナリオは何ですか? Baidu 百科...

Linux ソフトウェアのインストール場所を確認する簡単な方法

1. ソフトウェアのインストールパスを確認します。 Linuxソフトウェアをインストールできる場所は...

最初のReactページを作成する方法

目次Rractとは何ですか?背景React スキャフォールディングJSXとは何かRractとは何です...

階段を転がす特殊効果を実現する JavaScript (jQuery 実装)

皆さんもJDを使ったことがあると思います。ホームページには非常によく見られる機能があります。階段の特...

カスタムポップアップボックスを実装するためのJavaScriptシングルトンモード

この記事では、カスタムポップアップボックスを実装するためのJavaScriptシングルトンモードの具...

ボタンと入力タイプの違いと注意点

<button> タグ<br />定義と使用法<button> ...

DockerでJenkinsをインストールし、初期プラグインのインストール失敗の問題を解決する

Jenkins をインストールした後、プラグインの初期ダウンロードが常に失敗し、インストールが失敗し...

vue backtop コンポーネントを実装するための完全なコード

効果: コード: <テンプレート> <div class="back-t...

React コンポーネントのコンストラクタとスーパーの知識ポイントのまとめ

1. Reactでクラス宣言する際のヒント 上記のように、Child クラスは class キーワー...

SSHのssh-keygenコマンドの基本的な使い方の詳細な説明

SSH 公開鍵認証は、SSH 認証方式の 1 つです。 SSH パスワードフリーのログインは公開鍵認...

JSはビデオの再生速度を制御するための簡単なサンプルコードを実装します

導入以前、ある問題に気づきました。学習ビデオを視聴しているとき、動きが遅すぎる、先生が黒板に書くのに...