古いMacからMAMPを個別に移行したら、phpMyAdminが起動しなくなった。
どうやらMySQLのユーザー/パスワードが不一致になってしまったようだ。
関連して他のエラーも発生したため、一連で対処した時の内容をメモ。
目次
どんな移行を行ったか
Time Machineで旧Macのバックアップを取得し、ファイルを丸ごとリストアしようとしたところ、、、ユーザーまで含めてまとめてのリストアになることを知り、急遽個別リストアに切り替えた。
当初はこれでうまく動いている風だったので、「なんて優秀!!」と感動していたら・・・
エラー概要
MAMPを起動し、ツール >phpMyAdmin と選択したら、以下のようなエラーが発生。
- MySQL サーバーに接続しようとしましたが拒否されました
- config.inc.phpのユーザー名かPWが一致しません
対象のファイルまで教えてくれているので、素直に「/Applications/MAMP/bin/phpMyAdmin/config.inc.php」を覗きにいくが、
1 2 3 4 5 |
cat -n /Applications/MAMP/bin/phpMyAdmin/config.inc.php [中略] 86 $cfg['Servers'][$i]['user'] = 'MySQL user'; // MySQL user 87 $cfg['Servers'][$i]['password'] = 'MySQL password'; // MySQL password (only needed [中略] |
どちらも正しいように見える。。。
対処方法
MySQLのユーザーのパスワード変更
DB直接覗きにいくしかないと思い、MySQLに直接ログインするも・・・
1 2 3 4 |
$ cd /Applications/MAMP/Library/bin $ ./mysql -u MySQL user -p Enter password: ERROR 1045 (28000): Access denied for user 'MySQL user'@'localhost' (using password: YES) |
phpMyAdminで出たエラーと同じエラーになる。
つーことはMySQL userのPW自体が移行によりなぜか変わった(もしくは不整合になった)ということだ。
ログインできないと話にならないので、ちょっと調べたところMySQLをセーフモードで起動するとPW無しでログインできることが判明。
1 |
$ ./mysqld_safe --skip-grant-tables --skip-networking |
常駐プロセスが動くので、別ターミナルでMySQLにログイン。
1 2 |
$ ./mysql mysql> |
ここまでできたら、PW変更するだけ。
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>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,password from user; +------------+-------------------------------------------+ | user | password | +------------+-------------------------------------------+ | MySQL user | *3hogehogehogehogehogehogehogehogehogehog | +------------+-------------------------------------------+ 1 row in set (0.00 sec) mysql>update user set authentication_string='PASSWORD' where user='MySQL user' Query OK, 1 row affected (0.00 sec) Rows matched: 1 Changed: 1 Warnings: 0 mysql> mysql> select user,password from user; +------------+-------------------------------------------+ | user | password | +------------+-------------------------------------------+ | MySQL user | *8hogehogehogehogehogehogehogehogehogehog | +------------+-------------------------------------------+ 1 row in set (0.00 sec) |
一度exit
して、先ほど変更したPWでログインできるか確認。
1 2 3 4 5 6 |
$ ./mysql -u MySQL user -p Enter password: Welcome to the MySQL monitor. Commands end with ; or \g. [中略] mysql> |
無事成功。
ちなみに、常駐プロセスが動いているターミナルの方はcontrol+cを押しても終了しなかったので、ウィンドウを閉じることでセッションをぶった切った。
正しい終了の仕方は不明。
今度はWebサイトが表示されなくなった
上記対策でphpMyAdminは起動するようになったが、今度はWebサイト自体が表示されなくなってしまった!
しかし、ちゃんとエラーハンドリングが聞いているらしく、
という旨のエラーメッセージを表示してくれる。ホント優秀。
wp-config.phpの設定値変更
ということで、wp-config.phpを覗きにいく。
SQL叩いている時も思ったが、passwordとかは暗号化されてるかなんかで見ても合っているのかどうかわからないので、上で変更した内容に合わせることにした。
1 2 3 4 5 6 |
$ cd /Applications/MAMP/htdocs/wordpress $ cat -n wp-config.php [中略] 34 /** MySQL データベースのパスワード */ 35 define('DB_PASSWORD', 'rNhogehogehoge'); [中略] |
上の35行目を新しいPWに編集。当然編集自体は平文でOKだが、保存すると勝手に暗号化されるっぽい。
MAMPの「サーバーを起動」でMySQLが上がってこない
これで復旧しただろと思いきや、今度はMAMPの「サーバーを起動」でMySQLだけいつまでたっても上がってこない状態になった。
Apacheは上がる。
どう考えても、MySQLをセーフモードで起動した手順が怪しいので、ps
コマンドでプロセスを確認してみると、MySQLのプロセスがいくつか動いていたので全部強制的にKILLしてやった。
復旧と原因の考察
上記の手順を経てようやく復旧&移行完了。
今回の原因って、多分移行したことでシステム領域に持ってる暗復号化キーが齟齬って、元は同じPWでも暗復号化結果が異なってしまいアンマッチになったんだろう。
最初にWebサイトは表示されたのに、phpMyAdminが起動しなかったのは、設定ファイルにPWを平文で持っているか暗号化された形で持っているかの違いだろう。(Webサイト側の設定ファイル(wp-config.php)は暗号化された形で持っているのでキーが変更になっても影響を受けなかった。phpMyAdminの設定ファイル(config.inc.php)は平文で持っているので、キーが齟齬ってしまうと暗号化結果が変わってしまうのでDBにアクセスできない。仮にそれが本当だとするとセキュリティ的にあまりよろしくない作りだけど。。。)
多分Time Machineで丸ごと移行したらキーまでセットで移行されるから起きないのかな??
まぁそうそうやることないのでこれ以上深追いはしないことにします。