c0d3man52

データベース

[CodeIgniter] MySQLからSQLite3へ変換してCodeIgniterで使う

機能的には「おもちゃ」と呼ばれるSQLite3ですが、DBへのリアルタイム書き込みなどがなく、リードオンリーなサイトで、おもちゃレベルのアクセスしかないなら(当ブログのように。。。)、SQLite3で十分じゃないかと思い、CodeIgniter + SQLite3移行してみました。

更新日: 2018.7.17公開日: 2018.3.19

Ruby Gemのsequelを使って変換

基本的にはこちらのサイトの通りです。

以下、Macで使う前提ですが、セットアップを見ていきます。

セットアップする

sudo gem install sequel

sudo gem install mysql2

sudo gem install sqlite3

で必要なGemをインストールします。

自分の環境の場合、Runyが2.0だったので、2.3以上にあげろと怒られました。

brew update

でアップデートします。

また、変換するローカル側にもmysqlがはいっていないとダメなので、もしインストールしていないなら、

brew install mysql

でmysqlをインストールします。

実際に変換

sequel mysql2://mysqlサーバーのユーザーID:mysqlサーバーのパスワード@mysqlサーバーのIP/データベース名 -C sqlite://出力ファイル名.sqlite

で変換します。

MySQLとSQLite3では地味にルールが違うので、

Error: Sequel::NotNullConstraintViolation: SQLite3::ConstraintException: NOT NULL constraint failed;

とか、怒られるところもありますが、都度修正しながらやれば、変換自体はすぐに終わります。

sequelはRubyのGemなので、Linuxでもいけると思います。

CodeIgniterのDB設定

こちらもそこら中に情報がありますが、application/config/database.phpの内容を下記のようにすればOKです。

$db['default'] = array(
    'dsn'    => '',
    'hostname' => '',
    'username' => '',
    'password' => '',
    'database' => APPPATH . '/../../../db/test.sqlite', //applicationディレクトリからdbファイルへのパス
    'dbdriver' => 'sqlite3',
    'dbprefix' => '',
    'pconnect' => FALSE,
    'db_debug' => TRUE,
    'cache_on' => FALSE,
    'cachedir' => '',
    'char_set' => '',
    'dbcollat' => '',
    'swap_pre' => '',
    'autoinit' => TRUE,
    'encrypt' => FALSE,
    'compress' => FALSE,
    'stricton' => FALSE,
    'failover' => array(),
    'save_queries' => TRUE
);

基本的にdatabaseにファイルパスを設定するだけですが、mysqliの時とは細かいところの設定が違うので、コピペ推奨です。

テスト

さて、これで実際にCodeIgniterで動かしてみて、動けばOKです。

サイト規模や内容にもよりますが、表示がメインのサイトであればMySQLと遜色ないくらいの速度で表示してくれます。

<おまけ> ダメだったやつ

Githubに上がっているMySQL to Sqlite converter で出来るという記事もありましたが、実際にやってみたら、日本語が文字化けしてしまいダメでした。

変換自体はしっかりできているので、設定次第な気もしますが、、、


コンバータのセットアップも出来たので、今後は「開発&データ作成はローカルのMySQL」「一般向けのDBはSQLite3」で運用してみたいと思います。