2.13. Perl安装注意事项
- 2.13.1. 在Unix中安装Perl
- 2.13.2. 在Windows下安装ActiveState Perl
- 2.13.3. 使用Perl DBI/DBD接口的问题
Perl对MySQL的支持借助DBI/DBD客户端接口。接口要求Perl 5.6.0或以后版本。如果你的Perl版本更旧,接口将不能工作。
如果想要在Perl DBI中使用事务,需要有1.2216版或更新版DBD::mysql。建议使用2.9003版或更新版。
如果你使用MySQL 4.1客户端库,必须使用DBD::mysql 2.9003或更新版。
MySQL分发版不包含Perl支持。可以从http://search.cpan.org获得Unix需要的模块,或在Windows中使用ActiveStateppm程序。以下章节描述了如何做。
如果你想要运行MySQL基准脚本,必须安装Perl支持。请参见7.1.4节,“MySQL基准套件”。
2.13.1. 在Unix中安装Perl
MySQL Perl支持也要求你安装了MySQL客户端编程支持(库和头文件)。大多数安装中安装了必要的文件。但是,如果你在Linux中从RPM文件安装MySQL,确保安装了开发者RPM。客户端程序在客户端RPM中,但是客户端编程支持在开发者RPM。
如果你想要安装Perl支持,需要的文件能从http://search.cpan.org的CPAN (Comprehensive Perl Archive Network)获得。
在Unix中安装Perl模块最简单的方法是使用CPAN模块。例如:
shell> perl -MCPAN -e shell
cpan> install DBI
cpan> install DBD::mysql
DBD::mysql安装运行许多测试。测试中使用默认用户名和密码尝试连接本地MySQL服务器。(默认用户名是Unix中的登录名和Windows中的ODBC。默认密码“没有密码。”)如果你不能通过这些值连接服务器 (例如,如果你的账户有密码),测试失败。可以使用force install DBD::mysql忽略失败的测试。
DBI需要Data::Dumper模块。应该可以安装;如果不能,应当在安装DBI前安装Data::Dumper模块。
还可以下载tar文件压缩格式的模块分发版,并手动构建模块。例如,解压缩和构建DBI分发版的过程为:
1. 将分发版解压缩到当前目录:
2. shell> gunzip < DBI-VERSION.tar.gz | tar xvf -
该命令创建目录 DBI-VERSION。
3. 进入解压缩分发版的顶级目录:
4. shell> cd DBI-VERSION
5. 构建分发版并编译:
6. shell> perl Makefile.PL
7. shell> make
8. shell> make test
9. shell> make install
make test命令很重要,因为它验证模块正在工作。注意:在你DBD::mysql安装期间运行该命令试验接口代码时,MySQL服务器必须正在运行,否则测试将失败。
无论何时你安装一个新版本的MySQL,重建并且重新安装DBD::mysql分发版是一个好主意,特别是在升级MySQL后,观察所有异常,如DBI脚本失败。
如果你没有权限在系统目录下安装Perl模块,或如果你安装本地Perl模块,下列参考书可以帮助你:http://servers.digitaldaze.com/extensions/perl/modules.html#modules
在标题“Installing New Modules that Require Locally Installed Modules”下面查找。
2.13.2. 在Windows下安装ActiveState Perl
在Windows中,应当按照以下步骤安装带ActiveState Perl的MySQL DBD模块:
·从http://www.activestate.com/Products/ActivePerl/获得ActiveState Perl并安装。
·打开控制台窗口(“DOS窗口)。
·如果需要,设置HTTP_proxy变量。例如,你可以试试:
·set HTTP_proxy=my.proxy.com:3128
·启动PPM程序:
·C:\> C:\perl\bin\ppm.pl
·如果你还没有安装DBI,则安装:
·ppm> install DBI
·如果成功,运行下面的命令:
·install\
·ftp://ftp.de.uu.net/pub/CPAN/authors/id/JWIED/DBD-mysql-1.2212.x86.ppd
该进程应当在ActiveState Perl 5.6或更新版本中工作。
如果你不能使上述步骤工作,应该安装MyODBC驱动程序并且通过ODBC连接MySQL服务器:
use DBI;
$dbh= DBI->connect("DBI:ODBC:$dsn",$user,$password) ||
die "Got error $DBI::errstr when connecting to $dsn\n";
2.13.3. 使用Perl DBI/DBD接口的问题
如果Perl报告它不能发现../mysql/mysql.so模块,可能试因为Perl不能定位共享库libmysqlclient.so。
可以使用下面的方法修复该问题:
·用perl Makefile.PL -static -config而不要用perl Makefile.PL编译DBD::mysql分发版。
·将libmysqlclient.so复制到其它共享库所在的目录 (可能为/usr/lib或/lib)。
·修改用来编译DBD::mysql的-L选项,反应libmysqlclient.so的实际位置。
·在Linux中,你可以将libmysqlclient.so的目录路径名增加到/etc/ld.so.conf文件。
·将libmysqlclient.so的目录路径名增加到LD_RUN_PATH环境变量。一些系统使用LD_LIBRARY_PATH。
注意如果连接器没有找到另一个库,你还可能需要修改-L选项。例如,如果因为libc在/lib下并且连接命令指定了-L/usr/lib,连接器不能找到它,将-L选项更改为-L/lib或在连接命令中增加-L/lib。
如果你遇到下面的DBD::mysql错误,你可能使用了gcc(或使用了用gcc编译的旧的二进制):
/usr/bin/perl: can't resolve symbol '__moddi3'
/usr/bin/perl: can't resolve symbol '__divdi3'
当构建mysql.so库是在连接命令中增加-L/usr/lib/gcc-lib/... -lgcc(当编译Perl客户端时检查生成mysql.so的make的输出)。-L选项应指定libgcc.a在系统中的安装目录的路径名。
该问题的另一个原因是Perl和MySQL没有用gcc编译。在这种情况下,你可以用gcc编译二者来解决。
当你运行测试时你会从DBD::mysql看见下面的错误:
t/00base............install_driver(mysql) failed:
Can't load '../blib/arch/auto/DBD/mysql/mysql.so' for module DBD::mysql:
../blib/arch/auto/DBD/mysql/mysql.so: undefined symbol:
uncompress at /usr/lib/perl5/5.00503/i586-linux/DynaLoader.pm line 169.
这意味着你需要在连接行包括-lz压缩库。可以通过更改文件lib/DBD/mysql/Install.pm的下列行来实现:
$sysliblist .= " -lm";
更改为:
$sysliblist .= " -lm -lz";
然后,你必须运行make realclean 然后重新安装。
如果你想要在SCO上安装DBI,需要在DBI-xxx和每个子目录中编辑Makefile。请注意下面的更新假定使用gcc 2.95.2或更新版:
旧: 新:
CC = cc CC = gcc
CCCDLFLAGS = -KPIC -W1,-Bexport CCCDLFLAGS = -fpic
CCDLFLAGS = -wl,-Bexport CCDLFLAGS =
LD = ld LD = gcc -G -fpic
LDDLFLAGS = -G -L/usr/local/lib LDDLFLAGS = -L/usr/local/lib
LDFLAGS = -belf -L/usr/local/lib LDFLAGS = -L/usr/local/lib
LD = ld LD = gcc -G -fpic
OPTIMISE = -OdOPTIMISE = -O1
旧:
CCCFLAGS = -belf -dy -w0 -U M_XENIX -DPERL_SCO5 -I/usr/local/include
新:
CCFLAGS = -U M_XENIX -DPERL_SCO5 -I/usr/local/include
这些更改是必需的,因为用icc或cc编译的Perl动态装载器不装载DBI模块。
如果你想要在不支持动态链接(例如 SCO)的系统中使用Perl模块,可以生成一个包括DBI和DBD::mysql的静态版本的Perl。方法是生成一个用DBI代码连接的Perl版本,并将它安装到当前Perl的顶级目录。然后构建一个含DBD代码连接的Perl版本并安装。
在SCO中,必须将下面的环境变量设置为:
LD_LIBRARY_PATH=/lib:/usr/lib:/usr/local/lib:/usr/progressive/lib
Or:
LD_LIBRARY_PATH=/usr/lib:/lib:/usr/local/lib:/usr/ccs/lib:\
/usr/progressive/lib:/usr/skunk/lib
LIBPATH=/usr/lib:/lib:/usr/local/lib:/usr/ccs/lib:\
/usr/progressive/lib:/usr/skunk/lib
MANPATH=scohelp:/usr/man:/usr/local1/man:/usr/local/man:\
/usr/skunk/man:
首先,在DBD分发版的安装目录运行下述命令来创建一个包括静态连接的DBD模块的Perl:
shell> perl Makefile.PL -static -config
shell> make
shell> make install
shell> make perl
然后必须安装新的Perl。make perl的输出表示安装时需要执行的make命令。在SCO中,为make -f Makefile.aperl inst_perl MAP_TARGET=perl。
然后,使用刚刚创建的Perl,在DBD::mysql分发版的安装目录运行下述命令来创建另一个Perl,应包括静态连接的DBD::mysql:
shell> perl Makefile.PL -static -config
shell> make
shell> make install
shell> make perl
最后,应当安装新的Perl。make perl的输出指示了使用的命令。
这是MySQL参考手册的翻译版本,关于MySQL参考手册,请访问dev.mysql.com.。原始参考手册为英文版,与英文版参考手册相比,本翻译版可能不是最新的。