↑日記で日々積み重ねた情報をトップの「わんこのページ」にまとめています。

おのたく日記 [RDF] YouTubeも始めました→


2006-06-21(Wed) [長年日記]

[amd64][MovableType] MovableTypeのデータをPostgreSQLからMySQLへ移行

以前にも書いたけど、おうち新サーバでは、DBを選べないMythTVのために、PostgreSQLではなくてMySQLにしようとしている。

※ふたつのDBが、テレビ録画とMovableTypeで、いつも動いているの嬉しくないものね。

というわけで、Debian 3.1(sarge)のPostgreSQL 7.4から、Debian amd64 testing(etch)のMySql 5.0へMovableType 2.64のデータを移行した。

※MovableType 3.2だど、複数ユーザが無料では許可されていないんです。でも嫁さんと・携帯電話君(moblog用)とプパビン(blogペット)と実ユーザで2名、仮想ユーザで2名が必要なのでで、古いバージョンのMovableTypeを使っています。

DB移行は、単純にMovableTypeのメニューからexport/importすれば良いのかと思っていたのですが、それだと落ちてしまう情報があるので、データベースからデータを直接移行しました。

まずはPostgreSQLからのデータの取り出し

www-data$ pg_dump -d movabletype > postgres.dump

として、PostgreSQLに入っているMovableTypeのデータをバックアップしました。このdump fileはSQLで書かれたテキストファイルです。オプション-dを忘れると、標準SQLのINSERTではなくて、COPYによって書き込むようになりMySQLで読み出しにくくなるので注意が必要。

取り出したデータのコンバート

postgres.dumpは、PostgreSQLようのファイルなので、MySQL用にコンバートする必要がある。MySQLのテンプレートとするために、まずは昨日の日記でMovableTypeでMySQLを使えるようした直後の空っぽのMySQLデータのバックアップを取った。

$ mysqldump --user=root --lock-all-tables --databases movabletype >mysql.dump

userをrootとしたのは、www-dataにはtable lockのパーミションを出してなかったから。LANG=ja_JP.UTF-8なので、mysql.dumpには

/*!40101 SET NAMES utf8 */;

なっているが、MovableType 2.64は、ちゃんとclient接続のcharacter setをコントロールしていないようななので、latin1に無理矢理utf8を通して使っているようなので、

/*!40101 SET NAMES latin1 */;

とする。

※latin1ではだめじゃんと、databaseがlatin1なので drop database movabletype; して、

CREATE DATABASE /*!32312 IF NOT EXISTS*/ `movabletype` DEFAULT CHARACTER SET UTF8 /*!40100 DEFAULT CHARACTER SET latin1 */;

やTableのcharactoer setをutf8して、はじめはデータをリストアしたんだけど、MovableTypeでは文字化け(?)してしまっていた。

さてデータ移行の本番、mysql.dumpでは、LOCK TABLES `テーブル名` WRITE;の後にINSERTでデータを入れ込んでいるので、先ほどPostgreSQLから取り出したpostgresql.dumpから、INSERT分をテーブル毎にコピーする。

データをMySQLにリストアする。

$ mysql -u www-data <mysql-new.dump

※これも --default-character-set=utf8 したりしてみたけど、結局なにもいらなかった。

これで、データ移行完了。昔のようにMovableTypeにログインできるようになる。

本日のPingbacks(全0件)

Google Web検索 on-o.com内を検索