Perl DBI模块为数据库访问提供通用接口,你能够编写一个DBI脚本,它能够与许多不一样的数据库引擎一块儿工做,而无需更改。要使用DBI,必须为要访问的每种类型的数据库服务器安装DBI模块以及数据库驱动程序(DBD)模块,对于MySQL,此驱动程序是DBD::mysql
模块。html
MySQL发行版不包含Perl支持,对于Unix你能够从 http://search.cpan.org获取必要的模块,或者在Windows上使用ActiveState ppm程序,如下部分描述了如何执行此操做。
DBI/DBD接口须要Perl 5.6.0,而且首选5.6.1或更高版本,若是你有旧版本的Perl,则DBI不起做用,你应该使用DBD::mysql
4.009或更高版本,虽然早期版本可用,但它们不支持MySQL 8.0的完整功能。mysql
MySQL Perl支持要求你已经安装了MySQL客户端编程支持(库和头文件),大多数安装方法都安装了必要的文件。若是从Linux上的RPM文件安装MySQL,请务必同时安装开发人员RPM,客户端程序位于客户端RPM中,但客户端编程支持位于开发人员RPM中。sql
你能够从http://search.cpan.org上的CPAN(综合Perl存档网络)获取Perl支持所需的文件。shell
在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以前安装它。服务器
也能够以压缩tar档案的形式下载模块发行版并手动构建模块,例如,要解压缩并构建DBI发行版,请使用如下过程:网络
将发行包解压缩到当前目录:测试
shell> gunzip < DBI-VERSION.tar.gz | tar xvf -
此命令建立名为DBI-VERSION的目录。code
将位置更改成解压缩发行包的顶级目录:
shell> cd DBI-VERSION
构建发新版并编译全部内容:
shell> perl Makefile.PL shell> make shell> make test shell> make install
make test
命令很重要,由于它验证模块是否正常工做,请注意,在DBD::mysql
安装期间运行该命令以执行接口代码时,MySQL服务器必须正在运行或测试失败。
每当安装新版本的MySQL时,重建并从新安装DBD::mysql
发行版是个好主意,这可确保正确安装最新版本的MySQL客户端库。
若是你没有在系统目录中安装Perl模块的访问权限,或者若是要安装本地Perl模块,则如下引用可能有用:http://learn.perl.org/faq/per...。
在Windows上,你应该执行如下操做以使用ActiveState Perl安装MySQL DBD模块:
若有必要,请设置HTTP_proxy
变量,例如,你能够尝试这样的设置:
C:\> set HTTP_proxy=my.proxy.com:3128
启动PPM程序:
C:\> C:\perl\bin\ppm.pl
若是你以前没有这样作,请安装DBI:
ppm> install DBI
若是成功,请运行如下命令:
ppm> install DBD-mysql
此过程应与ActiveState Perl 5.6或更高版本一块儿使用。
若是没法使该过程起做用,则应安装ODBC驱动程序并经过ODBC链接到MySQL服务器:
use DBI; $dbh= DBI->connect("DBI:ODBC:$dsn",$user,$password) || die "Got error $DBI::errstr when connecting to $dsn\n";
若是Perl报告它找不到../mysql/mysql.so
模块,问题多是Perl没法找到libmysqlclient.so
共享库,你应该可以经过如下方法之一解决此问题:
libmysqlclient.so
复制到其余共享库所在的目录(多是/usr/lib
或/lib
)。DBD::mysql
的-L
选项以反映libmysqlclient.so
的实际位置。libmysqlclient.so
所在目录的路径名添加到/etc/ld.so.conf
文件中。libmysqlclient.so
所在目录的路径名添加到LD_RUN_PATH
环境变量中,有些系统使用LD_LIBRARY_PATH
。请注意,若是连接器没法找到其余库,你可能还须要修改-L
选项,例如,若是连接器找不到libc
,由于它位于/lib
中且link命令指定-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
添加到link命令(在编译Perl客户端时检查make mysql.so的输出),-L
选项应指定libgcc.a
在系统上所在目录的路径名。
这个问题的另外一个缘由多是Perl和MySQL都不是用gcc编译的,在这种状况下,你能够经过使用gcc编译来解决不匹配问题。