MySQL マスタースレーブレプリケーションの原理からインストールと設定までを包括的に解説します。

MySQL マスタースレーブレプリケーションの原理からインストールと設定までを包括的に解説します。

マスタースレーブレプリケーションがなぜ必要なのでしょうか?

1. 複雑な業務システムでは、SQL 文でテーブルをロックする必要があり、その結果、読み取りサービスが一時的に使用できなくなり、業務の実行に大きな影響を与えるシナリオがあります。マスター スレーブ レプリケーションを使用して、マスター データベースが書き込みを担当し、スレーブ データベースが読み取りを担当するようにします。このようにして、マスター データベースがテーブルをロックした場合でも、スレーブ データベースからの読み取りによって業務の正常な動作を保証できます。

2. データのホットバックアップを実行する

3. 建築の拡張。業務量が増えると、I/O アクセス頻度が高くなりすぎて、1 台のマシンでは対応できなくなります。このような場合、複数のデータベースを使用してデータを保存し、ディスク I/O アクセス頻度を減らして、1 台のマシンの I/O パフォーマンスを向上させます。

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

MySQL マスター スレーブ レプリケーションとは、MySQL データベース サーバーのマスター ノードから 1 つ以上のスレーブ ノードにデータをコピーできることを意味します。 MySQL はデフォルトで非同期レプリケーションを使用するため、スレーブ ノードは自身のデータを更新するために常にマスター サーバーにアクセスする必要がありません。データの更新はリモート接続で実行できます。スレーブ ノードはマスター データベース内のすべてのデータベース、または特定のデータベースや特定のテーブルをコピーできます。

MySQL レプリケーションの原理

原理:

(1)マスターサーバーはデータの変更をバイナリログに記録します。マスター上のデータが変更されると、その変更がバイナリログに書き込まれます。

(2)スレーブサーバは、一定時間間隔でマスターバイナリログが変更されたかどうかを検出し、変更があった場合はI/Oスレッドを開始してマスターバイナリイベントを要求します。

(3)同時に、マスターノードは各I/Oスレッドのダンプスレッドを開始し、バイナリイベントを送信してスレーブノードのローカルリレーログに保存します。スレーブノードはSQLスレッドを開始し、リレーログからバイナリログを読み取り、ローカルで再生してマスターノードのデータと一致するようにします。最後に、I/OスレッドとSQLスレッドはスリープ状態に入り、次回起動されるまで待機します。

つまり:

  • スレーブ ライブラリは、I/O スレッド 1 つと SQL スレッド 1 つの 2 つのスレッドを生成します。
  • I/O スレッドはマスター データベースの binlog を要求し、取得した binlog をローカル リレー ログ ファイルに書き込みます。
  • マスター ライブラリは、ログ ダンプ スレッドを生成して、binlog をスレーブ ライブラリ I/O スレッドに転送します。
  • SQL スレッドはリレー ログ ファイル内のログを読み取り、それを SQL ステートメントに解析して 1 つずつ実行します。

知らせ:

1 - マスターは操作ステートメントを binlog ログに記録し、スレーブにリモート接続権限を付与します (マスターは binlog バイナリ ログ機能を有効にする必要があります。通常、データ セキュリティを考慮して、スレーブも binlog 機能を有効にします)。

2--スレーブは IO スレッドと SQL スレッドの 2 つのスレッドを開始します。そのうち、IO スレッドはマスターのバイナリログの内容をリレー ログに読み込む役割を担い、SQL スレッドはリレー ログからバイナリログの内容を読み取り、スレーブのデータベースに更新して、スレーブ データがマスター データと一致するようにする役割を担います。

3--MySQL レプリケーションには少なくとも 2 つの MySQL サービスが必要です。もちろん、MySQL サービスを異なるサーバーに分散することも、1 つのサーバーで複数のサービスを開始することもできます。

4--Mysql レプリケーションでは、マスター サーバーとスレーブ サーバーの Mysql バージョンが同じであることを確認するのが最適です (バージョンの一貫性が確保できない場合は、マスター ノードのバージョンがスレーブ ノードのバージョンよりも低いことを確認してください)

