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 を使用する方法と、データをエコーし​​てフォーカスを取得する方法

推薦する

JavaScript の静的スコープと動的スコープを例を使って説明します

目次序文静的スコープと動的スコープ静的スコープ実行プロセス動的スコープ実行プロセスエクササイズ練習1...

MySQL killコマンドの実行原理の詳細な説明

目次キル命令実行原理命令実行特性クエリ実行の強制終了の原則接続終了の実装原則中断される可能性はありま...

Docker Compose マルチコンテナデプロイメントの実装

目次1. WordPressの導入1. 環境を整える(II) イメージを実行するDocker の作成...

Vueインスタンスで$refsを使用する際の注意点

開発の過程では、インスタンスの vm.$refs(this.$refs) を使用して、ref で登録...

preタグを自動的に折り返すためのサンプルコード

pre 要素は、フォーマット済みのテキストを定義します。 pre 要素で囲まれたテキストでは、通常、...

HTML 形式の JSON 出力の例 (テスト インターフェース)

JSON データを美しいインデント形式で表示するには、最も単純な JSON.stringify 関...

JS はランダム点呼システムを実装します

参考までに、JSを使用してランダム点呼システムを実装します。具体的な内容は次のとおりです。毎回の授業...

Linuxのテキスト処理コマンドsortの詳細な説明

テキストファイルの内容を並べ替える使用方法: ソート + オプション + ファイル名 (複数のファイ...

MySQL の異なるテーブル間でフィールドをコピーする

場合によっては、フィールドから別の新しいフィールドにデータの列全体をコピーする必要があります。これは...

LinuxにPHP7をインストールする方法の詳細な説明

Linux に PHP7 をインストールするにはどうすればいいですか? 1. 依存パッケージをインス...

MySQLソースコマンドの使い方の紹介

目次ネット上の質問から生まれた思考MySQL ソースコマンドネット上の質問から生まれた思考今日仕事中...

Linux は suid vim.basic ファイルを使用して権限昇格を実現します。

カリで再現まず、必要なvim.basicファイルにsuid権限を設定します。 chmod u+s /...

IE6 の select を div でカバーできないバグの解決方法

div を使用してマスクを作成したり、ポップアップ ウィンドウをシミュレートしたりします。ただし、I...

Ubuntu でディスク容量不足により MySQL が起動しない場合の解決策

序文最近、データベースのテーブルに 2 つのフィールドを追加しました。その後、ディスク容量不足のよう...

WeChatアプレットがシンプルな計算機機能を実装

WeChatアプレット:シンプルな計算機、参考までに、具体的な内容は次のとおりです。ミニプログラムに...