2008年08月03日

MT3.2 Berkeley DBからSQLiteへ移行

とっても今更なんですが、MT3.2でBerkeley DBからSQLiteへ移行してみました。
今回は、その移行作業の覚え書きです。

そも、このSeesaaでブログを始めたのが、Berkeley DBを使ったままだと、MT3.2では
エントリーしても、自動的に再構築が出来ない、と言うエラーが起こったため。
その対策をする時間もなく、しかもダイアルアップだったし、面倒だったので(汗、こちらに間借りすることになったのでした。

そもそも、2008/07/25 深夜。
かつての「丁稚@ブログ」に、大量のコメントしかも、スパムコメントらしきものを発見Σ( ̄□ ̄;)!!

って言うか、放置しすぎだろ…。
深夜だったし、ログインのパスワードがイマイチ判らなかったので、仕方なく、放置…。

明けて2008/07/26、重い腰を上げる。

そんな訳で、まずは、ログインのパスワードとかを探してきて、コメントを削除しようと
試みたのですが、「なんか、CGI動いてないっスよ?」エラーで、コメント削除できず。
苦肉の策で、トラバ、コメントを受け付けなくする。

いずれはやらねばと思っていたアップグレートとDB移行に、手をつけることに。
本宅へ営業が戻るのは一体何時のことやら??ですが…。

一気に4までアップグレードするつもりだったので、まず、MovableType 4.13をダウンロード。
そして、レンタルサーバ(ロリポップ)のマニュアル、及びググってBerkeleyDBからSQLiteへの移行方法を探しました。



【参考URL】
MT Database Converter(Ogawa Memorandaさん)
http://code.as-is.net/public/wiki/MT_Database_Converter.ja_JP#head-d8f857e07f66736abb99432e0fc1e7410088e648
ここから、Ogawa::Memorandaさんが提供してくださっている、「mt-db-convert」をダウンロード。

Ogawa::Memoranda
http://as-is.net/blog/

wonder BABY『ロリポップSQLiteへ移行』
http://www.wonderbaby.net/2006/08/sqlite.html

next global jungle 『ロリポップでMT3.2再構築時のエラー解決法 データベースをBerkeleyDB→SQLiteに』
http://www.nextglobaljungle.com/2006/04/mt32barkeleydbsqlite.html

ブログ別!作成・カスタマイズ講座『Movable Type 3.2のSQLite移行方法』
http://blog.info-rich.jp/archives/2005/10/movable_type_32.html

流石に、症状が出てから2年くらい放置していただけあって、資料が豊富です。
有難うございます。
でも、どこを読んでも、SQLiteのDBをロリポップで作りなさい、と言う記述がない。
DBは作らなくていいのかな…?

まぁ、良い。書いてないって事は、きっと作らなくて良いんだ。

レンタルしているロリポップでは、Berkeley DBの他、MySQL、SQLiteといずれも動作するらしいのですが、ググって居る間に、MySQLよりは、SQLiteの方が動作が良いらしいと言う記事を見つけたので、SQLiteにすることにしました。

基本的な移行のやり方は、
1)mt-config.cgiで、SQLiteの設定を作る。(Berkeley DBの設定も有効にしたまま)
2)mt-db2sql.cgiで、Berkeley DBからSQLiteに移行。
3)mt-config.cgiでBerkeley DBの設定をコメントアウト。
4)SQLiteのDBへの「.htaccess」を作成。

1、2の作業を一括してやってくれるのが、「Ogawa::Memoranda」さん提供の「mt-db-convert」です。
手前も、楽しようと(笑)、ダウンロードさせて頂きました。


何はともあれまずは、バックアップ。ftpソフトで、サーバに上がってる全てのファイルをダウンロード。
以前は、ダイアルアップだったので、エライこと時間が掛かったものですが、今はADSLだから、そんなに時間も掛からなかろう、と思っていたら、コメントのDBファイルがものすごくデカイ!
大量のスパムコメントが災いして、74MBのコメントファイルってどうよ…orz
ああ、もう飯も作らねばならんと言うに…。

バックアップ後は、DB移行の参考URLの指示通りに、対象のMTのバージョンに該当する、mt-db-convertをアップロードし、パーミッションを「755」に変更。

cgi-Pathに指定したURL+mt-db-convert32.cgiにアクセス。
(人によって違うと思いますが、大体ログインのときのURLの末尾のcgiを、上のcgiに変えればいいと思います。)

そして、「Destination DB Configuration」(変換後のDB設定)の「Object Driver」で「SQLite」を選択。
DatabaseSourceに、
「…(省略)…mt/db/sqlite.db」
と記入。これは、きっとBerkeleyDBと同じところ(dbディレクトリ)で良いんだろうな〜と思いつつ。

そして、左下の「Convert」ボタンを押すと、移行状況の画面が出てきます。

…あれ、文字化けしてるし、エラーが…。メモリーエラーって…。
仕方ないので、最初の画面に戻り、もう一回。
くそ、相変わらずコメントのところで…(T_T)

3回試しても、作成した「sqlite.db」を消してやり直しても、ダメなので、その次の手に。

