[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」で運用してみたいと思います。