DBIが動かないのですべて最初からやりなおす

問題点:DBIが何も応答しない。
結論:DBIを動かすにはDBD::mysqlがいる。でもDBD::mysqlをインストールするのは大変。



perlスクリプト内で「use DBI」をやってから、データベースに接続を試みても、何も応答がない。そしてその行以降のプログラムが動かなくなる。

googleでひたすら原因調べるが、いつまでたってもわからず。
イライラが限界にきたので、OSから入れ直すことにしようと思った。というのも、2台PCがあって、もうひとつの方では何の問題もなくDBIが使えたから。


OS再インストールしたあとに気づいたことだが、DBIが動かない原因は、DBD::mysqlをインストールしていないためということをつきとめた。
http://oshiete1.goo.ne.jp/qa4116519.html



以下やったことを順序どおりにメモっとく。
1、ubuntuインスコ
2、cpanをインストール
3、なんとなくDB_Fileをインストール
ここでエラー
cpanにてinstall DB_Fileしたが
/usr/lib/perl/5.8/CORE/perl.h:420:24: error: sys/types.h: No such file or directory
などたくさんエラーがでてきた。

まず
http://www29.atwiki.jp/hamasta/pages/40.html
を参考に
Synapticパッケージマネージャで libstdc++6 と
libstdc++6-4.2-dev をインストールした

すぐメモしなかったのでうる覚えだが、たしかこれでエラーがかなり減った記憶がある。

で、たしかもういちどcpan
install DB_File
とすると、

Running install for module DB_File
Running make for P/PM/PMQS/DB_File-1.817.tar.gz
Is already unwrapped into directory /root/.cpan/build/DB_File-1.817
Has already been processed within this session
Running make test
Can't test without successful make
Running make install
make had returned bad status, install seems impossible

こんなエラーがでてきた。
で、どうやらこういうエラー(すでにあります的なエラー)がでたら

cd /root/.cpan/build/DB_File-1.817.tar.gz
perl Makefile.PL
make test
make install

こういう感じに書けば再インストールできそうだとわかった。


で、それをやってみたら、たしか

:~/.cpan/build/DB_File-1.817# perl Makefile.PL
Argument "6.30_01" isn't numeric in subroutine entry at Makefile.PL line 4.
Parsing config.in...
Looks Good.
WARNING: LICENSE is not a known parameter.
'LICENSE' is not a known MakeMaker parameter name.
Note (probably harmless): No library found for -ldb
Writing Makefile for DB_File
root@ten-desktop:~/.cpan/build/DB_File-1.817# make test
Skip blib/lib/DB_File.pm (unchanged)
cc -c -I/usr/local/BerkeleyDB/include -D_REENTRANT -D_GNU_SOURCE -DTHREADS_HAVE_PIDS -DDEBIAN -fno-strict-aliasing -pipe -I/usr/local/include -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -O2 -DVERSION=\"1.817\" -DXS_VERSION=\"1.817\" -fPIC "-I/usr/lib/perl/5.8/CORE" -D_NOT_CORE -DmDB_Prefix_t=size_t -DmDB_Hash_t=u_int32_t version.c
version.c:30:16: error: db.h: No such file or directory
make: *** [version.o] エラー 1

たしかこのエラーがでてきた。

ググって
同じ疑問を発見
http://oshiete1.goo.ne.jp/qa2678787.html

でも結論からいうと、
まずはBerkeleyDBをインストールしなければならない。
そのあたりについてはここを見るとまとまってる。
http://d.hatena.ne.jp/ketuname/20070502
注意:パスで「BerkeleyDB.4.5」とあるところは、自分の持っているバージョンに書き換える必要がある。(自分はたとえば「INCLUDE = /root/local/BerkeleyDB.4.7/include」とやった)


4、cpan にて「install DBI」でDBIインスコ→一発ok!
5、cpan にて「install DBD::mysql」でいよいよDBD::mysqlインストール→エラーorz

Synapticパッケージマネージャーにて、「libmysqlclient15-dev」を検索してインストール。


http://www.icdevgroup.org/pipermail/interchange-users/2003-October/036155.html
引用

DBD::mysql's makefile is trying to get the mysql installation parameters
from mysql_config, but it can't find that executable in the usual paths for
binaries (/usr/bin, /usr/local/bin, etc). You should 'find' or 'locate'
mysql_config on your system, and symlink or copy it into one of the
directories above. Alternately, you go into ~/.cpan/build/DBD::mysql-XXX/
and run MakeFile.PL with user-specified flags per the spec you get from

perl Makefile.PL -h

  • Ed L.

ここに書いてある通りにやった。

補足:
自分の場合mysql_configは「/usr/bin」にあった。mysql_configを「~/.cpan/build/DBD-mysql-4.007」にコピー。
で、

perl Makefile.PL
make test
make install

・・・

うまくいったっぽい。
一応確認作業。
下はモジュールがインストールできたか確認するためのperlプログラム。

#!/usr/bin/perl

print "this is test.\n";

print "perl version: $] (",sprintf("%vd", $^V),")\n\n";

BEGIN{ unshift(@INC,'./'); $ENV{'PERL5LIB'}='./'; }

my @modules = qw(
CGI
DBI
DBD::SQLite
DBD::mysql
Encode
DB_File
SDBM_File
Switch
NOMODULE
ReadOnly
);

foreach (@modules){
print "$_: ";
eval "use $_;";
print (eval "\$${_}::VERSION" || 'not available');
print "\n";
}


print "test : connecting mysql\n";
# data source
$d = 'DBI:mysql:test:Localhost';
# user name
$u = 'root';
# password
$p = '';
# connecting
$dbh = DBI->connect($d, $u, $p) or print "Can't connect to MySQL\n";

print "\n";

これでモジュールが入っていることが確認できた。
見事「Can't connect to MySQL」も表示された。今までこのエラーすらでなかった。その原因は最初にも書いたように、DBD::mysqlをインストールしてなかったため。


さてDBIが正常に動いたところで、次にxamppを入れて、それで動くか確認しよ。

・・・

今xamppインスコしてDBI動かしたら見事動いた。
かれこれこの問題で4日くらいつまっていたけど、こうして解決できてよかったよかった。