MovableType のデータベースを間違って消してしまったときの対処方法

実を言えば MT のデータベースをサックリ消してしまった経験は2度ほどになるわけですが、mysqldump でデータのバックアップを取っていないときは冷や汗もんです。だいだい消えるときに限ってバックアップなんぞは取っていないものです。

つい最近、会社の社内ナレッジブログをサックリと消しちゃいました。っつーか、mysql 上の不要データベースを削除メンテナンスしていました。随分とディスク容量空いたなぁ〜と思ったら、間違って全部消しちゃってました。

こりゃビックリ! Σ(゚Д゚;エーッ!

幸いほとんどのデータベースはスナップショットだったので復旧できたのですが、社内ブログだけがマスターでした。バックアップもないものはしょうがないので、今ある html からデータ復旧しました。ほとんど素の状態のテンプレ使っていたの汎用的かも?と思い、手順とスクリプトをさらしておきます。なんだか似た記事書いた記憶があるのに見つかりません。drk7.jp も一度まっさらに消したことがあるので、そのせいかもしれません。合掌。

- スポンサーリンク -


MovableType のデータベースを間違って消してしまったときの対処方法

  1. まず、手元に消しちゃったブログパーマリンクの html を集めて適当なフォルダへ格納します。データベースを消しちゃったブログの html も消しちゃったという場合は、また別途方法を書きます。
  2. でっちあげた html2db.pl というスクリプトをダウンロードします。ファイル名はリネームして下さい。
  3. perl html2db.pl フォルダ名 とコマンドラインから実行。Windows 上で実行するなら、ActivePerl とか別途インストールしておいて下さい。

    img02.jpg

    解析結果がずらーっと表示されると思います。
  4. MovableType 上にブログを新規作成する。設定値は前のを思い出しながら設定していって下さい。設定後、再構築をすると以前の html とか上書きされて消えて無くなってしまうので、旧コンテンツは別ディレクトリへバックアップしておく方がベター。
  5. import.txt というファイルが生成されるので、それを MovableType の import フォルダへ格納します。import フォルダが無い場合は、mt.cgi がある場所に import というフォルダを作成して下さい。

    img01.jpg

  6. MovableType の左サイドメニューの「読み込み/書き出し」をクリックします。
  7. 読み込んだエントリーの投稿者を「元の投稿者を保持する」を選択してエントリーの読込を押下します。別に投稿者が変更されてもいいならそのままボタンを押下すればいいです。

    img03.jpg

  8. 途中で不正終了すると非常にわかりづらいのですが、読み込んだ記事分進捗表示されなければ失敗しています。成功すると進捗表示後に取り込み件数とかが表示されるはずです。

    これが失敗例
    img04.jpg

    こちらが成功例
    img05.jpg

    ちなみに、失敗したら一度エントリーは全て削除してエラーから import.txt の該当箇所を修正してリトライを繰り返して下さい。
  9. 正常に復旧できたら、import.txt をサーバから削除しておきます。残したままで再度読み込みすると二重投稿状態になっちゃいます。
  10. tag.txt の内容を見ながら、手動で各エントリーに対してタグを復旧する。あきらめるも良し。
  11. テンプレートとか css を旧コンテンツから再構成してブログ全体を再構築して完了!

※注意1※
スクリプトは EUC で作成されているので、適宜ブログの文字コードに変換して実行する必要があるかもしれません。まぁそこら辺は手抜きです。生成される import.txt も同様に文字コードを手動で変換必要かもしれません。

※注意2※
以下のものは復旧できません。タグは手動で復旧は可能です。
「タグ」、「コメント者のメールアドレス、IP、URL」、「トラックバックのIP、ブログ名、概要」

※注意3※
テンプレートに手を加えている場合は、適宜スクリプト内の正規表現を変更してスクレイプ出来るようにして下さい。


一応、以上でブログが復旧すると思います。
MovableType の import/export のファイルフォーマットに関する情報は、Movable Type 3.2 マニュアル - Movable Typeの読み込みフォーマット にあります。一応一通りの情報に目を通しておいた方が良いと思われます。

- スポンサーリンク -