おのたく日記 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にログインできるようになる。
|