ウェブページの復旧

たいていのことを雑文の方でばかりやっているので気がつかなかったのだが、自分のウェブページが壊れていることを指摘された。

ウェブページの方はMODxを使っているのだが、どうやらデータベースが壊れているみたい。

現象として何が起きてたかと言えば、ウェブページにPHPのエラーが出ている。いろいろ調べてみると、どうやらアクセスログのテーブルが壊れているようだ。多分、度重なるサーバクラッシュの時に破壊されたのだろう。テーブル実体のファイルがない。壊れているのはログのテーブルだけなのだが、PHPのエラーメッセージがページに出てしまうので、何からおかしげなことになる。

じゃあ問題のテーブルをdropしてcreateすりゃいいじゃないかということで、まずはdropする。ところが、本体のファイルが存在してないせいか、「そんなテーブルはない」ということで、drop出来ない。じゃあ知らんぷりしてcreateすりゃいいかと言えば、管理情報にはあるものだから、「既にテーブルがあるぞ」と言う。まぁありがち。

じゃあ何でもいいからファイルを作ってしまえと、touchして実体ファイルっぽい名前のファイルを作るのだが、今度は「内容がおかしい」旨のエラー。どうせ消すんだから名前なんてどーでもいーだろー。じゃあと言うので、適当な実体ファイルをcpしてファイルを作るとdrop出来た。

そこでcreateするのだが、今度はcreateが出来ない。

ERROR 1005 (HY000) at line 147: Can't create table './ogochan_modx/modx_log_access.frm' (errno: 121)

という謎のエラー。いろいろ調べると、外部制約のあるテーブルを「後から」作ることは出来ないらしい。つまり、「制約」があるのだから、

テーブルを作ってからデータを入れる

という、ごく当然のことを要求しているわけだ。まぁ確かにそうだろう。後からテーブルを作ることを許したら、制約されてないデータを許したことになってしまう。消す分には問題ないということも、これで納得。

とは言え、問題のテーブルがないことには始まらない。そこで何をやったかと言えば、

一度バックアップを取って、
「あるべき場所」にcreate tableを入れる

ということに。幸い、古いバックアップがあったので、「あるべき場所」はわかる。この「あるべき場所」は、テーブルやデータの依存関係は解決されているはずだ。

つまり、最新のバックアップを取得し、それをエディタで開いて、古いバックアップを見ながら、当該テーブルをcreateするように書き加えるわけだ。

ついでにテーブル管理情報とかおかしくなっていたので、一度データベース自体を削除して、バックアップを復元する。

無事、全てのテーブルが復旧して、問題解決。

Google Reader Yahoo Facebook Twitter Digg FriendFeed Delicious Google Translate
This entry was posted on1月 18th, 2008 at 2:10:36. You can follow any responses to this entry through the RSS 2.0. You can Leave a response, or Trackback.

Leave a Reply

(Ctrl+Enter)

XHTML: You can use these tags: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

  • 私について

    ただのプログラマです、ハッカーではありません。

    秋葉で暮し秋葉で仕事してますが、秋葉系は嫌いです。物事を冷静に分析することは好きですが、ニヒリストは嫌いです。

    秋葉でちっこい会社をやってます。 こーゆーことがお仕事です。

    詳しいことは、自己紹介のページでも見て下さい。また、mixiの方でもいろいろわかるかも知れません。

    日経ITProに連載(生越昌己のオープンソースGTD)を書いています。「ちゃんと書いた文章」が読みたい人は、そっちを読む方がいいと思います。

  • このページについて

    ここは私の雑文の置き場です。WordPressを使っていますが、いわゆるblogのつもりで書いているわけではありません。「覗き見のできるチラ裏」くらいの意味しかありません。

    もしかしたら有用なことがあるかも知れません。あるいはむかつくことも書いてあるかもしれません。それらはみな「そんなものだ」と思っておくに留めましょう。

    コメントを書くのは構いませんが、「反論」の類はよそでやって下さい。同意する気のない人達と議論する気は全くありませんので、議論したければよそで勝手にやって下さい。

    と言っても、「読むな」「広めるな」というわけでもありません。リンク、ブクマの類は御自由に。

  • カテゴリ

  • 過去の記事

  • メタ情報