本来の移行のやり方、「mt-db2sql.cgi」でやってみます。
mt-db-convert32.cgiを消し、作成したdbも消して、今度はバックアップした「mt-config.cgi」を変更。

これをアップロードしなおして、cgi-Pathに指定したURL+mt-db2sql.cgiにアクセス。
…しかし、これも途中で止まってまいました…。

もう一度mt-db-convert32.cgiで、今度は「db」ディレクトリ下に作るのを止めてもダメ。何故…。

それならば仕方がない。
全部消して、最初からやり直す手もある訳なんですが、まだそれは最終手段。
コメントのDBを全て消してみることにしました。
消したのは、dbディレクトリの下にある、「comment」で始まるファイルを全て。
コメント本体は、「comment.db」だけなのでしょうが、エントリーなどと関連付けしてあるファイルが一杯あったので、これが中途半端に残っていると悪さしそうだったので、一気に削除です。
だめなら、またバックアップから戻せば良いので。

その前に、大事なコメントと、全エントリーのバックアップだけ取りました。
そして、mtディレクトリの下に、sqlite.dbを作るようにして、実行。

ったら…上手く行きましたよ!
2日分のエントリーだけだったのですが、計1000件位のスパムコメントが付いてまして…。
どうもそれがメモリーエラーになったようです。

まぁ、1000件位のコメントが付くのは、人気のあるブログだったら良くあることでしょうから、高々1000件のコメントで、メモリーエラーとか起こすのは少しおかしいですよね。
ううむ、コメント…?
サーバの容量…?これが一番原因が近いかも知れません。
多少多め(100MB〜200MB…位かな?)に借りているのですが、移行って事は、ほぼ同じ容量だけのDBをもう一個作るわけですから、移行してる最中に、MAXの容量を越したか…?
コメントは全部消すことになってしまいましたが、ともかく、良かった…。

最後は、BerkeleyDBを使わないように、mt-config.cgiからDataSourceの所をコメントアウト。
そして、SQLiteのDBにアクセス出来ない様に、「.htaccess」ファイルを、新しく作成したSQLiteのDBファイルと同じ場所に作成。
面倒なので、この段階のバックアップをもう一回とって、dbディレクトリを、サーバから削除しました。

後は、4にアップグレードするだけですね。
ふぃー。
折角だから、カテゴリも整理しよー…って、再構築でエラー出てますよ?
……。なんなの…。

もう、このテンプレートのエラー、追えないです。そんな根性はない。
そんな訳で、テンプレート借りてきちゃいました。

decoweb
http://www.decoweb.jp/

色んなテンプレートがあって、迷ったけど何となく最初の印象でよかったものにしてみました。

しかし、カテゴリの再構築は相変わらず上手く行かず。
カテゴリを全て新しく作ってみて、全部エントリーを移行してみたものの、やっぱりダメ。

ギブアップ…。
これって、4にアップグレードしたら解決するだろうか…?

一先ずのメンテとしてはここまで…。
残りはまた対策を調べてやってみたいと思います…。ハイ。


2008/07/29
【カテゴリーの再構築エラーが気になる】

設定→公開のところのカテゴリーアーカイブの設定が、サブカテゴリーのテンプレートが優先になっていたので、カテゴリーIDごとのテンプレートに設定しなおしてみる。
でも、やっぱりカテゴリー別の再構築でエラー。

おや??

仕方なく、
all-angle.com MTテンプレートタグ辞典(ホームページ作成会社オールアングル)
http://all-angle.com/mttag/

で、引っかかっているタグを検索。
で、判ったのは、「<MTEntries></MTEntries>」で囲われてないと、いけないと言うこと。
面倒なので、引っかかりまくったタグの最後の方まで一気に囲ってしまいました。
(テンプレートが途中からちゃんと<MTEntries></MTEntries>を使い始めるので…)

一部、
Can't call method "allow_pings" on an undefined value at lib/MT/Template/ContextHandlers.pm line 3015.

と言う、訳のわからないエラーを吐かれましたが、

「Melog」さん
http://melog.info/archives/2005/10/02211538.html
のところで、「MTEntryIfAllowPings」の記述を見つけたので、解決。やっと、全部の再構築が通った!

と思ったら、なんかカテゴリーの表示が面白表示に…^^;

何となく細かくではなく、ちゃんと分かれているところ(divタグなど)で、対応する間を囲わないと綺麗に出ないみたいですね。
今も微妙な感じですが…。

とりあえず、何とかなったのでこの辺にしておきたいと思います…。

posted by detti at 16:07 | Comment(0) | TrackBack(1) | PC関連 | このブログの読者になる | 更新情報をチェックする|
この記事へのコメント
コメントを書く
お名前:

メールアドレス:

ホームページアドレス:

コメント:

この記事へのトラックバックURL
http://blog.seesaa.jp/tb/104106032

この記事へのトラックバック

frederickffl.com
Excerpt: "[...]MT3.2 Berkeley DB����SQLite�ֈڍs: ���t���u���O[...]"
Weblog: frederickffl.com
Tracked: 2013-08-19 05:56