質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

1回答

2052閲覧

mysqlnd_msを有効化することでエラーが発生する

onigirimogumogu

総合スコア17

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

0グッド

0クリップ

投稿2016/09/26 07:35

web-webap-db構成のシステムが既にあります。
構成は下記のとおりです
・webサーバ CentOS7.2 nginxでproxy
・webapサーバ CentOS7.2 php5.6.24 apache2.4.6
・dbサーバ 2台 CentOS7.2 mysql5.6.32 レプリケーション構成

上記構成でwebapにmysqlnd_msを導入し、dbへのアクセスをwriteはmaster、readはslaveサーバへ振り分けを考えています。

上記実現のため下記を実施しました。

・mysqlndのインストール

yum install php-pecl-mysqlnd-ms.x86_64 php-pecl-mysqlnd-ms-devel.x86_64

・/etc/php.d/50-mysqlnd_ms.iniの編集

extension=mysqlnd_ms.so mysqlnd_ms.enable = 1 mysqlnd_ms.force_config_usage = 1 mysqlnd_ms.config_file = "/etc/mysqlnd_ms.json" ll be ignored. mysqlnd_ms.disable_rw_split = 1

・/etc/mysqlnd_ms.jsonの作成

{ "primary": { "master": { "master_1": { "host": "master-db", "port": "3306" } }, "slave": { } }, "standby": { "master": { "master_1": { "host": "slave-db", "port": "3306" } }, "slave": { } } }

上記のとおり設定し、画面を表示させると下記のエラーが表示されます。
※一部ファイル名を変換しています

httpd: PHP Warning: mysqli_connect(): (mysqlnd_ms) Exclusive usage of configuration enforced but did not find the correct INI file section (master-db) in /var/www/html/XXXX.php on line 200 httpd: PHP Warning: mysqli_connect(): (HY000/2000): (mysqlnd_ms) Exclusive usage of configuration enforced but did not find the correct INI file section in /var/www/html/XXXX.php on line 200 httpd: PHP Warning: mysqli_query() expects parameter 1 to be mysqli, boolean given in /var/www/html/XXXX.php on line 120

/var/www/html/XXXX.phpの200行目と120行目は下記のとおりです。

200行目 $this->database = mysqli_connect($dbhost,$configOptions['db_user_name'],$configOptions['db_password'],isset($configOptions['db_name'])?$configOptions['db_name']:'',$dbport); 120行目 $result = $suppress?@mysqli_query($this->database,$sql):mysqli_query($this->database,$sql);

XXXX.phpファイル内でパラメータが設定しているのでそれが/etc/mysqlnd_ms.jsonに足りないと考え/etc/mysqlnd_ms.jsonを下記のように修正しました。
・/etc/mysqlnd_ms.json

{ "primary": { "master": { "master_1": { "host": "master-db", "db": "dbname", "password": "pass", "user": "dbuser", "port": "3306" } }, "slave": { } }, "standby": { "master": { "master_1": { "host": "slave-db", "db": "dbname", "password": "pass", "user": "dbuser", "port": "3306" } }, "slave": { } } }

しかし、エラーメッセージは変わらずです。
なるべく現在のアプリケーションXXXX.phpは変更したくないのですが、上記エラーの解消方法をご教示ください。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

手元に環境が無いうえに mysqlnd_ms を使ったことがないため、マニュアルを見ただけの推測による回答となりますが、、

エラーメッセージを見るに、おそらく /var/www/html/XXXX.php 内の変数$dbhostの値に誤りがあります。
http://php.net/manual/en/mysqlnd-ms.plugin-ini-json.php#example-2058

で、以下のページのサンプルコードから類推すると、mysqli_connect関数の第1引数に指定する値は"master-db"ではなく"primary"でなければならないようです。
http://php.net/manual/ja/mysqlnd-ms.plugin-ini-json.php#mysqlnd-ms.plugin-ini-json.using-section


ところで、ご質問のエラーとは直接 関係ないと思いますが、ご提示の設定では

dbへのアクセスをwriteはmaster、readはslaveサーバへ振り分け

できないはずです。

なぜなら、/etc/php.d/50-mysqlnd_ms.ini 内で

mysqlnd_ms.disable_rw_split = 1

を指定しているためです。
http://php.net/manual/ja/mysqlnd-ms.configuration.php#ini.mysqlnd-ms.disable-rw-split

名前の頭が(enable ではなく)disable であることから、値を 1 にすることでこの機能が OFF になると思われます。

おそらく、HA構成のサンプルコードをを参考にされていませんか?

READ/WRITE スプリットの設定方法については、以下を参考にしてみてはいかがでしょうか?
https://blog.engineyard.com/2014/easy-read-write-splitting-php-mysqlnd#read-write-splitting

投稿2016/09/28 12:45

KiyoshiMotoki

総合スコア4791

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

onigirimogumogu

2016/10/04 09:08

回答いただきありがとうございます。 返信遅くなりました。すみません。 変数に誤りがある可能性が高いのはなんとなく認識しております。環境問題のようなのでもう少し検証してみます。 mysqlnd_ms.disable_rw_split = 1 についてはご指摘のとおりですね。ありがとうございます。 少し遅くなるかもしれませんが、解決できたらコメント追記します
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問