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については

をざっくり見て勝手に概要の概要は分かった気になりました。…まぁ本当使えれば良いので、いまのところ。

追記。
rubyからMySQLの呼び出し。

http://toriaezuiwasete.cocolog-nifty.com/blog/2007/07/rubymysql_dac7.html

に倣ってやってみたんだけど、[BUG] Segmentation faultが出る。

http://runolog.blog28.fc2.com/blog-entry-1.html

のようにDBIをかませてみても同じエラー。なんだろう…。またgoogleさんの助けが必要なようです。

Ruby/DBIでMySQLドライバを使うとSegmentation faultになる - KEEP CALM AND DRINK BEER

によるとMySQLがダメなのか?

MySQL :: MySQL Ruby Module - Segmentation Fault - Windows

この症状なんだけど…。解決方法が…?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系じゃないとダメっぽいというのは上でも挙げてるけどこの情報なのかしら?

scat.rb:ERROR