当ブログはInstantWordpressで構築したローカル環境(WindowsPC)でいろいろ検証してから本番サーバー上で変更やアップデートをしているのですが、先日何の前触れも無く、ローカル環境のWordpressへログインできなくなりました。
InstantWPのトップページからどこへ入ろうとしても
403 Forbidden
だの、
Error Establishing a Database
だの、
MySQLに接続できませんでした。
だのと言われて先へ進まない。
ローカル環境とは言え、ゾッとする話です。
resmon.exeで見るとApacheやMySQLのプロセス自体は生きているので、ググったところ文字通りデータベースが何らかの理由で壊れた模様。
何らかの理由でっていうのは、星の数ほど原因があるので特定できないし、エンドユーザーに教えて意味のある情報なんぞネェってことですね。
ググると解決方法もそれなりにヒットするんですが、ローカル環境のInstantWPで発生した事例ではなく、サーバー環境の事例ばっかり上位に現れます。
(php.iniのprotocolを定義しろってヤツね)
もちろんこういうトラブル自体、遭遇したら最後「おま環」なんで、高確率で再インストールコースなんですが、私の事例の場合運良くネットの検索結果から復旧に至りました。
自分の場合に効いた解決方法は海外のサイトにありました。
How to Fix the Error Establishing a Database Connection in WordPress
実際にやったのは、上のサイトに英文で書いてあるんですが次のような手順です。
wp-config.phpに記述を追加
wp-config.phpをエディタで開き、”That’s all, stop editing! Happy blogging”という記述の直前に、以下の行を追記します。
define('WP_ALLOW_REPAIR', true);
データベース修復用phpを開く
InstantWPを起動した状態で、以下のアドレスをブラウザで開きます。
http://www.yoursite.com/wp-admin/maint/repair.php
http://www.yoursite.com/ の部分は、ローカル環境であれば恐らく 127.0.0.1 から始まるアドレスで、InstantWPを起動した際のアドレスから類推できます。
実際ローカルPCのInstantWPをインストールしたフォルダに /wp-admin/maint/repair.php は存在しているはずですから、そこにブラウザからアクセスできれば良いです。
後は、repair.php を開いたページにある Repair Database ボタンを押します。
しばらく経って、修復が完了するとログが表示されます。
ここまで来たら、後は祈りを捧げてInstantWPの起動ページからいつも通りログインしてみましょう。
運が良ければ修復が成功し、ログインできるようになっています。
WordPressのダッシュボードも、いつも通り復活しています。
何でデータベースが壊れたのか分からないが、InstantWPがいつ終了しているのか怪しい気がする
ローカルPCにあるデータベースが壊れたとか、ロック状態のままになっていたとか言うのが今回の原因だとしたら、何故それが起きたのか?
どうやら、InstantWPを起動した時に開くブラウザをIE以外にすると、ブラウザを閉じてもInstantWPが終了しなくなる、というバグ臭い挙動がある模様。
IEとかブラウザとして使い物にならない糞なので、私はChromeを標準にしており、当然InstantWPの起動ブラウザもChromeになっているわけですが、確かにブラウザを閉じようが、InstantWP、Apache、MySQLのプロセスは残ったままになってます。
これは危なっかしい事この上ないので、手動でInstantWP関連のプロセスを全て終了させるバッチファイルを書く事にします。
taskkill /F /IM iwpserver.exe /T
InstantWPを終了したい場合は、ブラウザを閉じた上で、この1行を書いたバッチを実行すれば関連するプロセスも綺麗さっぱり落としてくれます。