犬ターネット

sqlite エクスポート → mysql インポート

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 でも同じ。


バカか

atpages から appfog に移行