MySQLの設定がold_passwords=1になっている時にでくわすエラー
何年も前から運用されていたCentOS5.5のサーバー(さくらのVPS)にPHP5.6をインストールし、Cakephp3を動作させようとした。 その際、MySQLデータベースにうまく繋がらない問題が発生。
MySQLデータベースには専用ユーザーとデータベースは作成してある。ここからMigrationでテーブルを作成しようと、コマンドを実行すると以下のようにエラーで止まってしまう。
$ bin/cake migrations migrate Warning Error: PDO::__construct(): The server requested authentication method unknown to the client [mysql_old_password] in [/path/to/app/vendor/robmorgan/phinx/src/Phinx/Db/Adapter/MysqlAdapter.php, line 113]
エラーメッセージから調べてみる。
- MySQL :: MySQL 5.6 リファレンスマニュアル :: 6.1.2.4 MySQL でのパスワードハッシュ
- PHPのバージョンアップでDynamicMTMLが動作しなくなった場合の対処方法 | PowerCMS ブログ | PowerCMS - カスタマイズする CMS。
MySQL側で old_passwords
というオプションが有効になっているとPHP側とパスワードハッシュの方式が異なってしまってパスワードが復号できなくなる模様。もちろん、PHP側の方が新しい方式。
一時的にMySQL側の設定を変えてしまって、パスワードを生成しなおせばOKだった。
; MySQLにログイン $ mysql -u root -p ; 一時的に 'old_passwords' オプションを無効に。 mysql> SET @@session.old_passwords = 0; ; 41バイトのハッシュで該当ユーザーのパスワードを生成し直す mysql> SET PASSWORD FOR username@localhost = PASSWORD('NEW_PASSWORD');