WWW Watch

1つの DB で MT4 を複数インストール

共有タイプのレンタルサーバなどを使っていて、1契約につき、DB が 1つしか使えないような場合ってよくあると思いますが、そこに例えばバージョンが異なる複数の M...

Movable Type 4共有タイプのレンタルサーバなどを使っていて、1契約につき、DB が 1つしか使えないような場合ってよくあると思いますが、そこに例えばバージョンが異なる複数の MT をインストールして別々に使いたいなんてこともあると思います。

SQLite は別として、MySQL、PostgreSQL を使用して 1つの DB に複数の MT をインストールしようとすれば、テーブル名が同じになるのですべての MT から同じデータしか参照できません。この場合は、各 MT が生成するテーブル名がかぶらないようにして変更あげればいいわけですが、その変更方法をメモがてら紹介してみようと思います。

MT は、インストール時に 「mt_」 という接頭辞 (prefix) を付けて各テーブルを生成します。テーブル名がかぶらないようにするには、この接頭辞を変えてあげればいいわけです。

MT4 の場合、以下 3つのファイルに書き出される接頭辞が指定されています。

  • lib/MT/ObjectDriver/Driver/DBI.pm
  • lib/MT/ObjectDriver/Driver/DBD/Legacy.pm
  • lib/MT/ObjectDriver/Driver/DBD/Pg.pm

それぞれをテキストエディタなどで開いて、DBI.pm では 15行目あたり、


sub init {
    my $driver = shift;
    my (%param) = @_;
    $param{prefix} ||= 'mt_';
    $driver->SUPER::init(%param);
    my $opts = $driver->connect_options || {};
    $opts->{RaiseError} = 0;
    $driver->connect_options($opts);
    $driver;
}

「mt_」 となっている部分を例えば 「mt4_」 などに変更しておきます。

次に Legacy.pm 内、50行目あたり、


sub db_column_name {
    my $dbd = shift;
    my ($table, $col) = @_;
    $table =~ s{ \A mt_ }{}xms;
    return join('_', $table, $col);
}

同じく、「mt_」 となっている部分を先につけたものと同じものに変更して保存。最後に Pg.pm の 137行目あたり、


return join '_', 'mt',

「mt」 を同様に変更したら、3つのファイルをアップします。この状態でインストール作業に進めば、生成されるテーブル名の接頭辞が変更したものに変わりますので、DB が 1つしかなくても複数の MT を運用できます。

ちなみに MySQL では問題なく動作することを確認していますが、PostgreSQL では確認していませんのでご注意を。それから、すでに MT がインストールされている DB で試す場合には必ず DB のバックアップを取ってからやりましょう。

参考までに、MT3 系の場合は下記のファイルを開いて、「mt_」 という記述を片っ端から任意のものに変更してあげるのと、

  • lib/MT/ObjectDriver/DBI/mysql.pm (MySQL)
  • lib/MT/ObjectDriver/DBI/postgres.pm (PostgreSQL)

下記のファイルの 20行目あたり、

  • lib/MT/ObjectDriver/DBI.pm

sub table_prefix { 'mt' }

という部分の 「mt」 を同じく変更してあげれば MT4 同様にテーブル名を変更できます。

Recent Entry

全ての記事一覧を見る

Hot Entry

逆引きおすすめエントリー