[CodeIgniter] MySQLからSQLite3へ変換してCodeIgniterで使う
- 2018.03.19
- MySQL
- Codeigniter
機能的には「おもちゃ」と呼ばれるSQLite3ですが、DBへのリアルタイム書き込みなどがなく、リードオンリーなサイトで、おもちゃレベルのアクセスしかないなら(当ブログのように。。。)、SQLite3で十分じゃないかと思い、既存のMySQLからSQLite3に変換をかけて、CodeIgniter + SQLite3移行してみました。
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」で運用してみたいと思います。
コメントを書く
You must be logged in to post a comment.