2012-11-19 mysql
以前使ってた atpages では DB に sqlite 使ってたんだけど、appfog は sqlite が使えない(?)ので、以下の手順で sqlite エクスポート → mysql インポートした。
まず sqlite の中身を dump.sql にエクスポート、
# sqlite3 db.sqlite sqlite> .output dump.sql sqlite> .dump (Ctrl+C) # cat dump.sql PRAGMA foreign_keys=OFF; BEGIN TRANSACTION; CREATE TABLE entry( id INTEGER PRIMARY KEY, title text NOT NULL, date text NOT NULL, tags text, contents text NOT NULL ); INSERT INTO ...
これを mysql用 に書き換える。
sqliteではテキスト型でなんでもぶっこめたけど、mysqlの場合BLOB型にしないと入らないデータがあったので、id以外はBLOBで定義した。あと「BEGIN TRANSACTION」を「START TRANSACTION」に変更。
-- DB作成 CREATE DATABASE mgng CHARACTER SET utf8; use mgng; set character_set_client = utf8; set character_set_connection = utf8; set character_set_results = utf8; -- text ではなく BLOB 型で定義 CREATE TABLE entry ( id MEDIUMINT NOT NULL AUTO_INCREMENT, title BLOB NOT NULL, date BLOB NOT NULL, tags BLOB, contents MEDIUMBLOB NOT NULL, primary key (id) ); -- BEGIN ではなく START START TRANSACTION; INSERT INTO ...
最後に dump.sql を実行して終了。
# mysql -u mgng -h hostname -p < /path/to/dump.sql
ちなみに START TRANSACTION ~ COMMIT しないと INSERT に死ぬほど時間かかる。大量に INSERT する場合はトランザクション内で行うっつうのは定石。これは sqlite でも同じ。