同サーバー上にて、別で運用しているWordPressサイトに突然ログインが出来なくなってしまいました。
どうせ、ログイン・パスワードが間違ってるんじゃね?
いや、何度、試してもあってます
保存しているパスワードでもログイン出来ないし・・
それに、パスワードが間違ってますとエラーも出てなくて、無反応なの?
だったら、一度、パスワードリセットしてみ!
パスワードをお忘れですか?をクリックして、登録したユーザーかメアド入れてポチっとな
ログイン出来ない症状
すると、「データベースパスワードのリセットキーを保存できませんでした。」とのエラーメッセージが・・
あ〜、これは、きっと前記「休日にバージョンアップ作業で久々にハマった」の後遺症なんだと、薄々感じました。
対策1 WordPressデバッグを有効にしてみる
通常はwp-config.phpにて、デバッグ機能はオフになっているので、有効にします。
デバッグが有効なら、ディスプレイ表示をせずに、ログとして記録する設定です。
#define('WP_DEBUG', false); define('WP_DEBUG', true); if (WP_DEBUG) { define('WP_DEBUG_LOG', true); define('WP_DEBUG_DISPLAY', false); @ini_set('display_errors',0); }
デバッグ機能を有効にしても、何の変化もなしでした。
対策2 MySQLでチェックしてみる
WordPressを運用しているサーバーにログインし、対象のデータベースをチェックし、必要なら修復を試みる
確認
$ mysqlcheck -c <db_name> -u root -p
修復
$ mysqlcheck -r <db_name> -u root -p
特に問題なし
対策3 データベース上のテーブルを直接変更してみる
私の場合は、Webminを使って、パスワードの変更を試みました。
phpmyadminでも可能ですが、パスワードはMD5ハッシュ値なので、そこだけ注意です。
Webmin上のサーバーからMySQLを選び、必要となるデータベース、テーブル(wp_users)を選択し、ログイン・パスワードのデータを表示させます。
「選択された行を編集」をクリックして、パスワードを変更
すると、更新が適用されずに下記のエラー
Got error -1 from storage engine
対策4 再度、コマンドラインで修復を試みる
対策2では、mysqlcheckを使ったが、データベース内に入り、直接、テーブルの修復を試みる。
$ mysql <db_name> -u root -p mysql> REPAIR TABLES wp_users;
| wp_db.wp_users | repair | note | The storage engine for the table doesn’t support repair |
どうやら、ストレージエンジンが InnoDB である DB はサポートされていないので、修復出来ないらしい
さらに、wp_usersを新規に作りなおしてみる
$ mysql <db_name> -u root -p mysql>CREATE TABLE wp_users_new LIKE wp_users; INSERT INTOwp_users_new SELECT * FROM wp_users;
はい、やはりダメでした。
ここで正常に新規のテーブルへ挿入できれば、古いテーブルを削除して、新しいテーブルの名前を戻せばOKです。
DROP TABLE wp_users; RENAME TABLE wp_users_new TO wp_users;
対策5 InnoDBの修復
テーブル破損で、対象のデータベースを再構築する必要が生じてきた。
前記で、MySQLの起動が、リカバリーモードを有効にしないと立ち上がらない事を考えると、InnoDBの不具合が起きているだろうとの事から、最悪の、データベース再構築で全入れ替えです。
この作業では、長文になるため、下記の記事を参考にし、割愛させていただきます。
参考記事
https://kb.plesk.com/jp/6586
具体的な手順は下記のようになります。
- mysql停止
- /var/lib/mysqlをバックアップ
- リカバリーモードでmysql起動
- 全データベースのバックアップ
- /var/lib/mysql内を削除
- リカバリーモードを無効にして、mysql再起動
- 全データベースをリストア
これで、リカバリーモードなしでMySQLが起動し、InnoDBも再構築されて、スッキリ復旧完了です。
まとめ
参考にした記事では、詳しく復旧の手順が記されており、今回のデータベース復旧に関して、大変参考になり、この場をお借りして感謝申し上げます。
WordPressにログイン出来ないと、投稿や管理すら出来なくなってしまい焦りますが、今回のように、普段Linux等に触れない方にとっては、かなり敷居が高い対策となってしまいます。
WordPressにおいては、データベースが本命ですので、バックアップは必ずとっておきましょう。
バックアップのプラグインもあるので、一度設定しておけば、サーバー内及びメールでも定期的にバックアップが送られてくるので、是非、設定しておくことをおすすめします。
また、データベースが壊れる以外にも、サーバー内のHDD,SSDが逝ってしまう事もありますので、必要なファイルもバックアップしておくと万全ですね。
コメント