perl DBI模块和DBD-mysql模块 手动安装

作者:csuper 发表于:2017-01-16

 

首先,来一段代码来自NinGoo的检测系统中已经按照的Perl模块:

[zhuxu@xentest9-vm1 ~]$ cat ./check_module.pl
#!/usr/bin/perl
use ExtUtils::Installed;
my $inst = ExtUtils::Installed->new();
print join “\n”,$inst->modules();
print “\n”;
[zhuxu@xentest9-vm1 ~]$
[zhuxu@xentest9-vm1 ~]$ ./check_module.pl
Perl
手动安装模块一般步骤只要到CPAN查找下载模块包,然后:[生成makefile] perl Makefile.PL [建立模块] make [测试模块] make test [安装模块] make install 。
下面进行Perl的DBI和DBD:mysql模块的安装,模块安装在自定义目录下:
(一) DBI模块的安装
1、下载安装DBI模块
DBI模块的具体下载地址:http://search.cpan.org/~timb/DBI-1.616/,具体如下:
[zhuxu@xentest9-vm1 ~]$ wget http://search.cpan.org/CPAN/authors/id/T/TI/TIMB/DBI-1.616.tar.gz
–22:11:19–  http://search.cpan.org/CPAN/authors/id/T/TI/TIMB/DBI-1.616.tar.gz
Resolving search.cpan.org… 212.117.177.118, 194.106.223.155
Connecting to search.cpan.org|212.117.177.118|:80… connected.
HTTP request sent, awaiting response… 302 Found
Location: http://ftp.belnet.be/mirror/ftp.cpan.org/authors/id/T/TI/TIMB/DBI-1.616.tar.gz [following]
–22:11:35–  http://ftp.belnet.be/mirror/ftp.cpan.org/authors/id/T/TI/TIMB/DBI-1.616.tar.gz
Resolving ftp.belnet.be… 193.190.67.15, 2001:6a8:a40::21
Connecting to ftp.belnet.be|193.190.67.15|:80… connected.
HTTP request sent, awaiting response… 200 OK
Length: 576803 (563K) [application/x-gzip]
Saving to: `DBI-1.616.tar.gz’
100%[===============================>] 576,803     20.1K/s   in 28s
22:12:06 (19.8 KB/s) – `DBI-1.616.tar.gz’ saved [576803/576803]
[zhuxu@xentest9-vm1 ~]$ mkdir -p My_Perl_Module/DBI
[zhuxu@xentest9-vm1 ~]$ tar -zxvf DBI-1.616.tar.gz
[zhuxu@xentest9-vm1 ~]$ cd DBI-1.616
[zhuxu@xentest9-vm1 DBI-1.616]$ perl Makefile.PLPREFIX=”/home/zhuxu/My_Perl_Module/DBI”
[zhuxu@xentest9-vm1 DBI-1.616]$ make
[zhuxu@xentest9-vm1 DBI-1.616]$ make test
[zhuxu@xentest9-vm1 DBI-1.616]$ make install
Installing /home/zhuxu/My_Perl_Module/DBI/lib64/perl5/site_perl/5.8.8/x86_64-linux-thread-multi/auto/DBI/dbi_sql.h
Installing /home/zhuxu/My_Perl_Module/DBI/lib64/perl5/site_perl/5.8.8/x86_64-linux-thread-multi/auto/DBI/DBI.so
Installing /home/zhuxu/My_Perl_Module/DBI/lib64/perl5/site_perl/5.8.8/x86_64-linux-thread-multi/auto/DBI/dbivport.h
Installing /home/zhuxu/My_Perl_Module/DBI/bin/dbiproxy
Installing /home/zhuxu/My_Perl_Module/DBI/bin/dbiprof
Installing /home/zhuxu/My_Perl_Module/DBI/bin/dbilogstrip
Writing /home/zhuxu/My_Perl_Module/DBI/lib64/perl5/site_perl/5.8.8/x86_64-linux-thread-multi/auto/DBI/.packlist
Appending installation info to /home/zhuxu/My_Perl_Module/DBI/lib64/perl5/5.8.8/x86_64-linux-thread-multi/perllocal.pod
[zhuxu@xentest9-vm1 DBI-1.616]$
[zhuxu@xentest9-vm1 DBI]$ cd ~/My_Perl_Module/DBI/
[zhuxu@xentest9-vm1 DBI]$ ll
total 24
drwxr-xr-x 6 zhuxu users 4096 Feb 22 22:23 .
drwxr-xr-x 3 zhuxu users 4096 Feb 22 22:19 ..
drwxr-xr-x 2 zhuxu users 4096 Feb 22 22:23 bin
drwxr-xr-x 3 zhuxu users 4096 Feb 22 22:23 lib
drwxr-xr-x 3 zhuxu users 4096 Feb 22 22:23 lib64
drwxr-xr-x 3 zhuxu users 4096 Feb 22 22:23 share
2、测试使用DBI
[zhuxu@xentest9-vm1 ~]$ cat 1.pl
#!/usr/bin/perl -w
use strict;
use DBI;
[zhuxu@xentest9-vm1 ~]$ ./1.pl
Can’t locate DBI.pm in @INC (@INC contains: /usr/lib64/perl5/site_perl/5.8.8/x86_64-linux-thread-multi /usr/lib64/perl5/site_perl/5.8.7/x86_64-linux-thread-multi /usr/lib64/perl5/site_perl/5.8.6/x86_64-linux-thread-multi /usr/lib64/perl5/site_perl/5.8.5/x86_64-linux-thread-multi /usr/lib/perl5/site_perl/5.8.8 /usr/lib/perl5/site_perl/5.8.7 /usr/lib/perl5/site_perl/5.8.6 /usr/lib/perl5/site_perl/5.8.5 /usr/lib/perl5/site_perl /usr/lib64/perl5/vendor_perl/5.8.8/x86_64-linux-thread-multi /usr/lib64/perl5/vendor_perl/5.8.7/x86_64-linux-thread-multi /usr/lib64/perl5/vendor_perl/5.8.6/x86_64-linux-thread-multi /usr/lib64/perl5/vendor_perl/5.8.5/x86_64-linux-thread-multi /usr/lib/perl5/vendor_perl/5.8.8 /usr/lib/perl5/vendor_perl/5.8.7 /usr/lib/perl5/vendor_perl/5.8.6 /usr/lib/perl5/vendor_perl/5.8.5 /usr/lib/perl5/vendor_perl /usr/lib64/perl5/5.8.8/x86_64-linux-thread-multi /usr/lib/perl5/5.8.8 .) at ./1.pl line 3.
BEGIN failed–compilation aborted at ./1.pl line 3.
[zhuxu@xentest9-vm1 ~]$ ./check_module.pl
Perl
由于不是安装在默认的路径,这样Perl在默认的模块和库的按照路径下找不到。查看Perl查找的默认路径有那些可以通过命令:perl -e ‘print join “\n”,@INC’ 进行查看。
所以,若要使用安装在非标准目录中的模块,必须使用命令use lib。这时Perl在搜索它自己的目录之前,首先搜索该目录,找出它要的模块。另外,不能将模块在不同操作系统的计算机之间移动。经过编译的模块只能在一种类型的操作系统上运行。
[zhuxu@xentest9-vm1 ~]$ find /home/zhuxu/My_Perl_Module/ -name “*pm” | grep -i DBI.pm
/home/zhuxu/My_Perl_Module/DBI/lib64/perl5/site_perl/5.8.8/x86_64-linux-thread-multi/Bundle/DBI.pm
/home/zhuxu/My_Perl_Module/DBI/lib64/perl5/site_perl/5.8.8/x86_64-linux-thread-multi/DBI.pm
[zhuxu@xentest9-vm1 ~]$
–这样就能执行成功
[zhuxu@xentest9-vm1 ~]$ cat 1.pl
#!/usr/bin/perl -w
use strict;
use lib “/home/zhuxu/My_Perl_Module/DBI/lib64/perl5/site_perl/5.8.8/x86_64-linux-thread-multi”;
require DBI;
print “Hello World!\n”;
[zhuxu@xentest9-vm1 ~]$
[zhuxu@xentest9-vm1 ~]$ ./1.pl
Hello World!
[zhuxu@xentest9-vm1 ~]$
上面说明DBI模块可以正常使用。
(二)安装Perl DBD::mysql驱动
1、下载安装DBD::mysql模块
Perl连接数据库需要通过DBI模块和相应数据库的DBD驱动,这些可以从CPAN下载相应DBD驱动。我想要连接MySQL,就还需要安装Perl DBD::mysql驱动,下载地址:http://search.cpan.org/~capttofu/DBD-mysql-4.018/,具体如下:
[zhuxu@xentest9-vm1 ~]$ wget http://search.cpan.org/CPAN/authors/id/C/CA/CAPTTOFU/DBD-mysql-4.018.tar.gz
[zhuxu@xentest9-vm1 ~]$ mkdir -p My_Perl_Module/DBD_MySQL
[zhuxu@xentest9-vm1 ~]$ tar -zxvf DBD-mysql-4.018.tar.gz
[zhuxu@xentest9-vm1 ~]$ cd DBD-mysql-4.018
[zhuxu@xentest9-vm1 DBD-mysql-4.018]$ perl Makefile.PL PREFIX=”/home/zhuxu/My_Perl_Module/DBD_MySQL”
Can’t locate DBI/DBD.pm in @INC (@INC contains: /usr/lib64/perl5/site_perl/5.8.8/x86_64-linux-thread-multi /usr/lib64/perl5/site_perl/5.8.7/x86_64-linux-thread-multi /usr/lib64/perl5/site_perl/5.8.6/x86_64-linux-thread-multi /usr/lib64/perl5/site_perl/5.8.5/x86_64-linux-thread-multi /usr/lib/perl5/site_perl/5.8.8 /usr/lib/perl5/site_perl/5.8.7 /usr/lib/perl5/site_perl/5.8.6 /usr/lib/perl5/site_perl/5.8.5 /usr/lib/perl5/site_perl /usr/lib64/perl5/vendor_perl/5.8.8/x86_64-linux-thread-multi /usr/lib64/perl5/vendor_perl/5.8.7/x86_64-linux-thread-multi /usr/lib64/perl5/vendor_perl/5.8.6/x86_64-linux-thread-multi /usr/lib64/perl5/vendor_perl/5.8.5/x86_64-linux-thread-multi /usr/lib/perl5/vendor_perl/5.8.8 /usr/lib/perl5/vendor_perl/5.8.7 /usr/lib/perl5/vendor_perl/5.8.6 /usr/lib/perl5/vendor_perl/5.8.5 /usr/lib/perl5/vendor_perl /usr/lib64/perl5/5.8.8/x86_64-linux-thread-multi /usr/lib/perl5/5.8.8 .)at Makefile.PL line 24.
这时候报错,Makefile.pl在24行报错,说找不到DBI/DBD.pm模块,这个模块在我们上面自己按照的DBI目录下,需要把路径指定一下。只要在Makefile.pl的第24行添加下面的use lib语句:
23 use File::Basename;
24 use lib “/home/zhuxu/My_Perl_Module/DBI/lib64/perl5/site_perl/5.8.8/x86_64-linux-thread-multi”;
25 require DBI::DBD;
再执行一次:
[zhuxu@xentest9-vm1 DBD-mysql-4.018]$ perl Makefile.PL PREFIX=”/home/zhuxu/My_Perl_Module/DBD_MySQL”
Can’t exec “mysql_config”: No such file or directory at Makefile.PL line 83.

