MySQL マスタースレーブの原理と構成の詳細

MySQL マスタースレーブの原理と構成の詳細

MySQLのマスタースレーブ構成と原理、参考までに具体的な内容は以下のとおりです。

1. 環境の選択:

1. Centos 6.5

2.MySQL 5.7

2. MySQLマスタースレーブレプリケーションとは

MySQL マスタースレーブレプリケーションは、最も重要な機能の 1 つです。マスタースレーブ レプリケーションとは、1 台のサーバーがマスター データベース サーバーとして機能し、別のサーバーまたは複数のサーバーがスレーブ データベース サーバーとして機能することを意味します。マスター サーバーのデータは、スレーブ サーバーに自動的にコピーされます。マルチレベル レプリケーションでは、データベース サーバーはマスターまたはスレーブのいずれかとして機能できます。 MySQL マスター スレーブ レプリケーションの基本は、マスター サーバーがデータベースの変更のバイナリ ログを記録し、スレーブ サーバーがマスター サーバーのバイナリ ログを通じて自動的に更新を実行することです。

3. MySQL マスタースレーブレプリケーションの種類

1. ステートメントベースのレプリケーション

マスター サーバーで実行されたステートメントは、スレーブ サーバーで再度実行されます。これは、MySQL バージョン 3.23 以降でサポートされています。

デメリット: 時間が完全に同期されない可能性があり、偏差が発生し、ステートメントを実行するユーザーが異なる場合があります。

2. 行ベースのレプリケーション

どのステートメントによって変更が行われたかに関係なく、メイン サーバー上の変更されたコンテンツを直接コピーします。この方法は、MySQL 5.0 以降で導入されました。

デメリット: たとえば、給与テーブルに 10,000 人のユーザーがいて、各ユーザーの給与に 1000 を加算する場合、行ベースのレプリケーションでは 10,000 行をコピーする必要があり、大きなオーバーヘッドが発生しますが、ステートメントベースのレプリケーションでは 1 つのステートメントのみが必要です。

3. 混合型のレプリケーション

MySQL はデフォルトでステートメントベースのレプリケーションを使用します。ステートメントベースのレプリケーションで問題が発生する場合は、行ベースのレプリケーションが使用され、MySQL は自動的にそれを選択します。

MySQL マスタースレーブ レプリケーション アーキテクチャでは、読み取り操作はすべてのサーバーで実行できますが、書き込み操作はマスター サーバーでのみ実行できます。マスタースレーブレプリケーションアーキテクチャは読み取り操作の拡張を提供しますが、書き込み操作が多い場合(複数のスレーブサーバーがマスターサーバーからデータを同期する必要がある)、マスターサーバーは必然的に単一マスターモデルのレプリケーションのパフォーマンスボトルネックになります。

4. 原則

1. マスタースレーブ

マスター サーバーでの変更はすべてバイナリ ログに保存されます。スレーブ サーバーで I/O スレッド (実際にはマスター サーバーのクライアント プロセス) が開始され、マスター サーバーに接続してバイナリ ログの読み取りを要求し、読み取ったバイナリ ログをローカルのリアル ログに書き込みます。サーバー上で SQL スレッドを開始し、定期的に realy ログを確認します。変更が見つかった場合は、ローカル コンピューターですぐに変更を実行します。

2. マスター-スレーブ-スレーブ

マスターが 1 つでスレーブが複数ある場合、マスター データベースは複数のスレーブ データベースのバイナリ ログの書き込みと提供の両方を担当します。この時点で、いくつかの調整を行って、バイナリ ログを特定のスレーブにのみ渡すことができます。このスレーブはバイナリ ログを有効にし、独自のバイナリ ログを他のスレーブに送信します。または、このスレーブに何も記録させず、バイナリ ログを他のスレーブに転送するだけにします。このアーキテクチャではパフォーマンスが大幅に向上し、データ間の遅延もわずかに改善されるはずです。

【知らせ】

