MySQL マスタースレーブレプリケーションと読み取り書き込み分離の詳細な説明

MySQL マスタースレーブレプリケーションと読み取り書き込み分離の詳細な説明

記事マインドマップ

ここに画像の説明を挿入

マスター/スレーブ レプリケーションと読み取り/書き込み分離を使用する理由は何ですか?

通常、マスター/スレーブ レプリケーションと読み取り/書き込み分離は一緒に使用されます。目的は単純で、データベースの同時パフォーマンスを向上させることです。
単一のマシンで、読み取りと書き込みの両方を 1 つの MySQL で実行する場合、パフォーマンスは確実に高くならないことが想像できます。
MySQL サーバーが 3 台あり、1 つのマスターが書き込み操作のみを担当し、2 つのスレーブが読み取り操作のみを担当する場合、パフォーマンスは大幅に向上するのではないでしょうか。
したがって、マスター/スレーブ レプリケーションと読み取り/書き込み分離は、データベースがより高い同時実行性をサポートできるように設計されています。
業務量が拡大するにつれて、MySQL を単一のマシンに導入すると、I/O 頻度が高くなりすぎます。
マスター/スレーブ レプリケーションと読み取り/書き込み分離を使用すると、データベースの可用性が向上します。

マスタースレーブ複製の原理

①マスターノードが挿入、更新、削除操作を実行すると、順番にバイナリログに書き込まれます。
②スレーブデータベースはマスターメインデータベースに接続し、マスターによって作成されるバイナリログダンプスレッドの数はスレーブの数と同じです。
③マスターノードのバイナリログが変更されると、バイナリログダンプスレッドがすべてのスレーブノードに通知します。
対応するバイナリログの内容をスレーブノードにプッシュします。
④バイナリログの内容を受け取った後、I/Oスレッドはその内容をローカルのリレーログに書き込みます。
⑤SQLスレッドはI/Oスレッドによって書き込まれたリレーログを読み取り、リレーログの内容に基づいてスレーブデータベースに対して対応する操作を実行します。

ここに画像の説明を挿入

マスタースレーブレプリケーションの実装方法

** 環境表示、デモ用に2台の仮想マシンを使用、IPはマスター(135)と136(スレーブ)

より直感的にわかるように、次の図は 3 台のマシンの効果 (データの変更: 挿入、更新、削除など) を示しています。

マスター構成

**コマンドラインを使用してmysqlを入力します:

> mysql -uroot -p //パスワードを入力> //192.168.190.136はスレーブマシンのIPアドレスです
> 'rootroot' によって識別される 'root'@'192.168.190.136' に *.* のレプリケーション スレーブ権限を付与します。 
// システム権限テーブルを更新します。更新されていない場合は、システムを再起動して有効にします。 
> 権限をフラッシュします。

スレーブマシンを構成する際には、上記で構成したユーザーが必要になります。

次に、mysql 設定ファイル /etc/my.cnf に設定を追加します。

vim /etc/my.cnf // [mysqld] の下に # データベース ID 番号を追加します。 1 の場合はマスターを意味します。マスターとスレーブの master_id が一致しません。
サーバーID=1
# バイナリログを有効にする
ログ bin = mysql bin
#同期する必要があるデータベース。設定されていない場合は、すべてのデータベースが同期されます binlog-do-db=test
#binlog ログが保持される日数。10 日以上経過したログはクリアされます。
#ファイルが多すぎて大きくなりすぎてディスク容量が不足するのを防ぎます。
ログ有効期限日数=10

設定が完了したら、mysqlを再起動します。

systemctl で mariadb を再起動します。

次にmysqlに入り、現在のbinlogログ情報を確認し、記録します。

mysql -uroot -p

show master status\G //\G は機能的にセミコロン ";" と同等なので、ここでセミコロンを書く必要はありません。

ここに画像の説明を挿入
**

スレーブ構成

スレーブ構成はよりシンプルです。スレーブ マシンは /etc/my.cnf に server-id を追加できます。

# 他の MySQL サービス ID と重複しないでください server-id=111

次に、mysql コマンドラインにログインします。次のSQLを入力してください

マスターを変更 
MASTER_HOST='192.168.190.135', //ホストIP
MASTER_USER='root', // 以前に作成したユーザーアカウント MASTER_PASSWORD='rootroot', // 以前に作成したユーザーパスワード MASTER_LOG_FILE='mysql-bin.000002', // マスターホストの binlog ログ名 MASTER_LOG_POS=245, // binlog ログオフセット位置
master_port=3306;//ポート

操作が成功したら、スレーブサービスを開始します

スレーブを起動します。

次に、起動が成功したかどうかを確認します。

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

次の情報が表示されます: (出力は長いため、一部のみが傍受されます)

ここに画像の説明を挿入

次にマスタースレーブレプリケーションをテストします

マスターホストで SQL を実行します。