5--マスターノードとスレーブノード間の時間を同期する必要がある

具体的な手順:

1. スレーブデータベースは、接続されたユーザーのすべての条件(ユーザー、パスワード、ポート、IP)を提供し、スレーブデータベースにバイナリログの開始位置(ファイル名の位置番号)を知らせて、手動でマスターデータベースへの変更ステートメントを実行してマスターデータベースに接続します。

2. スレーブ ライブラリの IO スレッドとマスター ライブラリのダンプ スレッド間の接続を確立します。

3. スレーブ IO スレッドは、change master to ステートメントによって提供されたファイル名と位置番号に基づいて、マスターへの binlog 要求を開始します。

4. マスター データベース ダンプ スレッドは、スレーブ データベースの要求に基づいて、ローカル バイナリ ログをイベントの形式でスレーブ データベース IO スレッドに送信します。

5. ライブラリIOスレッドからバイナリログイベントを受信し、ローカルリレーログに保存します。送信された情報はmaster.infoに記録されます。

6. データベースの SQL スレッドからリレー ログを適用し、適用されたレコードをリレー ログ.info に保存します。デフォルトでは、適用されたリレーは自動的に削除されます。

MySQL マスタースレーブレプリケーションのインストールと構成

1. 基本的なセットアップの準備

オペレーティング·システム:

セントロス6.5

MySQLバージョン:

5.7

2 つの仮想マシン:

ノード1:192.168.85.11 (プライマリ)

ノード2:192.168.85.12 (スレーブ)

2. MySQLデータベースをインストールする

詳細なインストールおよびアンインストール手順については、対応するドキュメントを参照してください。

3. 2つのデータベースにデータベースを作成する

--両方のマシンが実行する必要があることに注意してください

データベース msb を作成します。

4. プライマリ (ノード 1) サーバーで次の設定を行います。

設定ファイルを変更し、次のコマンドを実行してMySQL設定ファイルを開きます。

vi /etc/my.cnf

mysqldモジュールに次の設定情報を追加します

log-bin=master-bin #バイナリファイル名

binlog-format=ROW #バイナリログ形式。行、ステートメント、混合の3つの形式があります。行は、スレーブサーバーでコマンドを実行する代わりに、変更された内容をコピーすることを意味します。ステートメントは、マスターサーバーで実行されたSQLステートメントを実行し、同じステートメントをスレーブサーバーで実行することを意味します。 MySQL はデフォルトでステートメントベースのレプリケーションを使用するため、より効率的です。混合とは、ステートメントベースのレプリケーションがデフォルトで使用されることを意味します。ステートメントベースのレプリケーションを正確にレプリケートできないことが判明すると、行ベースのレプリケーションが使用されます。

server-id=1 #各サーバーのIDが異なる必要があります

binlog-do-db=msb #同期されたデータベース名

5. サーバーからマスターサーバーにログインするためのアカウント認証を構成する

--認証操作

グローバルvalidate_password_policyを0に設定します。

グローバルvalidate_password_lengthを1に設定します。

'123456' で識別される 'root'@'%' に *.* 上のレプリケーション スレーブを付与します。

--権限を更新

権限をフラッシュします。

6. スレーブサーバーの構成

設定ファイルを変更し、次のコマンドを実行してMySQL設定ファイルを開きます。

vi /etc/my.cnf

mysqldモジュールに次の設定情報を追加します

log-bin=master-bin #バイナリファイル名 binlog-format=ROW #バイナリファイルの形式 server-id=2 #サーバーID

7. プライマリサーバーのmysqldサービスを再起動します。

MySQLサービスを再起動する

サービスmysqldを再起動

MySQLデータベースにログインする

mysql -uroot -p

マスターのステータスを確認する

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

8. スレーブサーバーを再起動し、関連する設定を行う

MySQLサービスを再起動する

サービスmysqldを再起動

mysqlにログイン

mysql -uroot -p

メインサーバーに接続する

マスターをmaster_host='192.168.150.11'、master_user='root'、master_password='123456'、master_port=3306、master_log_file='master-bin.000001'、master_log_pos=334に変更します。

スレーブを起動

