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を使用して簡単なチャットを実装する方法

推薦する

Docker-compose は Docker プライベート ウェアハウスのステップを迅速に構築します

docker-compose.ymlを作成し、次の内容を入力します。 バージョン: '3&#...

VMware Workstation Pro でサーバー仮想マシンを構築する (グラフィック チュートリアル)

私が使用している VMware Workstation Pro のバージョンは次のとおりです。 1....

uniapp プロジェクトで MQTT を使用する方法

目次1. uniappプラグインマーケットのリファレンスプラグイン2. 具体的な導入プロセス1. m...

LINUX ポートが占有されているかどうかを確認します

ポートが占有されているかどうかは、これまで一度もわかりませんでした。多くの人に尋ねて、ようやくわかり...

フレックスレイアウトとposition:absolute/fixedの競合の詳細な説明

以前、プロジェクトを開発しているときに、flex レイアウトと position:absolute/...

CSS で実現される HTML 背景色のグラデーション

エフェクトのスクリーンショット:実装コード:コードをコピーコードは次のとおりです。 <!DOC...

Docker Consul の概要とクラスター環境構築手順(グラフィカルな説明)

目次1. Dockerコンサルの概要2. nginxとconsulをベースにした自動検出と高可用性の...

入力テキストボックスの入力実装プロパティを無効にする

今日は、開発でよく使われる、非常に便利な HTML タグをいくつかまとめてみたいと思います。これらの...

CSS3 を使用した背景ぼかし効果の 3 つの例

導入から始めず、いきなり本題に入りましょう。通常の背景ぼかし効果は次のとおりです。 プロパティを使用...

javascript 入力画像のアップロードとプレビュー、FileReader プレビュー画像

FileReader は、フロントエンドのファイル処理、特に画像処理にとって重要な API です。画...

JavaScript の寄生的構成継承についての簡単な説明

コンポジション継承組み合わせ継承は、疑似古典的継承とも呼ばれます。これは、昨日説明したプロトタイプ ...

Vue は携帯電話の認証コードによるログインを実装します

この記事では、携帯電話認証コードログインを実装するためのVueの具体的なコードを参考までに共有します...

Iframe 適応高さコードに関する 3 つの議論

B/S システム インターフェースを構築する場合、メイン ページ index.html 内に他のペー...

MySQL 5.7.23 解凍バージョンのインストールチュートリアル(画像とテキスト付き)

MySQLインストーラをダウンロードする公式ダウンロードアドレス: http://dev.mysq...

Mysql マルチテーブル結合クエリの実行の詳細について簡単に説明します。

まず、このブログのケースデモンストレーション テーブルを作成します。 create table a(...