ショウジンブログ

Learn as if you will live forever, Live as if you will die tomorrow.

お使いのサーバーのPHPではWordPressに必要なMySQL拡張を利用できないようです@Nginx

Sponsored Links

PHPのdate.timezoneがno value@Nginx」をやったせいかどうか分からないんですが、同じ環境にあるWordPressのサイトにアクセスしようとしたら以下の衝撃的なメッセージに遭遇しました。

お使いのサーバーの PHP では WordPress に必要な MySQL 拡張を利用できないようです。

けっこうたまげましたが、ちょっとググったらたくさんひっかかって来たのですぐ解決するかと、、思ったら甘かったです。

php.iniにextension=mysql.soが指定されてない、抜けてるんじゃないかってのが多かったんですが、php-mysql(PHPのMySQLモジュール)自体がごっそりなくなっていたのが原因でした。php.iniで「mysql」で検索すればすぐ気づいたんですが、まさか今まで問題なく動いていて、それらモジュールもあったのがまるごとなくなっているとは思わず、けっこうハマりました。

モジュールがないんだったらもうPHPからインストールし直そうということで、既存のPHPをyumでアンインストール。

$ sudo yum erase php*

アスタリスクをつけてPHP関係のパッケージも全て削除しました。(erase phpとerase php-commonでやってもよかったかも)

PHP以外の必要なパッケージもインストールし直しますが、php-fpmは標準のyumリポジトリにないそうなので追加します。(今回、以前にこれを自分はやっているので実際にはこの操作はしてませんが、一応メモ)

$ sudo rpm --import http://rpms.famillecollet.com/RPM-GPG-KEY-remi
$ sudo wget http://rpms.famillecollet.com/enterprise/remi-release-5.rpm
$ sudo wget http://dl.fedoraproject.org/pub/epel/5/i386/epel-release-5-4.noarch.rpm
$ sudo rpm -ivh epel-release-5-4.noarch.rpm remi-release-5.rpm

そして、remiリポジトリを使ってPHP本体、php-fpm、その他必要なパッケージ群をインストール。

$ sudo yum install php php-fpm php-devel php-cli php-xml php-mysql php-mbstring php-gd --enablerepo=remi

いくつか確認のための「y/N」メッセージが出ますが、どれもyをタイプして進めます。

Complete!となってインストールが完了したらphp-fpmを確認。

$ php-fpm -v
-bash: php-fpm: command not found

ないとおっしゃってますが(not found)、grepして確認すると存在しています。(php-fpm.x86_64)

$ yum list installed | grep php
php.x86_64                           5.4.13-1.el5.remi                 installed
php-cli.x86_64                       5.4.13-1.el5.remi                 installed
php-common.x86_64                    5.4.13-1.el5.remi                 installed
php-devel.x86_64                     5.4.13-1.el5.remi                 installed
php-fpm.x86_64                       5.4.13-1.el5.remi                 installed
php-gd.x86_64                        5.4.13-1.el5.remi                 installed
php-mbstring.x86_64                  5.4.13-1.el5.remi                 installed
php-mysql.x86_64                     5.4.13-1.el5.remi                 installed
php-pdo.x86_64                       5.4.13-1.el5.remi                 installed
php-pear.noarch                      1:1.4.9-8.el5                     installed
php-xml.x86_64

ということで、よしとして進みます。

php-fpmの設定ファイル「www.conf」を編集します。

/etc/php-fpm.d/www.conf

39行目の「apache」を「nginx」に。(実行ユーザをnginxに) 41行目の「apache」も「nginx」に。(実行グループをnginxに)

60行目の「dynamic」を「static」に。これはPHP-FPMのプロセス生成方法の指定。プロセス数を動的に増減させたいのであれば「dynamic」。設定したプロセス数で固定なら「static」。

70行目の「pm.max_children」の値を「5」に。前述のpmオプションをstaticにしたので、生成するプロセス数の指定をここでする。余裕があるようならこの値は調整すればいいようです。

php-fpmの設定が済んだので、php-fpmを起動・自動起動するように設定します。

$ sudo /sbin/service php-fpm start
php-fpm を起動中: [ OK ]
$ sudo /sbin/chkconfig php-fpm on

これでWordPressにアクセスしたら復活しました。

ようするに、MySQLのモジュール(php-mysql)がまるごと消失していたので、PHP本体も含めて、アンインストールしてからインストールをし直したら復旧したということでした。おかげで前日やったdate.timezoneの設定も再度する必要がありましたが。んー、しかに昨日のその作業が影響してたんでしょうか。やっぱりちゃんとひとつひとつ作業の記録を残しつつやっていかないと危険だなと再確認できたトラブルではありましたが。

nginxでPHPをFastCGI(php-fpm)で実行するについては

blog.showzine.co

こっちでも残してます。本エントリは若干端折っているので、初めてインストール、設定する場合はこっちのほうが参考になるかもしれません。

また、内容は書籍「ハイパフォーマンスHTTPサーバ Nginx入門」を参考にしています。

ハイパフォーマンスHTTPサーバ Nginx入門

ハイパフォーマンスHTTPサーバ Nginx入門