Cannot find the file ‘mysql_config’! Your execution PATH doesn’t seem
not contain the path to mysql_config. Resorting to guessed values!
Can’t exec “mysql_config”: No such file or directory at Makefile.PL line 465.
Can’t find mysql_config. Use –mysql_config option to specify where mysql_config is located
Can’t exec “mysql_config”: No such file or directory at Makefile.PL line 465.
Can’t find mysql_config. Use –mysql_config option to specify where mysql_config is located
Can’t exec “mysql_config”: No such file or directory at Makefile.PL line 465.
Can’t find mysql_config. Use –mysql_config option to specify where mysql_config is located
….
这个时候可以执行了,不过报新错误。安装DBD::mysql需要配置mysql_config,参考编译x86_64下静态DBD::MySQL模块,安装MYSQL。安装完成后,查找MYSQL安装目录下的mysql_config
[zhuxu@xentest9-vm1 ~]$ sudo ls -l /home/mysql/mysql-5.1.47/bin/mysql_config
-rwxr-xr-x 1 mysql mysql 6188 Feb 23 20:48 /home/mysql/mysql-5.1.47/bin/mysql_config
接下来就可以进行正常的安装了:
[zhuxu@xentest9-vm1 DBD-mysql-4.018]$ sudo perl Makefile.PLPREFIX=”/home/zhuxu/My_Perl_Module/DBD_MySQL” \
> –mysql_config=/home/mysql/mysql-5.1.47/bin/mysql_config
[zhuxu@xentest9-vm1 DBD-mysql-4.018]$ sudo make
[zhuxu@xentest9-vm1 DBD-mysql-4.018]$ sudo make test
[zhuxu@xentest9-vm1 DBD-mysql-4.018]$ sudo make install
Installing /home/zhuxu/My_Perl_Module/DBD_MySQL/lib64/perl5/site_perl/5.8.8/x86_64-linux-thread-multi/auto/DBD/mysql/mysql.bs
Installing /home/zhuxu/My_Perl_Module/DBD_MySQL/lib64/perl5/site_perl/5.8.8/x86_64-linux-thread-multi/auto/DBD/mysql/mysql.so
Files found in blib/arch: installing files in blib/lib into architecture dependent library tree
Installing /home/zhuxu/My_Perl_Module/DBD_MySQL/lib64/perl5/site_perl/5.8.8/x86_64-linux-thread-multi/Bundle/DBD/mysql.pm
Installing /home/zhuxu/My_Perl_Module/DBD_MySQL/lib64/perl5/site_perl/5.8.8/x86_64-linux-thread-multi/DBD/mysql.pm
Installing /home/zhuxu/My_Perl_Module/DBD_MySQL/lib64/perl5/site_perl/5.8.8/x86_64-linux-thread-multi/DBD/mysql/INSTALL.pod
Installing /home/zhuxu/My_Perl_Module/DBD_MySQL/lib64/perl5/site_perl/5.8.8/x86_64-linux-thread-multi/DBD/mysql/GetInfo.pm
Installing /home/zhuxu/My_Perl_Module/DBD_MySQL/share/man/man3/Bundle::DBD::mysql.3pm
Installing /home/zhuxu/My_Perl_Module/DBD_MySQL/share/man/man3/DBD::mysql::INSTALL.3pm
Installing /home/zhuxu/My_Perl_Module/DBD_MySQL/share/man/man3/DBD::mysql.3pm
Writing /home/zhuxu/My_Perl_Module/DBD_MySQL/lib64/perl5/site_perl/5.8.8/x86_64-linux-thread-multi/auto/DBD/mysql/.packlist
Appending installation info to /home/zhuxu/My_Perl_Module/DBD_MySQL/lib64/perl5/5.8.8/x86_64-linux-thread-multi/perllocal.pod
[zhuxu@xentest9-vm1 DBD-mysql-4.018]$
在安装目录下查询模块:
[zhuxu@xentest9-vm1 ~]$ find /home/zhuxu/My_Perl_Module/DBD_MySQL -name “*.pm” | grep DBD
/home/zhuxu/My_Perl_Module/DBD_MySQL/lib64/perl5/site_perl/5.8.8/x86_64-linux-thread-multi/Bundle/DBD/mysql.pm
/home/zhuxu/My_Perl_Module/DBD_MySQL/lib64/perl5/site_perl/5.8.8/x86_64-linux-thread-multi/DBD/mysql.pm
/home/zhuxu/My_Perl_Module/DBD_MySQL/lib64/perl5/site_perl/5.8.8/x86_64-linux-thread-multi/DBD/mysql/GetInfo.pm
2、测试使用DBD::mysql
[zhuxu@xentest9-vm1 ~]$ cat 2.pl
#!/usr/bin/perl -w
use strict;
use lib “/home/zhuxu/My_Perl_Module/DBI/lib64/perl5/site_perl/5.8.8/x86_64-linux-thread-multi”;
require DBI;
use lib “/home/zhuxu/My_Perl_Module/DBD_MySQL/lib64/perl5/site_perl/5.8.8/x86_64-linux-thread-multi”;
require DBD::mysql;     # 这句其实写不写都可以. DBI在需要使用DBD::mysql时候会自己搜索使用.
my $user = “root”;
my $passwd;
my $host = “10.254.5.151″;
my $db = “test”;
my $data_source = “DBI:mysql:database=$db;host=$host”;
my $dbh = DBI->connect($data_source,$user,$passwd,{‘RaiseError’=>1}) ;
my $sql = qq{select now()};
my $sth = $dbh->prepare($sql);
$sth->execute();
my $set;
$sth->bind_columns(undef,\$set);
while($sth->fetch()){
print $set.”\n”;
}
$sth->finish();
$dbh->disconnect();
[zhuxu@xentest9-vm1 ~]$ ./2.pl
Can’t load ‘/home/zhuxu/My_Perl_Module/DBD_MySQL/lib64/perl5/site_perl/5.8.8/x86_64-linux-thread-multi/auto/DBD/mysql/mysql.so‘ for module DBD::mysql: libmysqlclient.so.16: cannot open shared object file: No such file or directory at /usr/lib64/perl5/5.8.8/x86_64-linux-thread-multi/DynaLoader.pm line 230.
at ./2.pl line 6

