PHP5.6のインストールを無事に終えて、WordPressにアクセスし当ブログが表示されるか確認したところエラーメッセージ「お使いのサーバーの PHP では WordPress に必要な MySQL 拡張を利用できないようです。」が表示されました。
phpMyAdminにもアクセスしたところ、こちらも同じメッセージでした。
PHPのインストールだけでは、どうやら足りないパッケージがあったようです。
MySQLのPHP拡張がインストールされているか確認します。
1 2 3 | # php -m | grep mysql mysql mysqli |
ちょっと、忘れましたが確かこの2つのモジュールが入っていたと思います。
しかし、エラーが表示される…。
調べると、PHP5.6でのデフォルトの拡張モジュールは「mysqlnd」となるようなのでインストールします。
1 2 3 4 5 6 7 8 9 10 11 | # yum install --disablerepo=* --enablerepo=remi-php56 php-mysql ~ 略 ~ Installed: php-mysqlnd.x86_64 0:5.6.14-1.el5.remi Dependency Installed: php-pdo.x86_64 0:5.6.14-1.el5.remi Complete! |
併せて、旧バージョンのPHPを削除した際にインストールされていたパッケージもインストールします。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | # yum install --disablerepo=* --enablerepo=remi-php56 php-mbstring ~ 略 ~ Installed: php-mbstring.x86_64 0:5.6.14-1.el5.remi Complete! # yum install --disablerepo=* --enablerepo=remi-php56 php-mcrypt ~ 略 ~ Installed: php-mcrypt.x86_64 0:5.6.14-1.el5.remi Complete! |
他にも、php-gd、php-lastも同様にインストールしました。
もう一度MySQLのPHP拡張の確認をします。
1 2 3 4 5 | # php -m | grep mysql mysql mysqli mysqlnd pdo_mysql |
追加されました。
httpdを再起動します。
1 2 3 4 | # /etc/init.d/httpd restart httpd を停止中: [ OK ] httpd を起動中: [Thu Oct 08 03:02:52 2015] [warn] module php5_module is already loaded, skipping [ OK ] |
今度は警告が出てしまいました。
「モジュールは既にロードされているからスキップしました。」というような内容で、要は二重起動しようとしているということです。
1 2 3 4 5 6 7 8 9 10 | # vi /etc/httpd/conf/httpd.conf LoadModule php5_module /usr/lib64/httpd/modules/libphp5.so # vi /etc/httpd/conf.d/php.conf #<IfModule prefork.c> # LoadModule php5_module modules/libphp5.so #</IfModule> |
1行目、6行目がファイル名で、その中にphp5_moduleがそれぞれロードされるようになっていたのが原因です。
どちらかをコメントアウトすると解決します。私は、上記8~10行目の通りphp.confの方をコメントアウトしました。
修正後、もう一度httpdを再起動します。
1 2 3 | # /etc/init.d/httpd restart httpd を停止中: [ OK ] httpd を起動中: [ OK ] |
問題なく起動しました。
これで解決したかと思い、再びWordPressにアクセスしました。
すると今度は、「データベース接続確立エラー」の大きい文字が…
phpMyAdminはというと、やはり同じメッセージが…
原因を特定するためにコマンドからMySQLでログインしてデータベース、ユーザ、テーブルを確認
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 | # mysql -u root -p Enter password: mysql> show databases; +--------------------+ | Database | +--------------------+ | information_schema | | iptablelog | | mysql | | performance_schema | | phpmyadmin | | snort_log | | wordpress | +--------------------+ 7 rows in set (0.00 sec) mysql> use mysql Reading table information for completion of table and column names You can turn off this feature to get a quicker startup with -A Database changed mysql> select User from user; +-----------------+ | User | +-----------------+ | iptblog_usr | | pma | | root | | snort | | wp | +-----------------+ 5 rows in set (0.04 sec) mysql> show tables; +---------------------------+ | Tables_in_mysql | +---------------------------+ | columns_priv | | db | | event | | func | | general_log | | help_category | | help_keyword | | help_relation | | help_topic | | host | | ndb_binlog_index | | plugin | | proc | | procs_priv | | proxies_priv | | servers | | slow_log | | tables_priv | | time_zone | | time_zone_leap_second | | time_zone_name | | time_zone_transition | | time_zone_transition_type | | user | +---------------------------+ 24 rows in set (0.00 sec) |
問題はなさそうなので、PHPから接続する方に原因が…
PHPのエラーログを確認してみます。
1 2 3 4 | # view /var/log/php_errors.log PHP Warning: mysqli_real_connect(): The server requested authentication method unknown to the client [mysql_old_password] in ~ PHP Warning: mysql_connect(): The server requested authentication method unknown to the client [mysql_old_password] in ~ |
ログが吐き出されていました。
内容を調べると、mysqlndをアップデートすると、古いパスワードハッシュ化方式(16byte)ではデータベースに接続できず、新しいパスワードハッシュ化方式(41byte)にする必要があるようです。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | # mysql -u root -p Enter password: mysql> use mysql Reading table information for completion of table and column names You can turn off this feature to get a quicker startup with -A Database changed mysql> select Host,User,Password from user; +-----------+-----------------+------------------+ | Host | User | Password | +-----------+-----------------+------------------+ | localhost | root | 2ea1cef21c3ecd4b | | localhost | wp | 67dd004d67da48bc | | localhost | iptblog_usr | 499a50d1322a0370 | | localhost | snort | 411aba2e21c0a948 | | localhost | pma | 0abe3fec4f3e9473 | +-----------+-----------------+------------------+ 6 rows in set (0.00 sec) |
確かに、パスワードが16文字となっています。
では、MySQLオプション設定ファイルとパスワードの変更です。
1 2 3 4 5 6 | # vi /etc/my.cnf ~ 略 ~ old_passwords=0 ~ 略 ~ |
4行目:old_passwords=1を上記のように書き換え、古いパスワードハッシュプラグインを無効にします。
次にパスワードの変更です。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | # mysql -u root -p Enter password: mysql> use mysql Reading table information for completion of table and column names You can turn off this feature to get a quicker startup with -A Database changed mysql> set password = password('xxxxxxxx'); Query OK, 0 rows affected (0.00 sec) mysql> set password for wp@localhost=password('xxxxxxxX'); Query OK, 0 rows affected (0.00 sec) mysql> select Host,User,Password from user; +-----------+-----------------+-------------------------------------------+ | Host | User | Password | +-----------+-----------------+-------------------------------------------+ | localhost | root | *CB10E1C9C2CE5D5B75F4D2775E7ADDC32AF8C4E9 | | localhost | wp | *E4D3BD8F0CD6B1695558C2A92BB8FF373D27E994 | | localhost | iptblog_usr | 499a50d1322a0370 | | localhost | snort | 411aba2e21c0a948 | | localhost | pma | 0abe3fec4f3e9473 | +-----------+-----------------+-------------------------------------------+ 6 rows in set (0.00 sec) |
9行目:rootユーザのパスワードを変更
12行目:rootでログインしているので、ユーザを指定してパスワードを変更
15行目:ユーザテーブルを確認
19,20行目:root及びwpユーザのPasswordの文字数が41文字と変更されている
同じようにすべてのユーザのパスワードを変更していきます。
MySQLと一応、httpdを再起動
1 2 3 4 5 6 | # /etc/init.d/mysqld restart mysqld を停止中: [ OK ] mysqld を起動中: [ OK ] # /etc/init.d/httpd restart httpd を停止中: [ OK ] httpd を起動中: [ OK ] |
これでもう解決したでしょう…
と、思いながらもちょっと不安気にアクセスしてみると…
やっとWordPressが表示されました。
phpMyAdminにもアクセスできました。
と、ここでもう一度ログを確認してみました。
PHPのエラーログは、異常なし…
そういえば、MySQLのログ見てないなぁ…
と思い見てみると、エラーが出てました。しかも、3年前ぐらいから…
でも今まで何でもなく使えているし…
調べてみると、
1 | [ERROR] Column count of mysql.db is wrong. Expected 22, found 20. Created with MySQL 50095, now running 50540. Please use mysql_upgrade to fix this error. |
というようなエラーが沢山出ていました。
「カラムが間違っているからmysql_upgradeコマンドを実行してください」という内容なのでコマンドを実行します。
1 2 | # mysql_upgrade -u root -p Enter password: |
もう一度、念のためmysqldを再起動し、ログを確認すると異常なく動いているようです。
これで、PHPのバージョンアップデートによる一連の障害が解決できました。
改めて、ログを確認する大切さを痛感しました…