Movable Type(以降、MT)で、Webサーバーを移行する場合、標準データベースのBerkeley DB(以降、DB)なら、別サーバーにそのままコピーして使うことが可能です(その際、前のサーバーのディレクトリ構成と同じにした方が、移行の手間が軽減できる)。しかし、DBごとMTを移行して、MTにログインできなくなった場合、前のサーバーと今のサーバーでインストールされているBerkeley DBのバージョンが異なる可能性があります。
DBのバージョンが違う場合は(DBバージョンが不明な場合は試してみる価値あり)、次のサイトに載っている手順でDBのファイルをアップグレートすると、MTにログインできるようになります。
・Movable Type User Manual: TROUBLESHOOTING "I changed hosts, and now I can't log in to Movable Type."
具体的には次のような手順になります(事前にTelnetやSSHでログインする)。
1. DBファイルを置いている場所に移動してください(なおDBファイルは必ず別の場所にコピーするなどして、バックアップを取ってください)。
$ cd <DBファイルを置いているディレクトリ>
2. 次の「DBをアップグレードする」ためのコマンドを実行してください。
$ db_upgrade *.db *.idx
このコマンドが正常に実行できれば、データベースのアップグレードは終了です。
しかし、次のように「ファイルの種類が認識できない」という内容のメッセージが表示されて、正常にコマンドが実行できなければ、以下の手順も実行する必要があります。
db_upgrade: author.db: unrecognized file typedb_upgrade: DB->upgrade: author.db: Invalid argument
3. 「DBのアップグレード」ができない場合、「DBのダンプを取って、それを読み込みなおす」必要があります(ちなみに「ダンプ(Dump)」とは、データベースの情報をファイルに書き出して保存することで、バックアップのようなものです。つまりここでは、データベースのバックアップをとって、それをロードする作業を行います)。
DBのダンプを取るコマンドには次の2つがあります。
・db_dump(DBのバージョン2以上用のコマンド)
・db_dump185(古いDBのバージョン1.85、1.86用のコマンド)
この2つのどちらのコマンドを使うかは、DBのバージョンによって異なります。どちらのコマンドを使うべきかは、次のコマンドを実行することで確認できます。
$ db_dump author.db
これで、次のような英数字の並びが出力されれば、「db_dump」が使用できます。
format=bytevaluetype=btree
db_lorder=1234
db_pagesize=8192
HEADER=END
31
53455247000000046e616d65…(中略)…0131
33
53455247000000046e616d65…(中略)…0133
もし、次のように「ファイルの種類やフォーマットが未知のものだ」という内容のメッセージが表示されて、コマンドが失敗する場合、db_dumpは使えません。db_dump185を使うことになります。
db_dump: author.db: unexpected file type or formatdb_dump: open: author.db: Invalid argument
db_dump185が本当に使えるかどうかもチェックしておいたほうがよいです。これには次のコマンドを実行してみてください。
$ db_dump185 author.db
これで英数字の並びが出力されれば成功です。もし、先ほどと同じように「ファイル・フォーマットが未知」というメッセージが表示されるなら失敗です。失敗の場合、現状ではダンプができずDBをアップグレードできません(サーバー管理者に問い合わせてみてください)。
4. db_dumpもしくはdb_dump185のどちらが使えるか判明したら、次の4つのコマンドを順番に実行してください。
・db_dump -f <ダンプ・ファイル> <DBファイル>
→DBファイル(例:author.db)の内容を、ダンプ・ファイル(例:author.db.data)に出力(=ダンプ)する。
・mv <DBファイル> <名前変更後のDBファイル>
→ダンプが完了したDBファイル(例:author.db)は、名前を変更して(例:author.db.old)バックアップしておく(rmコマンドなどで削除してもよい)。
・db_load -f <ダンプ・ファイル> <DBファイル>
→ダンプ・ファイル(例:author.db.data)からデータを読み込んで(=ロード)、DBファイル(例:author.db)を復元する。
・chmod 666 <DBファイル>
→最後にMovable Typeからアクセスできるように、DBファイル(例:author.db)のアクセス権限を設定する(この設定は環境に合わせて行ってください)。
この4つのコマンドをすべてのデータベース関連ファイル(*.dbファイルと*.idxファイル)に行う必要があります。具体的には、次に示すコマンドを1つ1つ実行していかなければなりません(なお下の例ではdb_dump185を使用した)。実際にこれらすべてのコマンドを実行するのは不可能ではありませんが、少し大変かもしれません。そこでPerlスクリプトを使って一括実行すると楽になります(詳細後述)。
db_dump185 -f author.db.data author.dbdb_dump185 -f comment.db.data comment.db
db_dump185 -f ipbanlist.db.data ipbanlist.db
db_dump185 -f placement.db.data placement.db
db_dump185 -f templatemap.db.data templatemap.db
db_dump185 -f blog.db.data blog.db
db_dump185 -f entry.db.data entry.db
db_dump185 -f log.db.data log.db
db_dump185 -f tbping.db.data tbping.db
db_dump185 -f trackback.db.data trackback.db
db_dump185 -f category.db.data category.db
db_dump185 -f ids.db.data ids.db
db_dump185 -f permission.db.data permission.db
db_dump185 -f template.db.data template.db
db_dump185 -f author.email.idx.data author.email.idx
db_dump185 -f ipbanlist.blog_id.idx.data ipbanlist.blog_id.idx
db_dump185 -f template.blog_id.idx.data template.blog_id.idx
db_dump185 -f author.name.idx.data author.name.idx
db_dump185 -f ipbanlist.ip.idx.data ipbanlist.ip.idx
db_dump185 -f templatemap.archive_type.idx.data templatemap.archive_type.idx
db_dump185 -f blog.name.idx.data blog.name.idx
db_dump185 -f log.created_on.idx.data log.created_on.idx
db_dump185 -f templatemap.blog_id.idx.data templatemap.blog_id.idx
db_dump185 -f category.blog_id.idx.data category.blog_id.idx
db_dump185 -f permission.author_id.idx.data permission.author_id.idx
db_dump185 -f templatemap.is_preferred.idx.data templatemap.is_preferred.idx
db_dump185 -f category.label.idx.data category.label.idx
db_dump185 -f permission.blog_id.idx.data permission.blog_id.idx
db_dump185 -f templatemap.template_id.idx.data templatemap.template_id.idx
db_dump185 -f comment.blog_id.idx.data comment.blog_id.idx
db_dump185 -f placement.blog_id.idx.data placement.blog_id.idx
db_dump185 -f template.name.idx.data template.name.idx
db_dump185 -f comment.created_on.idx.data comment.created_on.idx
db_dump185 -f placement.category_id.idx.data placement.category_id.idx
db_dump185 -f template.type.idx.data template.type.idx
db_dump185 -f comment.entry_id.idx.data comment.entry_id.idx
db_dump185 -f placement.entry_id.idx.data placement.entry_id.idx
db_dump185 -f trackback.blog_id.idx.data trackback.blog_id.idx
db_dump185 -f entry.author_id.idx.data entry.author_id.idx
db_dump185 -f placement.is_primary.idx.data placement.is_primary.idx
db_dump185 -f trackback.category_id.idx.data trackback.category_id.idx
db_dump185 -f entry.blog_id.idx.data entry.blog_id.idx
db_dump185 -f tbping.blog_id.idx.data tbping.blog_id.idx
db_dump185 -f trackback.created_on.idx.data trackback.created_on.idx
db_dump185 -f entry.created_on.idx.data entry.created_on.idx
db_dump185 -f tbping.created_on.idx.data tbping.created_on.idx
db_dump185 -f trackback.entry_id.idx.data trackback.entry_id.idx
db_dump185 -f entry.modified_on.idx.data entry.modified_on.idx
db_dump185 -f tbping.ip.idx.data tbping.ip.idx
db_dump185 -f entry.status.idx.data entry.status.idx
db_dump185 -f tbping.tb_id.idx.data tbping.tb_id.idx
mv author.db author.db.old
mv comment.db comment.db.old
mv ipbanlist.db ipbanlist.db.old
mv placement.db placement.db.old
mv templatemap.db templatemap.db.old
mv blog.db blog.db.old
mv entry.db entry.db.old
mv log.db log.db.old
mv tbping.db tbping.db.old
mv trackback.db trackback.db.old
mv category.db category.db.old
mv ids.db ids.db.old
mv permission.db permission.db.old
mv template.db template.db.old
mv author.email.idx author.email.idx.old
mv ipbanlist.blog_id.idx ipbanlist.blog_id.idx.old
mv template.blog_id.idx template.blog_id.idx.old
mv author.name.idx author.name.idx.old
mv ipbanlist.ip.idx ipbanlist.ip.idx.old
mv templatemap.archive_type.idx templatemap.archive_type.idx.old
mv blog.name.idx blog.name.idx.old
mv log.created_on.idx log.created_on.idx.old
mv templatemap.blog_id.idx templatemap.blog_id.idx.old
mv category.blog_id.idx category.blog_id.idx.old
mv permission.author_id.idx permission.author_id.idx.old
mv templatemap.is_preferred.idx templatemap.is_preferred.idx.old
mv category.label.idx category.label.idx.old
mv permission.blog_id.idx permission.blog_id.idx.old
mv templatemap.template_id.idx templatemap.template_id.idx.old
mv comment.blog_id.idx comment.blog_id.idx.old
mv placement.blog_id.idx placement.blog_id.idx.old
mv template.name.idx template.name.idx.old
mv comment.created_on.idx comment.created_on.idx.old
mv placement.category_id.idx placement.category_id.idx.old
mv template.type.idx template.type.idx.old
mv comment.entry_id.idx comment.entry_id.idx.old
mv placement.entry_id.idx placement.entry_id.idx.old
mv trackback.blog_id.idx trackback.blog_id.idx.old
mv entry.author_id.idx entry.author_id.idx.old
mv placement.is_primary.idx placement.is_primary.idx.old
mv trackback.category_id.idx trackback.category_id.idx.old
mv entry.blog_id.idx entry.blog_id.idx.old
mv tbping.blog_id.idx tbping.blog_id.idx.old
mv trackback.created_on.idx trackback.created_on.idx.old
mv entry.created_on.idx entry.created_on.idx.old
mv tbping.created_on.idx tbping.created_on.idx.old
mv trackback.entry_id.idx trackback.entry_id.idx.old
mv entry.modified_on.idx entry.modified_on.idx.old
mv tbping.ip.idx tbping.ip.idx.old
mv entry.status.idx entry.status.idx.old
mv tbping.tb_id.idx tbping.tb_id.idx.old
db_load -f author.db.data author.db
db_load -f comment.db.data comment.db
db_load -f ipbanlist.db.data ipbanlist.db
db_load -f placement.db.data placement.db
db_load -f templatemap.db.data templatemap.db
db_load -f blog.db.data blog.db
db_load -f entry.db.data entry.db
db_load -f log.db.data log.db
db_load -f tbping.db.data tbping.db
db_load -f trackback.db.data trackback.db
db_load -f category.db.data category.db
db_load -f ids.db.data ids.db
db_load -f permission.db.data permission.db
db_load -f template.db.data template.db
db_load -f author.email.idx.data author.email.idx
db_load -f ipbanlist.blog_id.idx.data ipbanlist.blog_id.idx
db_load -f template.blog_id.idx.data template.blog_id.idx
db_load -f author.name.idx.data author.name.idx
db_load -f ipbanlist.ip.idx.data ipbanlist.ip.idx
db_load -f templatemap.archive_type.idx.data templatemap.archive_type.idx
db_load -f blog.name.idx.data blog.name.idx
db_load -f log.created_on.idx.data log.created_on.idx
db_load -f templatemap.blog_id.idx.data templatemap.blog_id.idx
db_load -f category.blog_id.idx.data category.blog_id.idx
db_load -f permission.author_id.idx.data permission.author_id.idx
db_load -f templatemap.is_preferred.idx.data templatemap.is_preferred.idx
db_load -f category.label.idx.data category.label.idx
db_load -f permission.blog_id.idx.data permission.blog_id.idx
db_load -f templatemap.template_id.idx.data templatemap.template_id.idx
db_load -f comment.blog_id.idx.data comment.blog_id.idx
db_load -f placement.blog_id.idx.data placement.blog_id.idx
db_load -f template.name.idx.data template.name.idx
db_load -f comment.created_on.idx.data comment.created_on.idx
db_load -f placement.category_id.idx.data placement.category_id.idx
db_load -f template.type.idx.data template.type.idx
db_load -f comment.entry_id.idx.data comment.entry_id.idx
db_load -f placement.entry_id.idx.data placement.entry_id.idx
db_load -f trackback.blog_id.idx.data trackback.blog_id.idx
db_load -f entry.author_id.idx.data entry.author_id.idx
db_load -f placement.is_primary.idx.data placement.is_primary.idx
db_load -f trackback.category_id.idx.data trackback.category_id.idx
db_load -f entry.blog_id.idx.data entry.blog_id.idx
db_load -f tbping.blog_id.idx.data tbping.blog_id.idx
db_load -f trackback.created_on.idx.data trackback.created_on.idx
db_load -f entry.created_on.idx.data entry.created_on.idx
db_load -f tbping.created_on.idx.data tbping.created_on.idx
db_load -f trackback.entry_id.idx.data trackback.entry_id.idx
db_load -f entry.modified_on.idx.data entry.modified_on.idx
db_load -f tbping.ip.idx.data tbping.ip.idx
db_load -f entry.status.idx.data entry.status.idx
db_load -f tbping.tb_id.idx.data tbping.tb_id.idx
chmod 666 ./*
Perlスクリプトを使った一括実行については、次のサイト(のコメント)で紹介されています。
・PARADISE STREET: ログインできなくなってた
私は独自の「DBをアップグレードするPerlスクリプト」を作りました。このPerlスクリプトは、次のリンクからダウンロードできます。自由にダウンロードして使ってください。
・ダウンロード「MT Berkeley DB Updater(db_dump版)」zip版/tar.gz版
・ダウンロード「MT Berkeley DB Updater(db_dump185版)」zip版/tar.gz版
ダウンロードしたファイルを解凍すると、「updatedb.pl」もしくは「updatedb185.pl」というPerlスクリプトが作成されます。このPerlスクリプトを実行するには、PerlスクリプトをDBのあるフォルダにコピーしたうえで
$ perl updatedb.pl
もしくは
$ perl updatedb185.plのようにコマンド入力してください。
実際にアップグレードされたファイルが画面上に表示されます。もし何も表示されずに「All done.」と表示された場合には、何も処理されていません(その場合、おそらくPerlスクリプトのあるディレクトリ内にDBファイルがないと思われます)。