スレーブを開始

スレーブステータスを確認する

スレーブステータスを表示\G (セミコロンがないことに注意してください)

9. この時点で、マスター サーバーで関連データを追加および削除したり、スレーブ サーバーで関連ステータスを表示したりできます。

データベースに関する知識やその他の Java 関連の知識は、私のコード クラウドにアップロードされています。必要な場合は取得できます。

個人コードクラウドアドレス

上記は、MySQL マスタースレーブ レプリケーションの原理からインストールと構成の詳細まで、包括的な解説です。MySQL マスタースレーブ レプリケーションの詳細については、123WORDPRESS.COM の他の関連記事をご覧ください。

以下もご興味があるかもしれません:
  • MySQL マスタースレーブレプリケーションにおける重複キーの問題を修正する方法
  • MySql マスタースレーブレプリケーションメカニズムの包括的な分析
  • MySQL マスタースレーブレプリケーションと読み取り書き込み分離の詳細な説明
  • MYSQL データベース GTID はマスタースレーブレプリケーションを実現します (超便利)
  • MySql マスタースレーブレプリケーションの実装原理と構成
  • MySQL マスタースレーブレプリケーションの原理と注意点
  • MySQL マスタースレーブレプリケーションでエラーをスキップする方法
  • MySQL マスタースレーブレプリケーション構成プロセス
  • MySQL マスタースレーブレプリケーションのいくつかのレプリケーション方法の概要
  • MySQL マスタースレーブレプリケーション切断の一般的な修復方法

<<:  Zabbixは複数のmysqlプロセスの監視を実装します

>>:  vue で wangEditor を使用する方法と、データをエコーし​​てフォーカスを取得する方法

推薦する

CSS floatプロパティの詳細な説明

1. フローティングとは何ですか?フローティングは、その名の通り、浮遊することを意味します。要素がド...

CSS の 4 つのインポート方法と優先順位の簡単な分析

第一に: CSSを導入する4つの方法CSS を導入する方法には、インライン スタイル、埋め込みスタイ...

ノードにおけるhttpモジュールの使用と実行プロセス

ノードにおけるhttpの役割は何ですか? httpモジュールの役割は、サーバーの作成と記述を支援する...

MySQL の null と not null、null と空の値の違いの詳細な説明 ''''

MySQL を長い間使用してきた多くの人は、これら 2 つのフィールド属性の概念をまだよく理解して...

CSS3 で半透明の背景画像と不透明なコンテンツを実現する方法の例

以前のブログのログインページを作成していたときに、この問題に遭遇しました。突然、透明な背景画像と不透...

Dockerを使用してElasticsearchクラスターを素早くデプロイする方法

この記事では、 Dockerコンテナ ( docker-composeを使用してオーケストレーション...

Nginx+tomcat ロードバランシングクラスタの実装方法

実験環境は以下のとおりですここでは、4 台のサーバー (1 台の nginx、負荷用の 2 台の t...

反応自動構築ルーティングの実装

目次順序1. 集中ルーティング2. ファイルディレクトリ3. CompileRouterを作成する4...

MySQL InnoDB row_id 境界オーバーフロー検証方法の手順

背景クラスメートと row_id の境界問題について話し合ったので、ここで詳しく説明します。 Inn...

Webpack5-react スキャフォールディングをゼロから構築するための実装手順 (ソースコード付き)

目次ウェブパック5公式スタート建築ガイド構築を開始する依存する準備が完了したら、プロジェクトの構築を...

MySQL への接続時に発生する 1449 および 1045 例外の解決方法

MySQL への接続時に発生する 1449 および 1045 例外の解決方法 mysql 1449:...

HTML 固定タイトル列、タイトル ヘッダー テーブル固有の実装コード

コードをコピーコードは次のとおりです。 <!DOCTYPE html PUBLIC "...

中央のテキストの両側に水平線を描くためのCSS

1. vertical-align プロパティは次の効果を実現します。 vertical-alig...

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

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

Spark SQL の 4 つの一般的なデータ ソースの詳細な説明

汎用ロード/書き込みメソッドオプションを手動で指定するSpark SQL の DataFrame イ...