PHP-5.6 に更新したらMySQL DBに接続できなくなった
July 6, 2015 – 1:32 pm前回エントリーでPHP-5.6.10にアップグレードしたことを書いた。困ったことに、これが災いしてMySQL DBへの接続ができなくなってしまい、このブログの公開にも支障をきたしてしまった。
障害の発生は、PHP-5.4以降登場したMySQL向けのクライアントライブラリphp-mysqlndが導入・使用されたことによる。
対応するためにとった措置についてメモしておく。
障害の内容:
前回Les RPM de Remi 提供のyum Repository追加とそれによる php-5.6.10のRPMアップデートにおいては、冒頭に書いたように、MySQLへの接続を行うクライアントライブラリがphp-5.3以前のphp-mysqlに代わりphp-mysqlndとなった。今回現れた障害は、この変更による「副作用」のようだ(表面的な理解のみ)。
Database connection fialed: mysqlnd cannot connect to MySQL 4.1+ using the old insecure authentication. Please use an administration tool to reset your password with the command SET PASSWORD = PASSWORD(‘your_existing_password’).
This will store a new, and more secure, hash value in mysql.user. If this user is used in other scripts executed by PHP 5.2 or earlier you might need to remove the old-passwords flag from your my.cnf file.
このメッセージの示すところは、MySQLのいmysql userのパスワードに対応するhash値として採用されるものが mysqlndでは従来の14ビット長から41ビット長になり、認証方法がよりセキュアなものに変更されているということのだ。
hash値は最初にパスワードの(再)設定に際してセットされるので、[SET PASSWORD]コマンドを使って再設定してやればよい、ということのようだ。
対応措置:
Mysql コマンド実行時のログを以下に示す。
mysql> UPDATE mysql.user SET Password = PASSWORD("your_password") WHERE User = "user_name" limit 1; Query OK, 1 row affected (0.00 sec) Rows matched: 1 Changed: 1 Warnings: 0 mysql> SELECT LENGTH(Password) FROM mysql.user WHERE User = "user_name"; +------------------+ | LENGTH(Password) | +------------------+ | 41 | +------------------+ 1 row in set (0.00 sec) mysql> FLUSH PRIVILEGES; Query OK, 0 rows affected (0.03 sec)