Aug 9, 2004

mt-sql2db.cgi: mt-db2sql.cgiの逆変換 CGIスクリプト

コネタが続きますが、このエントリでは、MySQLなどに保存しているMovable TypeのデータをBerkeleyDBにコピーするための自作CGIスクリプト(mt-sql2db.cgi)を紹介します。

mt-sql2db.cgi

0.01(2004.08.09): 公開。

レンタルサーバなどでMySQLなどを使っている場合、どうしてもデータをロストする危険を感じないわけにはいきません。実際廉価なレンタルサーバでのSQLサーバ利用は「at your own risk」と明記されている場合が非常に多く、サービスの継続性にも不安を感じます。

一方で、Movable TypeはBerkeleyDB形式で作ったデータをSQLに変換する機能は提供しますが、その逆の機能は提供しません。確かに一旦SQLに変換してしまえば、Ogawa::Buzz: LolipopのMySQLデータベースを簡単バックアップするCGIスクリプトに書いたようにSQLデータをバックアップすること自体は簡単です(しかもreadableだし、portableだし、だし)。が、そうして取ったバックアップからリカバリーしたい場合、リカバリー側環境でSQLサーバが無事に使えれば問題はないですが、そうでなければMovable Typeを継続して使うことができないということになります。

こうした事情もあり、最近頓にトラブルの多いBerkeleyDBからMySQLに移行したいがBerkeleyDBに戻せないのは困るという理由で二の足を踏んでいる、という人は割に多いのではないでしょうか? そんな人の背中を押すのがこのスクリプトの目的です。

このスクリプトは、端的に言ってMovable Type 3.0に付属のmt-db2sql.cgiの逆変換機能を提供します。mt.cfgでDBI ObjectDriverを指定しているときに、データベースに格納してあるすべてのMT Objectを読み込んではDBM形式で保存していく、というただそれだけのスクリプトです。

使い方

基本的な使い方は以下の通りです。

  1. 上記リンクよりCGIスクリプトをダウンロードして、mt-sql2db.cgiという名前で保存します。
  2. mt.cgiなどが置かれているディレクトリにアップロードし、mt.cgiなどと同様に実行権限を与えます。
  3. mt.cfgでObjectDriver、Database、DBUser、DBHost、(BerkeleyDBが使用するディレクトリを指定する)DataSourceが適切に設定されていることを確認してください。また、DataSourceで指定したディレクトリを作るのも忘れずに。
  4. ブラウザからmt-sql2db.cgiにアクセスしてCGIを実行してください。SQLサーバのデータがDataSourceで指定したディレクトリにBerkeleyDB形式でダンプされるはずです。
  5. 無事に済んだら、mt.cfgのObjectDriverの行をコメントアウトしてBerkeleyDBでの動作確認をしてください。

このツールはもう少し応用的な使い道もできます。

megu's blogのmeguさんにコメント欄でご示唆いただいたように、異なるSQLサーバ間のデータ形式変換にも使えます。例えば、MySQLで作ったデータを一旦BerkeleyDB形式に変換(このエントリのmt-sql2db.cgi)し、次にBerkeleyDB形式のデータをPostgreSQL形式に変換(MT3.0付属のmt-db2sql.cgi)することで、MySQL→PostgreSQLの移行ができます(vice versa)。

もちろん両スキーマ間の変換をする方が確実かつ高速なのは言うまでもないですが、この方法ならSQLの知識なしに(あるいはそれ専用のツールを使うことなしに)変換できるというメリットがあります。

注意点

  • エントリーの数が増えると非常に時間がかかるようになります。所要時間はおおよそエントリー数の2乗に比例すると考えてください。辛抱が肝心です。
  • レンタルサーバなどではスクリプトの実行時間が長くかかり過ぎると途中終了する場合があります。その場合にはこのツールは使えません。ちなみにLolipopではこのブログはバックアップできませんでした
  • BerkeleyDBへのバックアップは、mt.cfgのDataSourceで指定しているディレクトリに行います。すでにこのディレクトリにバックアップが存在する場合上書きされます
  • Known bugですが、Link this template to a file(このテンプレートにリンクするファイル)を指定しているテンプレートがあるとスクリプトが失敗することがあります。これはBerkeleyDBにsaveしようとする際に対象ファイルへのアクセスが発生するためです。原因は分かっていますが、面倒なので対処しません。
  • MySQLとPostgreSQLとSQLiteで動作することを確認しています。
  • MT2.6X~MT3.1Xでしか動作確認しておりません。
  • ご利用は計画的におながいいたします。念には念を入れてバックアップしてください。

About Me

My Photo

つくばで働く研究者

Total Pageviews

Amazon

Copyright 2012 Ogawa::Buzz | Powered by Blogger
Design by Web2feel | Blogger Template by NewBloggerThemes.com