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 の珍しいが便利なタグ

推薦する

FileZilla を使用して FTP ファイル サービスを素早く構築する方法

ファイルの保存とアクセスを容易にするために、FTPサービスが特別に構築されています。 FTP サーバ...

MySQL のインデックス障害の一般的なシナリオと回避方法

序文これまでにも、一部の SQL ステートメントを不適切に使用すると MySQL インデックスが失敗...

ServerManager の起動時にデータベースに接続できないエラーを解決する方法

Servermanager 起動時の接続データベース エラーmgrstart.batを実行しますエラ...

vite+vue3+element-plus プロジェクトをビルドする手順

viteを使用してvue3プロジェクトを構築するターミナルで次のコマンドを実行すると、Vite を使...

mysql5.7 でユーザーの初期パスワードを変更する方法

ユーザーが初めて MySQL データベースをインストールするとき、初期のルート パスワードを変更する...

Vueナンバープレート入力コンポーネントの使い方の詳しい説明

参考までに、シンプルなナンバープレート入力コンポーネント(vue)です。具体的な内容は次のとおりです...

JavaScript のディープコピーの落とし穴

序文以前、ある会社の面接に行ったとき、面接官から「オブジェクトを深くコピーするにはどうすればよいです...

MySQL パーティションテーブルの制限と制約の詳細な説明

ビルドを無効にするパーティション式では、次の構成はサポートされません。ストアドプロシージャ、ストアド...

複数のプロジェクトをデプロイする Docker nginx の例

前提条件1. ローカルコンピュータとサーバーにDockerがインストールされています。ダウンロード方...

MySQL 権限制御の詳細な説明

目次mysql 権限制御権限システムテーブル変更後にMySQLの権限を有効にする方法権限の付与と取り...

Vue Element-ui フォーム検証ルールの実装

目次1. はじめに2. ルール検証の入力モード2.1 サンプルコード2.2、フォーム項目2.3. 小...

MySQL ストアド プロシージャ (in、out、inout) の詳細な説明

1. はじめにバージョン 5.0 以降でサポートされています。特定の機能を実行するための SQL ス...

Zen Coding 簡単で素早いHTMLの書き方

禅コーディングテキストエディタプラグインです。 Zen Coding を使用するテキスト エディター...

JavaScriptがDOMツリーの構築にどのように影響するかについて詳しく説明します。

目次ドキュメント オブジェクト モデル (DOM) DOM と JavaScript DOMツリーの...