几天前,要为公司架设Bugzilla系统,因为一个DBD::mysql的问题,花费了整整一宿的时间。该问题的解决,又是在浩瀚的英文互联网资源的帮助下得到的解决。中文资料,除了复制就是粘贴,根本没有解决问题的方法,而且按照资料根本无法安装成功,也不知道这些人是怎么弄成的。现在就做个简单的中文版的备份吧。
由于checksetup.pl脚本的存在,其实bugzilla的安装应该是非常顺利的,10多分钟,基本所有bugzilla需要的cpan扩展包都安装成功,最后出了一个数据库选择的提示。bugzilla目前可支持MySQL、PostgreSQL、Oracle三种数据库,需要要按自己的实际环境安装不同数据库的CPAN模块。所有的中文文档里,对这个步骤的形容都是跟其他模块一样,一条“/usr/bin/perl install-module.pl DBD::mysql”就可以搞定,可实际上……并非如此,起码我这么装没有成功,我个人估计,是因为他们安装Bugzilla的服务器跟mysql所运行的服务器在一台上面。我要安装Bugzilla的服务器,只编译安装了mysqlclient,并没有server存在。
在安装Bugzilla的时候,通过其提供的“install-module.pl”命令安装的CPAN模块,都是装在Bugzilla所在目录的lib目录下。而手动下载CPAN模块并安装的时候,在我的这台服务器上,默认是安装到“/usr/lib/perl5/5.8.5/”目录下的。这两个目录的结构相同。Bugzilla的checksetup.pl脚本在检测安装所需模块的时候,这连个路径都会扫描。
通过http://search.cpan.org搜索“DBD-mysql”,并下载“DBD::mysql”。解压缩后运行下面命令:
perl Makefile.PL –libs=”-L/usr/local/mysql-5.1.36/lib/mysql -lmysqlclient -L/usr/lib -lz” –cflags=-I/usr/local/mysql-5.1.36/include/mysql –mysql_config=/usr/local/mysql-5.1.36/bin/mysql_config –testhost=192.168.1.208 –testdb=test –testuser=bugs –testpassword=bugs
其中的“/usr/local/mysql-5.1.36”是安装mysqlclient的路径。在安装DBD::mysql的时候,会检测与mysql服务器的联通性,这里的testhost、testdb、testuser、testpassword就是做这个用的。用户bugs我事先在mysql服务器添加好了。
安装好“DBD::mysql”后,再次运行checksetup.pl脚本,出现了如下提示:
Reading ./localconfig…
Checking for DBD-mysql (v2.9003) ok: found v4.005
Had to create DBD::mysql::dr::imp_data_size unexpectedly at /usr/lib/perl5/site_perl/5.8.5/i386-linux-thread-multi/DBI.pm line 1213, <DATA> line 228.
Use of uninitialized value in subroutine entry at /usr/lib/perl5/site_perl/5.8.5/i386-linux-thread-multi/DBI.pm line 1213, <DATA> line 228.
Had to create DBD::mysql::db::imp_data_size unexpectedly at /usr/lib/perl5/site_perl/5.8.8/i386-linux-thread-multi/DBI.pm line 1243, <DATA> line 228.
Use of uninitialized value in subroutine entry at /usr/lib/perl5/site_perl/5.8.8/i386-linux-thread-multi/DBI.pm line 1243, <DATA> line 228.
There was an error connecting to MySQL:Undefined subroutine &DBD::mysql::db::_login called at /usr/lib/perl5/site_perl/5.8.8/i386-linux-thread-multi/DBD/mysql.pm line 142, <DATA> line 228.
在网上查了很长时间,按照网上的描述,修改localconfig文件n次,重新安装配置DBD::mysqln次,依然未果,而且就网上的说法,造成这个错误提示的原因有很多种。正在抓耳挠腮,郁闷之极的时候,突然看到一个邮件里表里有说mysql lib的问题。马上想到自己安装mysql的时候,是rpm卸载掉系统默认的4.0后,手动编译安装的mysql5.1。赶紧运行ldconfig,靠的,还真没有mysql的lib。修改/etc/ld.so.conf文件,把mysql的lib路径加进去,运行ldconfig。然后回到bugzilla目录重新运行checksetup.pl,一切哦耶了。
在中文论坛里,也看到一些人说mysql本来是4.x,bugzilla运行正常,后来升级成5.x之后,就出错了。这些错误应该也是跟我的问题一样,跟mysql的版本没什么关系。
关于ldconfig的问题,再次提醒下自己……http://kevin.9511.net/archives/177.html