1. MySQL の古いバージョンでは、マスター スレーブ レプリケーションのスレーブ セグメントは 2 つのプロセスではなく 1 つのプロセスで完了していたため、多くのリスクとパフォーマンス関連の問題が発生していました。具体的な問題点は以下のとおりです。

1. プロセスは、bin-log ログのコピーとログの解析、およびそれら自体の実行をシリアル プロセスにします。これにより、パフォーマンスがある程度制限され、非同期レプリケーションの遅延が長くなります。

2. スレーブ側はマスター側からバイナリログを取得した後、ログの内容を解析して独自に実行する必要があります。このプロセス中に、マスター側で多数の変更が発生し、多数の新しいログが追加された可能性があります。この段階でマスター側のストレージに回復不可能なエラーが発生した場合、この段階で行われたすべての変更は元に戻せません。スレーブ側の圧力が比較的高い場合、このプロセスにはより長い時間がかかることがあります。

5. MySQLマスタースレーブレプリケーションのプロセス

1. 2 つの状況: 同期レプリケーションと非同期レプリケーション。非同期レプリケーションは主に実稼働環境で使用されます。

2. 複製の基本的なプロセス:

1. スレーブ上の I/O プロセスはマスターに接続し、指定されたファイルの指定された位置以降 (またはログの先頭から) のログの内容を要求します。

2. マスターがスレーブのIOプロセスからの要求を受信すると、レプリケーションを担当するIOプロセスは、要求情報に従ってログの指定された位置以降のログ情報を読み取り、スレーブのIOプロセスに返します。返される情報には、ログに含まれる情報に加えて、今回返された情報が到着したマスター側の bin-log ファイル名と bin-log の場所も含まれます。

3. スレーブの IO プロセスは、情報を受信した後、受信したログ内容をスレーブのリレー ログ ファイルの末尾に順番に追加し、マスターから読み取ったバイナリ ログのファイル名と位置をマスター情報ファイルに記録します。これにより、次回の読み取り時に、マスターに「バイナリ ログの特定の位置のログ内容が必要です。送信してください」と明確に伝えることができます。

4. スレーブの SQL プロセスは、リレー ログに追加された新しいコンテンツを検出すると、マスター側で実際に実行されるときに、リレー ログのコンテンツをすぐに実行可能なコンテンツに解析し、スレーブ自身で実行します。

6. 構成:

1. まず、次の 2 つの状況を明確にします。

1. 2 台の独立したサーバーまたは仮想マシン。

2. テンプレートを使用して作成された 2 つの仮想マシン。

2. 2 つのサーバーに、MySQL マスター サーバーと MySQL スレーブ サーバーの名前を付けます。

3. マスターサーバーとスレーブサーバーはそれぞれ次の操作を実行します。

1. MySQLのバージョンは一貫している

2. テーブルを初期化する

4. MySQL マスター サーバーと MySQL スレーブ サーバーを変更します。

vim /etc/my.cnf 
[mysqld] 
log-bin=任意の名前 //バイナリログを有効にする server-id=任意の番号 //サーバーの一意のID。デフォルト値は1で、通常はIPアドレスの最後の桁に設定されます。

5. 最初のケースでは、2 つのサーバーを直接再起動します。2 番目のケースでは、2 つのサーバーの auto.cnf ファイルの名前を auto.cnf.bak に変更してから、MySQL サービスを再起動します。

6. MySQLマスターサーバーにアカウントを作成し、スレーブを承認する

'任意のパスワード' で識別される 'ユーザー名'@'%' に *.* のレプリケーション スレーブを付与します。

7. MySQLマスターサーバーのステータスを照会する

マスターステータスを表示します。

8. MySQLスレーブサーバーを構成する

マスターを変更する 
master_host = 'MySQLマスターサーバーのIPアドレス'、 
master_user = 'MySQLマスターサーバーで以前に作成されたユーザー名'、 
master_password = '以前に作成したパスワード'、 
master_log_file = 'MySQL マスター サーバー ステータス バイナリ ファイル名', 
master_log_pos='MySQL マスター サーバーのステータスの位置値';

