Windows XPにMySQLを入れてみる。そしてRubyから呼び出してみる。
データベースもいじりたくなってきたので、MySQLを入れてみます。
参考は
のあたり。
MySQL :: Download MySQL Community Serverからバージョン5.1.30のwindows用zip圧縮版をダウンロード。登録を迫られますが登録項目が多いのでスルーしました。
解凍してセットアップを実行。"Typical"を選んでInstall。インストール後、"Server Instance Configuration Wizard"が開くので、"Standard Configuration"を選ぶ。次は"Install As Windows Service"と"Include Bin Directory in Windows PATH"両方にチェックを入れる。上のサービスネームはMySQLのままで。次は"Modify Security Settings"にチェックを入れてパスワードを入れる。"Enable root access from remote machines"は分からないけど、とりあえずチェックしない。次の画面で"Execute"を押すと完了。
すべてのプログラムから"MySQL Command Line Client"を起動すると立ち上がった。よさそう。
で、またしてもですが、MySQLが分かっていないのでRubyと組み合わせて使う方法をお勉強。
ライブラリは2つあるみたいですが、楽してruby-gemsから入れるので、MySQL/rubyを入れる。
gemを実行したらなんだかすごく待たされたけれど、mysql 2.7.3(mswin32)が出てくるのでインストール。上手く入ったかな?
とりあえず、
require 'rubygems' require 'mysql'
とだけ書いたファイルを実行。あれ…エラー。「LIBMYSQL.dllが見つからなかったため、このアプリケーションを開始できませんでした。」…。こういうときはgoogleに投げるしかない。
MySQL5.1系だとダメっぽいというのを横目で見てドキドキしつつ、C:\Program Files\MySQL\MySQL Server 5.1\binのlibmySQLdllをruby\binにコピー。実行。動いた!
あれ?これって期せずしてRuby on Railsに片足突っ込みかけてんじゃ?と思ったりする次第です。が、Railsを試した途端に上の記事が書いているようなエラーが出たらやだなぁ。RoRは踏まないほうが良いかな。そろそろ今更だし。
ちなみにMySQLについては
をざっくり見て勝手に概要の概要は分かった気になりました。…まぁ本当使えれば良いので、いまのところ。
http://toriaezuiwasete.cocolog-nifty.com/blog/2007/07/rubymysql_dac7.html
に倣ってやってみたんだけど、[BUG] Segmentation faultが出る。
のようにDBIをかませてみても同じエラー。なんだろう…。またgoogleさんの助けが必要なようです。
Ruby/DBIでMySQLドライバを使うとSegmentation faultになる - KEEP CALM AND DRINK BEER
によるとMySQLがダメなのか?
この症状なんだけど…。解決方法が…?MySQL5.0なら良いのかな?
他に特に解決方法は見つからず…うわぁーん!しょうがないのでMySQLを5.0系で入れなおしてみる。
一旦今のMySQLをプログラムの追加と削除から消す。MySQL :: Download MySQL Community Serverから5.0.67をダウンロードし直し…、インストール。同じことを試す。が、同じところで同じエラー…。うーん…MySQL4系まで落とさないとダメ?それともそういう問題じゃない?…と、http://toriaezuiwasete.cocolog-nifty.com/blog/2007/07/rubymysql_dac7.htmlのプログラムの追加と削除ではゴミが残るというのが気になったので、もう一度きれいにアンインストール。Program FilesのMySQLフォルダも削除。三度インストール、同じ手順。DBIのほうで動いた!ひゃっほう!
さらに追記。
なんだか、データベースへの接続とサーバーのバージョン呼び出し、テーブルの作成、テーブルデータの挿入までは動くんだけど、データの取り出し(execute)しようとすると落ちる。エラーは以下の通り。なんだかなぁ…dbd-mysqlでエラーなのか…?わからん。
C:/Program Files/ruby-1.8/lib/ruby/gems/1.8/gems/dbd-mysql-0.4.2/lib/dbd/mysql/s tatement.rb:130: [BUG] Segmentation fault ruby 1.8.6 (2007-09-24) [i386-mswin32]
と、ここで、先ほど、C:\Program Files\MySQL\MySQL Server 5.1\binのlibmySQLdllをruby\binにコピーしたのをやり直していないこと気がつく。バージョン変えたんだからやり直さなきゃダメじゃん当然。無事動いた。自分の間抜けさにあきれつつ…。ちなみに実行したプログラムは、
require 'rubygems' require 'dbi' begin dbh = DBI.connect('DBI:Mysql:test', 'root', 'passward') p dbh #サーバーのバージョンを表示 row = dbh.select_one("SELECT VERSION()") puts "Server version: " + row[0] #peopleテーブルを作成し小さなテーブルデータを挿入 dbh.do("DROP TABLE IF EXISTS people") dbh.do("CREATE TABLE people ( id INT UNSIGNED NOT NULL AUTO_INCREMENT, PRIMARY KEY (id), name CHAR(20) NOT NULL, height FLOAT)") rows = dbh.do("INSERT INTO people (name,height) VALUES('Wanda',62.5),('Robert',75),('Phillip',71.5),('Sarah',68)") printf "%d rows were inserted\n", rows sth = dbh.execute("SELECT * FROM people") p sth while row = sth.fetch do printf "ID: %d, Name: %s, Height: %.1f\n", row[0], row[1], row[2] end sth.finish #DB例外発生時の処理 rescue DBI::DatabaseError => e p "An error occurred" p "Error code: #{e.err}" p "Error message: #{e.errstr}" #切断漏れしないようにensureでdisconnectします。 ensure dbh.disconnect if dbh end
最初のrootとパスワードは、MySQLのインストール時に設定したものです。以下のサイトを参考に作りました(ってかコピーのようなもの)。gem経由でDBIを入れているのでrequire 'rubygems'が必須です。
あと5.0系じゃないとダメっぽいというのは上でも挙げてるけどこの情報なのかしら?