テーブル「goods_brand」を作成します(
	`id` BIGINT (20) UNSIGNED NOT NULL auto_increment,
	`brand_name` VARCHAR (50) NOT NULL COMMENT 'ブランド名',
	`gmt_create` TIMESTAMP NOT NULL デフォルト CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP、
	`gmt_update` タイムスタンプ NULL ではない デフォルト '0000-00-00 00:00:00',
	主キー (`id`)
) ENGINE = INNODB DEFAULT CHARSET = utf8 COMMENT = 'Brand table';

実行が完了したら、ライブラリテーブルを更新して確認してみましょう。

ここに画像の説明を挿入

マスター マシンで実行しており、スレーブが直接それに同期していることがわかります。この時点で、mysql のマスター スレーブ同期は完了です。

読み書き分離に関しては、利用可能なソリューションと監視については次の章で記述し、リンクを補足します。

**注: この章の内容の一部は @Alibaba Cloud Developer から提供されています**

要約する

これで、MySQL マスター スレーブ レプリケーションと読み取り/書き込み分離についての写真とテキストによる説明は終了です。MySQL マスター スレーブ レプリケーションと読み取り/書き込み分離に関するより関連性の高いコンテンツについては、123WORDPRESS.COM の以前の記事を検索するか、次の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。

以下もご興味があるかもしれません:
  • MySQL マスタースレーブレプリケーション、読み取り/書き込み分離、バックアップとリカバリの詳細な説明
  • MySQL マスタースレーブレプリケーション 読み書き分離の設定方法の詳細説明
  • MySQL5.6 レプリケーション マスタースレーブレプリケーション(読み書き分離)構成 完全版
  • MySQL マスタースレーブレプリケーションの読み書き分離構造の詳細な説明
  • CentOS サーバー プラットフォームで MySQL マスター スレーブ レプリケーションと読み取り書き込み分離を構築する方法
  • MySQL のマスタースレーブレプリケーションと読み取り書き込み分離の原理と使用法の詳細な説明
  • MySQL マスタースレーブレプリケーションと読み取り書き込み分離の詳細な説明
  • MySQLのマスタースレーブレプリケーションと読み取り書き込み分離を理解するための記事

<<:  CSS3 で King of Glory マッチング人員読み込みページを実装する方法

>>:  XHTML の珍しいが便利なタグ

推薦する

Linux ディスク パーティションの実装の原理と方法の分析

覚えて: IDE ディスク: 最初のディスクは hda、2 番目のディスクは hdb...最初のディ...

Mac で Docker を使用して Oracle をデプロイする方法

Mac で Docker を使用して Oracle をデプロイする方法まずdockerをインストール...

Vueはシンプルなメモ帳機能を実装します

この記事では、参考までに、簡単なメモ帳機能を実装するためのVueの具体的なコードを紹介します。具体的...

MySql 5.6.35 winx64 インストール詳細チュートリアル

注: データベースのバージョンの問題により、プロジェクトの起動時にエラーは発生しませんでしたが、デー...

Vueでスワイパープラグインを使用する際の問題を解決する

デモを作成するときにこのプラグインを使用していくつか問題が発生したため、プラグインの使用方法といくつ...

Linux の総合システム監視ツール dstat の詳細な例

オールラウンドなシステム監視ツール dstat dstat は、vmstat、iostat、nets...

div が隠しテキストを超え、div 部分の向こうの CSS コードを隠します

隠れる前に:隠れた後: CS: ...コードをコピーコードは次のとおりです。オーバーフロー:非表示;...

MySQLは集計関数を使用して単一のテーブルをクエリします

集計関数データセットに作用し、そのデータセットの値を返します。 count: 統計結果のレコード数。...

MySQL の一般的なログの概要

序文: MySQL システムには、さまざまな種類のログが存在します。さまざまなログにはそれぞれ独自の...

JS オブジェクトのコピー (ディープ コピーとシャロー コピー)

目次1. 浅いコピー1. Object.assign(ターゲット、ソース、ソース...) 2. スプ...

MySQL データベース内の同じテーブルを同時にクエリして更新する方法

通常のプロジェクトでは、1 回の入札で同時にデータを更新および照会する必要があるという問題によく遭遇...

Layuiはログインインターフェース検証コードを実装します

この記事の例では、ログインインターフェース検証コードを実装するためのlayuiの具体的なコードを参考...

Vue3 の SetUp 関数のプロパティとコンテキスト パラメータの詳細な説明

1. setUp関数の最初のパラメータpropsセットアップ(プロパティ、コンテキスト){}最初のパ...

JSオブジェクトの走査順序の詳細な説明

JavaScript ではオブジェクトを走査する順序は固定されていないと聞いたことがある人もいるかも...

2列の水平タイムラインを実装するためのVueサンプルコード

目次1.コンポーネントtimelineH.vueを実装する2. コンポーネントの呼び出しこの記事では...