9. スレーブを有効にする

スレーブを起動します。

10. MySQLスレーブサーバのステータスを確認する

スレーブステータスを表示\G

チェック

Slave_IO_Running: Yes //このステータスはYESである必要があります

Slave_SQL_Running: Yes //このステータスはYESである必要があります

すべての変更が YES の場合、マスター スレーブ構成は成功です。MySQL マスター サーバーが更新されると、スレーブ サーバーは特定の構成に基づいてそれに応じて同期します。

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

以下もご興味があるかもしれません:
  • Mysqlマスタースレーブ同期の実装原理
  • MySQL マスタースレーブ構成の解釈とその原理分析 (マスタースレーブ)
  • MySQL マスタースレーブレプリケーションの役割と動作原理の詳細な説明
  • MySQL マスタースレーブ同期原理の紹介
  • MySQL マスタースレーブレプリケーションの原理と実践の詳細な説明
  • MySQL の例 DTID マスタースレーブ原理の分析

<<:  TSオブジェクトのスプレッド演算子とレスト演算子の詳細な説明

>>:  Winows Server 2019 アクティベーション コードとボリューム ライセンス エディション KMS インストール キー GVLK

推薦する

Vue コンポーネント化の一般的な方法: コンポーネント値の転送と通信

関連する知識ポイント親コンポーネントから子コンポーネントに値を渡す子コンポーネントから親コンポーネン...

UTF-8 ファイルの Unicode 署名 BOM (バイト オーダー マーク) の問題

最近、UTF8 エンコードの中国語 Zen Cart Web サイトをデバッグしているときに奇妙な現...

Linuxで$を#に変更する方法

このシステムでは、# 記号は root ユーザーを表し、$ 記号は通常のユーザーを表します。では、ど...

MySQL エラー番号 1129 の解決方法

SQLyog が MySQL に接続する際にエラー番号 1129 が発生します: mysql エラー...

スクロールバーを非表示にしながらもスクロール効果を維持する純粋な CSS (モバイルと PC)

携帯モバイル ページは Chrome および Safari とのみ互換性があればよいため、カスタム ...

テキストまたはJSONを返すようにnginxを設定する方法

特定のインターフェースをリクエストするときに、指定されたテキスト文字列または JSON 文字列を返す...

Tomcat が https アクセスをサポートするための手順の説明

tomcat を https アクセスに対応させる方法ステップ: (1)キーストアファイルを生成する...

MySQLのREDOログ(リドゥログ)とロールバックログ(アンドゥログ)の詳しい説明

序文:前回の記事では、MySQL システムでよく使用されるログをいくつか説明しました。実は、トランザ...

Linux での MySql centos7 のバイナリコンパイルとインストールに関するチュートリアル

// これをインストールするのに丸一日かかったので、記録するためにメモを書きました。 //何か問題が...

ドラッグアンドドロップでVueユーザーインターフェースを生成する方法

目次序文1. 技術原理1.1 レイアウト1.2 コンポーネント1.3 ステータス1.4 イベント1....

JSホモロジー戦略とCSRFの詳細な説明

目次概要同一生成元ポリシー (SOP)相同制限クロスドメインをバイパスクロスサイトリクエストフォージ...

Vue カプセル化コンポーネント ツール $attrs、$listeners の使用

目次序文$属性例: $listeners (公式説明)使用シナリオ要約する序文複数レベルのコンポーネ...

Linux calコマンドの使用

1. コマンドの紹介cal (カレンダー) コマンドは、現在の日付または指定された日付のグレゴリオ暦...

クールなバーコードエフェクトの作り方を教えます

声明:この記事では、Web ページ制作技術を使用して問題を包括的に解決するという考え方を反映して、W...

Reactの基本のまとめ

目次序文始めるReactライフサイクルリアクトファイバーリアクトセットステートReactイベントメカ...