Compilation failed in require at ./2.pl line 6.
执行编译错误,说找不到对应的libmysqlclient.so.16,使用ldd命令查看修复:
[zhuxu@xentest9-vm1 ~]$ ldd/home/zhuxu/My_Perl_Module/DBD_MySQL/lib64/perl5/site_perl/5.8.8/x86_64-linux-thread-multi/auto/DBD/mysql/mysql.so
libmysqlclient.so.16 => not found
libz.so.1 => /usr/lib64/libz.so.1 (0x00002ad042acc000)
libcrypt.so.1 => /lib64/libcrypt.so.1 (0x00002ad042ce0000)
libnsl.so.1 => /lib64/libnsl.so.1 (0x00002ad042f19000)
libm.so.6 => /lib64/libm.so.6 (0x00002ad043131000)
libc.so.6 => /lib64/libc.so.6 (0x00002ad0433b4000)
/lib64/ld-linux-x86-64.so.2 (0x00000039df600000)
[zhuxu@xentest9-vm1 ~]$ sudo ls -l /home/mysql/mysql-5.1.47/lib/mysql/libmysqlclient.so.16
lrwxrwxrwx 1 mysql mysql 24 Feb 23 20:48 /home/mysql/mysql-5.1.47/lib/mysql/libmysqlclient.so.16 -> libmysqlclient.so.16.0.0
[zhuxu@xentest9-vm1 ~]$
[zhuxu@xentest9-vm1 ~]$ ll /usr/lib64/libmysqlclient.so.16
ls: libmysqlclient.so.16: No such file or directory
[zhuxu@xentest9-vm1 ~]$
[zhuxu@xentest9-vm1 ~]$ sudo cp /home/mysql/mysql-5.1.47/lib/mysql/libmysqlclient.so.16 /usr/lib64/libmysqlclient.so.16
[zhuxu@xentest9-vm1 ~]$ ll /usr/lib64/libmysqlclient.so.16
-rwxr-xr-x 1 root root 1498934 Feb 23 21:48 /usr/lib64/libmysqlclient.so.16
[zhuxu@xentest9-vm1 ~]$ ldd/home/zhuxu/My_Perl_Module/DBD_MySQL/lib64/perl5/site_perl/5.8.8/x86_64-linux-thread-multi/auto/DBD/mysql/mysql.so
libmysqlclient.so.16 => /usr/lib64/libmysqlclient.so.16 (0x00002ae9549a2000)
libz.so.1 => /usr/lib64/libz.so.1 (0x00002ae954c42000)
libcrypt.so.1 => /lib64/libcrypt.so.1 (0x00002ae954e56000)
libnsl.so.1 => /lib64/libnsl.so.1 (0x00002ae95508f000)
libm.so.6 => /lib64/libm.so.6 (0x00002ae9552a7000)
libc.so.6 => /lib64/libc.so.6 (0x00002ae95552a000)
/lib64/ld-linux-x86-64.so.2 (0x00000039df600000)
[zhuxu@xentest9-vm1 ~]$
[zhuxu@xentest9-vm1 ~]$ ./2.pl
2011-02-23 21:52:52
终于可以执行了。


DBI的部分我已经试验过,上面说的都是正确的,在make test的时候回报错:

make:[test_dynamic] Error 255 报这个错不用管,直接make install就可以了 

perl DBI模块和DBD-mysql模块 手动安装

版权声明

本文仅代表作者观点,不代表Csuper立场。
本文系作者授权百度百家发表,未经许可,不得转载。