MySQL のロードバランサーとして nginx を使用する方法

MySQL のロードバランサーとして nginx を使用する方法

注意: nginxのバージョンは1.9以上である必要があります。nginxをコンパイルするときに、--with-streamを追加する必要があります。

のように:

./configure --prefix=/Data/apps/nginx --with-http_stub_status_module --with-http_ssl_module --with-http_realip_module --with-http_image_filter_module --with-stream

知らせ

1. MySQL はデフォルトでポート 3306 を使用するため、MySQL 用の nginx tcp リバース プロキシを構成するときは、MySQL がリッスンするポートと同じポートを使用しないように注意してください。たとえば、私はポート 3307 を使用します。

2. ルートユーザーがMySQLにリモート接続できることを確認する

たとえば、データベース内のmysqlテーブルuser

nginx.conf

このコードは nginx.conf ファイルの末尾に追加されます。http{} 内には追加できないことに注意してください。

ストリーム{
/Data/apps/nginx/conf/stream/*.conf をインクルードします。
}

ストリーム/db.conf

サーバー{
listen 3307; #ポートはmysqlがリッスンするポートと同じにはできないことに注意してください proxy_pass db;
}
アップストリームDB{
サーバー 127.0.0.1:3306;
サーバー 192.168.233.1:3306;
}

nginxを再起動し、nginxがポート3307でリッスンしているかどうかを確認します。

PHPコードは次のようになります

#実際、新しい mysqli を作成するときは、ポート番号を nginx リバース プロキシによって設定されたポート番号と同じ番号に変更するだけで済みます。$mysqli = new mysqli('127.0.0.1','root','root','test',3307);

完全なPHPコード

<?php
クラスMysqlClass
{
private static $obj = NULL; //mysqlクラスオブジェクト public $host;
パブリック $database;
パブリック $user;
パブリック $pwd;
パブリック $port;
パブリック $mysqli = NULL;
//オブジェクトの複製を禁止する private function __clone(){}
// 外部インスタンス化を禁止する private function __construct($host="127.0.0.1",$database="test",$user="root",$pwd="root",$port="3307")
{
$this->ホスト = $host;
$this->データベース = $database;
$this->user = $user;
$this->pwd = $pwd;
ポート番号
$this->mysqli = $this->db_connect();
}
//mysqli 接続を取得するプライベート関数 db_​​connect()
{
$mysqli = 新しい mysqli($this->ホスト、$this->ユーザー、$this->パスワード、$this->データベース、$this->ポート);
($mysqli->connect_errnoの場合)
{
printf("接続に失敗しました: %s\n", $mysqli->connect_errno);
出口();
}
$mysqli->query("名前をutf8に設定");
$mysqli を返します。
}
//DBインスタンスを取得する public static function get_db()
{
if(self::$obj === NULL)
{
self::$obj = 新しい self();
}
self::$obj を返します。
}
パブリック関数 db_​​query($sql)
{
結果 = $this->mysqli->クエリ($sql);
$arr = [];
$row = $result->fetch_assoc() である間 {
$arr[] = $row;
}
$result->close();
mysqli をクローズします。
$arr を返します。
}
パブリック関数 db_​​insert()
{
}
パブリック関数 db_​​update()
{
}
パブリック関数__destruct() {
mysqli をクローズします。
}
}
MysqlClass::get_db() は、Mysql クラスから呼び出されます。
$r = $db->db_query("テーブルを表示");
var_dump($r);

結果

以上がこの記事の全内容です。皆様の勉強のお役に立てれば幸いです。また、123WORDPRESS.COM を応援していただければ幸いです。

以下もご興味があるかもしれません:
  • MySQLデュアルマシンホットスタンバイと負荷分散の実装手順の詳細説明
  • パフォーマンス負荷診断にMySQLシステムデータベースを使用する方法
  • MySQLで負荷分散を実装する方法
  • OneProxy に基づいて MySQL の読み取り/書き込み分離と負荷分散を実装する
  • mysql+mycat、負荷分散、マスタースレーブレプリケーション、読み取り/書き込み分離操作に基づく安定した高可用性クラスタを構築します。
  • PythonはMySQLの読み書き分離と負荷分散を実装します
  • MySQLの高可用性負荷分散構成を実装するためのKeepalived+HAProxy
  • MySQLのインデックスによって引き起こされるCPU負荷の急増を分析する
  • MYSQLデータベース接続の負荷容量を迅速に増やす方法
  • 負荷分散機能を備えたMySQLサーバクラスタの導入と実装
  • MySQL の CPU 負荷が高い問題のトラブルシューティング

<<:  Linux 上の Tomcat で MySQL にデータを挿入するときに中国語の文字化けが発生する問題を解決する

>>:  JS WebSocketを使用して簡単なチャットを実装する方法

推薦する

MySQL 起動失敗の問題とシナリオ分析

1. ワンストップソリューション1. 問題の分析と特定 # MySQL設定ファイルを見つけて、MyS...

vueプロジェクトは特定の領域に透かしを描くことを実現する

この記事では、Vueを使用して特定の領域に透かしを描く方法を紹介します。具体的な内容は次のとおりです...

JS を使用してファイルを操作する (FileReader は --node の fs を読み取ります)

目次JS はファイルを読み取る FileReader書類イベントとメソッド基本的な使い方イベント処理...

CSS により、子コンテナが親要素を超えます (子コンテナは親コンテナ内で浮動します)

序文場合によっては、次の図のような浮動効果の要件が必要になります。 成し遂げる標準的な通常の状況では...

ベンダー プレフィックス: ブラウザ エンジン プレフィックスが必要なのはなぜですか?

ベンダープレフィックスとは何ですか?ベンダー プレフィックス - ブラウザー エンジン プレフィック...

win2008R2 64 ビット システムでの mysql5.7.17 のインストールと構成の例

123WORDPRESS.COM では、さまざまな環境での MYSQL の他のバージョンのインストー...

Axiosは繰り返しのリクエストをキャンセル

目次序文1. リクエストをキャンセルする方法2. 重複リクエストの判定方法3. 繰り返しリクエストを...

CSS3 box-shadow プロパティの詳細な例

CSS3 - 影の追加(ボックスシャドウの使用) CSS3 - div またはテキストに影を追加する...

DockerでPython環境をパッケージ化するプロセスの詳細な説明

docker パッケージング Python 環境の手順は次のとおりです。 1 pip listの下に...

vue.js でよく使われる v 命令の解析

目次Vue でのモデルバインド表示の if の v-text の説明v-html: v-オンv-if...

ブラウザでビデオプレーヤーを実装するための基本的な考え方とコード

目次序文ブラウザにおけるオーディオとビデオに関する知識のまとめビデオエンコーディング包装形態オーディ...

JavaScript を使用して動的に生成されるテーブルの詳細な説明

*ページを作成する: 2つの入力ボックスとボタン*コードと手順/* 1. 入力行と列の値を取得する2...

Linux環境で環境変数を設定する方法

JDKダウンロードアドレス: http://www.oracle.com/technetwork/j...

CSS でのナビゲーション バーとドロップダウン メニューの実装

1. CSSナビゲーションバー(1)ナビゲーションバーの機能ナビゲーション バーを使いこなすことは、...

数千万のデータを扱うMySQLのページングクエリのパフォーマンスを最適化する

MySQL のデータ量が多い場合、制限ページングが使用されます。ページ数が増えると、クエリの効率が低...