MySQLのマスタースレーブ構成を使用して、読み取りと書き込みの分離を実現し、データベースの負荷を軽減します。

MySQLのマスタースレーブ構成を使用して、読み取りと書き込みの分離を実現し、データベースの負荷を軽減します。

大規模な Web サイトでは、多数の同時アクセスを処理するために、Web サイト上の分散負荷分散以上のものが必要です。データビジネス層とデータアクセス層に関しては、従来のデータ構造がまだ使用されている場合、または 1 つのサーバーのみが使用されている場合、データベース接続操作が多すぎるためにデータベースがクラッシュすることは避けられず、データ損失の結果はさらに悲惨なものになります。このとき、データベース接続を減らす方法を検討します。一方では、優れたコードフレームワークを使用してコードを最適化し、me​​mcached などの優れたデータ キャッシュ テクノロジを採用します。十分な資金があれば、メイン データベースの負荷を分散するためにサーバー クラスターを想定することも間違いなく検討します。さて、今日の記事の主題に入りましょう。MySQL マスター/スレーブ構成を使用して、読み取りと書き込みの分離を実現し、データベースの負荷を軽減します。この方法は最近多くのウェブサイトで使用されており、目新しいものではありません。今日は参考までにまとめておきます。

概要:マスター サーバー (win8.1 システム、IP: 192.168.0.104) と 2 つのスレーブ サーバー (仮想マシン - 1 つは Ubuntu、もう 1 つは Windows Server 2003) をセットアップします。

原則:マスター サーバーは Web サイトの非クエリ操作を担当し、スレーブ サーバーはクエリ操作を担当します。ユーザーは、Web サイトの機能モデルに従って固定された方法でスレーブ サーバーにアクセスするか、プールまたはキューを記述して、リクエストに対してスレーブ サーバーの接続を自由に割り当てることができます。マスター サーバーとスレーブ サーバーは、MySQL バイナリ ログ ファイルを使用してデータの同期を実現します。バイナリ ログはマスター サーバーによって生成され、スレーブ サーバーは応答して同期されたデータベースを取得します。

具体的な実装:

1. マスター サーバーとスレーブ サーバーの両方に MySQL データベースをインストールします。Windows システムには mysql_5.5.25.msi バージョンをインストールし、Ubuntu には mysql-5.6.22-linux-glibc2.5-i686.tar をインストールしました。

Windows への MySQL のインストールについては、地球上のほとんどの人がその方法を知っているはずなので、ここでは説明しません。 Ubuntu への MySQL のインストールについて少しお話しします。オンラインでダウンロードしてインストールするのではなく、オフラインでインストールすることをお勧めします。 https://www.jb51.net/article/157282.htm を参考にしてください。この人が兄弟か姉妹かは分かりませんが、とてもよく書いていて、これに従ってインストールできます。インストール中にいくつかの問題が発生する可能性があります。次の解決策を参照してください。

(1) rootユーザーとしてログインしていない場合は、su - rootを使用してインストール時にrootユーザーに切り替えることをお勧めします。この方法により、常にsudoを使用する必要がなくなります。

(2)解凍したmysqlフォルダを保存します。フォルダ名をmysqlに変更するのが最善です。

(3) ./support-files/mysql.server start で MySQL を起動すると、警告が表示される場合があります。中国語の意味は、読み取りファイルを実行するサービスを起動したときに、my.cnf ファイルが無視されたということです。これは、my.cnf のファイル権限に問題があるためです。MySQL はファイルを危険と見なし、実行しません。ただし、mysql は正常に起動します。ただし、次の構成でサーバー パラメータから my.cnf ファイルを変更すると、ファイルは変更されていることがわかりますが、サービスを再起動すると、変更された構成は実行されず、一覧表示すると、mysql フォルダーに .my.cnf.swp などの中間ファイルが多数見つかります。これは、MySQL が起動時に my.cnf を読み取らないためです。この時点で、my.cnfのファイル権限をmy_new.cnfと同じ権限に変更するだけです。コマンド:chmod 644 my.cnfはOKです。

(4) Ubuntu にはドキュメントの内容を変更するための Vim がありません。Vim をインストールするのが最善です (apt-get install vim)。そうしないと、おそらくおかしくなります。

この時点で、MySQL がインストールされているはずです。

2. マスターサーバーを構成する

(1)マスターMySQLサーバー上にユーザー「repl」を作成し、他のスレーブサーバーがマスターサーバーにリモートアクセスし、このユーザーを介してバイナリログを読み取ってデータ同期を実現できるようにします。

(2)MySQLインストールフォルダを見つけて、my.Iniファイルを変更します。 MySQL にはいくつかのログ記録方法がありますが、今日はそれに焦点を当てていません。バイナリ ログ log-bin を開始するだけです。

[mysqld]の下に次のコード行を追加します。

(3)ログを見る

