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

推薦する

FileZilla 425 FTP に接続できない (Alibaba クラウド サーバー) の解決策

Alibaba Cloud ServerがFTPに接続できないFileZilla 425 データ接続...

Vueデータ割り当て問題の解決

私が長い間遭遇してきた問題を要約してみましょう。プロジェクトでは、フロントエンドをレンダリングするた...

純粋なHTML+CSSでタイピング効果を実現

この記事は主に、一定の参考値を持つ純粋な HTML + CSS によって実現されるタイピング効果を紹...

JavaScript での実行コンテキストと実行スタックの例の説明

JavaScript - 原則シリーズ日常の開発では、既存のプロジェクトを引き継ぐときは常に、まず他...

リモート Linux システムでポートが開いているかどうかを確認する 3 つの方法

これは、Linux 管理者だけでなく、私たち全員にとって非常に重要なトピックです。つまり、IT イン...

EclipseでTomcatを作成する原理の詳細な説明

ローカルEclipse上にTomcatサーバーを作成する場合、 tomcaインストールディレクトリの...

React + Threejs + Swiper パノラマ効果を実現するための完全なコード

パノラマビュー効果を見てみましょう: 住所を表示スクリーンショット: 体験してみると、周囲の環境がぐ...

Vue ページ内の公開マルチタイプ添付画像アップロード領域と適用可能な折りたたみパネル (サンプルコード)

フロントエンド プロジェクトでは、添付ファイルのアップロードは非常に一般的な機能であり、ほぼすべての...

JavaScript Promise の徹底解説

目次1. Promise とは何ですか? 2. なぜ Promise が存在するのでしょうか? 3つ...

MySQLインストール後のデフォルトデータベースの役割の詳細な説明

MySQL を学習すると、インストール後にいくつかのデフォルトのデータベースが付属していることに気付...

Docker で Let's Encrypt から永久無料 SSL 証明書を取得する方法

1. 原因公式の cerbot は面倒すぎます。野生の成長よりもさらに悪い acme.sh の使用は...

MySQL ストアド プロシージャで case ステートメントを使用する詳細な例

この記事では、例を使用して、MySQL ストアド プロシージャでの case ステートメントの使用方...

動的な背景グラデーション効果を実現するCSS3

CSS3 を学ぶということは、新しい機能と基本的な理論に慣れることを意味します。この記事では、ケー...

CSS3 の Flex レイアウトの詳細な分析

Flexbox レイアウト モジュールは、コンテナー内のスペースをより効率的に配分する方法を提供する...

dockerがredisを再起動するとmysqlデータが失われる問題を解決する

公式ドキュメント:したがって、mysql は次のように起動する必要があります。 docker run...