WordPress : データベース破損から復旧しました
昨日、当ブログ「Hinemosu」のデータベース情報が破損し、一時的に繋がりにくい状態になっていました。
なんとか復旧することが出来たので、流れをメモっておこうと思います。
サーバ環境など
さくらのVPS 2GBにnginx + fast-cgi on Ubuntuで環境を構築。
WordPress 3.4.1-ja、自作テーマ、MySQL 5.1.63-0ubuntu0.10.04.1を使用。データベースはWordPress専用で、35MBほど使ってます。
使っているプラグインを羅列すると"Akismet"、"Disqus Comment System"、"Google XML Sitemaps"、"Jetpack by WordPress.com"、"MO Cache"、"Portable phpMyAdmin"、"Secure WordPress"、"Simple Login Lockdown"、"Stats API Key"、"SyntaxHighlighter Evolved"、"Theme-Check"、"Wordpress.com Stats Helper"、"WP-Cron Dashboard"、"WP-PageNavi"、"WP Memcached Manager"、"WP Multibyte Patch"、"WP Super Cache"の17個。
ドロップインのプラグインは、"advanced-cache.php"、"db-error.php"、"object-cache.php"、"APC Object Cache"となっています。
データベース破損の発生状況
うろ覚えの記憶を辿って、データベース破損の発生状況をメモっておくと…
- WordPress管理画面の「ユーザー」を開こうとしたところ、WordPressが無応答になる
- SSHで繋いでnginxを再起動して見るも状況に変化なし。
- VPSの管理コンソールからサーバ再起動を実行。
- WordPressがデータベース接続エラー(HTTP 503)を表示。以降、自然復旧せず。
- DB接続エラー中もnginxなど他サービスは動いている。
感覚的には「ユーザー」をマウスオーバーしたタイミングで発生したけど、実際の発生原因・タイミングは良く分かっていません。
データベース復旧までの流れ
データベース復旧までにやったことをツラツラとメモ。
ファイルのバックアップ
ファイルシステムは生きているので、SFTPでログインしファイルのバックアップを実行。
サーバ完全クラッシュなど、最悪の状況を考慮しつつ、下記の順にバックアップを行った。
- WP Super Cacheのキャッシュフォルダ
- WordPressのアップロードフォルダ
- サイト全体
キャッシュフォルダのバックアップは自分では気がつかなかった。アドバイスをくれた なつき( @Stocker_jp ) さんに感謝です。
mysqldump コマンドに失敗
mysqldump コマンドでデータベースのバックアップを試みるも、DB破損エラーが表示される
$ mysqldump DB_NAME -u USER -p > BACKUP_FILE Enter password: mysqldump: Got error: 144: Table './DB_NAME/wp_options' is marked as crashed and last (automatic?) repair failed when using LOCK TABLES
MySQLのREPAIR TABLEコマンドを実行
MySQLコンソールから、REPAIR TABLEコマンドを実行し、データベースの復旧を試みる。
$mysql -u USER -p mysql> use DB_NAME Database changed mysql> repair table wp_options; +--------------------+--------+----------+----------------------------------------+ | Table | Op | Msg_type | Msg_text | +--------------------+--------+----------+----------------------------------------+ | DB_NAME.wp_options | repair | warning | Number of rows changed from 433 to 429 | | DB_NAME.wp_options | repair | status | OK | +--------------------+--------+----------+----------------------------------------+ 2 rows in set (0.04 sec) mysql>
データベースが復旧したようだ!
その後の流れ
mysqldumpでデータベースをバックアップ。
なんだかWordPressの動きがおかしいので、試しにプラグインフォルダを削除したところ正常に動き始める。
1つずつプラグインを戻してみたが、不具合が再現しないので正常復旧と見なす。キャッシュが悪さしたのか?
あとがき
バックアップ重要。
定期的にバックアップを取っていれば、ここまで慌てることはなかったハズ。最近ちょっとバックアップをサボってたから、余計に慌ててしまったんだよね…
これを機に、cronなりWordPressプラグインを活用し、定期的にバックアップを取る習慣を付けようと思いました。
ディスカッション
コメント一覧
まだ、コメントがありません