mysql> マスターステータスを表示します。
+-------------------+----------+--------------+------------------+
| ファイル | 位置 | Binlog_Do_DB | Binlog_Ignore_DB |
+-------------------+----------+--------------+------------------+
| マスターbin.000001 | 1285 | | |
+-------------------+----------+--------------+------------------+
セット内の 1 行 (0.00 秒)

MySQLサービスを再起動する

3. スレーブサーバーを構成する (Windows)

(1)MySQLのインストールフォルダを見つけて、my.iniファイルを変更します。[mysqld]の下に次のコード行を追加します。

MySQLサービスを再起動する

(2)マスターへの接続

マスターをmaster_host='192.168.0.104'に変更します。//マスターサーバーIP
マスターポート=3306、
マスターユーザー='repl',
マスターパスワード = 'mysql'、 
master_log_file='master-bin.000001', //マスターサーバーによって生成されたログ master_log_pos=0;

(3)スレーブを起動する

スレーブを起動します。

4. スレーブサーバー (Ubuntu)

(1)MySQLインストールフォルダを見つけてmy.cnfファイルを変更します。vim my.cnf

(2)./support-files/myql.server restartでMySQLサービスを再起動し、./bin/mysqlでMySQLコマンドウィンドウに入ります。

(3)マスターへの接続

マスターをmaster_host='192.168.0.104'に変更します。//マスターサーバーIP
マスターポート=3306、
マスターユーザー='repl',
マスターパスワード = 'mysql'、 
master_log_file='master-bin.000001', //マスターサーバーによって生成されたログ master_log_pos=0;

(4)スレーブを起動する

スレーブを起動します。

これですべての設定が完了しました。これでマスター MySQL でテストできます。マスター MySQL のすべての操作ログを監視しているため、マスター サーバーのデータベースを変更する操作はすべてスレーブ サーバーに同期されます。試すためにデータベースとテーブルを作成します。 。

要約する

以上がこの記事の全内容です。この記事の内容が皆様の勉強や仕事に何らかの参考学習価値をもたらすことを願います。123WORDPRESS.COM をご愛顧いただき、誠にありがとうございます。これについてもっと知りたい場合は、次のリンクをご覧ください。

以下もご興味があるかもしれません:
  • Linux ベースの MySQL マスター スレーブ構成の全プロセスを記録する
  • Windows での MySQL データベースのマスター/スレーブ構成チュートリアル
  • MySQL5.7 マスタースレーブ構成例の分析
  • Docker mysql マスタースレーブ構成の詳細と例
  • MySQL マスタースレーブ構成の学習ノート

<<:  H5ウェイクアップアプリの実装方法と注意点のまとめ

>>:  Linux viコマンドの知識ポイントと使い方のまとめ

推薦する

Vue のライフサイクルとフック関数の詳細な説明と典型的な面接の質問

目次1. Vue ライフサイクル2. フック機能2.1 4つの段階と8つの方法に分かれています。 2...

Svelte の Defer Transition を Vue で実装する方法

最近、Rich Harris の <Rethinking Reactivity> ビデオ...

MySQLにログインする際のエラー「ERROR 1045 (28000)」を解決する方法

今日はサーバーにログインして、データベース内のいくつかのものを変更する準備をしました。しかし、パスワ...

子要素の margin-top によって親要素が移動する問題の解決方法

問題の説明今日、ページ スタイルを変更していたときに、子要素にmargin-top設定したのに、子要...

jsイベント委譲の詳細な説明

1. 各関数はオブジェクトであり、メモリを占有します。メモリ内のオブジェクトが増えるほど、パフォーマ...

Linux コマンドラインで他のユーザーと通信する方法

Linux のコマンドラインで他のユーザーにメッセージを送信するのは簡単です。これを行うコマンドは多...

ウェブサイトのユーザビリティを向上させる10のヒント

企業の Web サイト、個人のブログ、ショッピング Web サイト、ゲーム Web サイトなど、どの...

MySQL トランザクション分離レベルの表示と変更の例

トランザクション分離レベルを確認するMySQL では、'%tx_isolation%'...

純粋な CSS でフォ​​ーム検証を実装するためのサンプル コード

日常業務において、フォームの検証は非常に一般的な設計要件です。ログイン ボックスや登録ボックス、アン...

Linux におけるシステム入出力管理の詳細な説明

システムの入力と出力の管理1. システムの入力と出力を理解するLinuxシステムでは、1は正しい出力...

Brotli圧縮アルゴリズムを有効にするNginxの実装プロセスの詳細な説明

序文Web アプリケーションでは、トラフィックを節約し、転送データのサイズを縮小し、転送効率を向上さ...

Vuex データの永続性を実装するためのアイデアとコード

vuexとはvuex: vue.js専用に開発された状態管理ツールで、すべてのコンポーネントの状態を...

Mac MySQL のルートパスワードをリセットするチュートリアル

免責事項:このパスワード リセット方法は、Homebrew によってインストールされた MySQL ...

Dockerfile の一般的なコマンドの概要

構文の構成: 1 注釈情報2 コマンド --- パラメータ [通常は大文字 | 実際には大文字と小文...