Perl對MySQL的支持借助DBI
/DBD
客戶接口而提供。見20.5 MySQL Perl API。Perl DBD
/DBI
客戶代碼要求Perl 5.004或以后版本。如果你有Perl的一個更舊的版本,接口將不能工作。
MySQL Perl支持也要求你安裝了MySQL客戶編程支持。如果你從RPM文件安裝MySQL,客戶程序在客戶RPM中,但是客戶編程支持在開發(fā)者RPM。確定你安裝了后一個RPM 。
對于版本3.22.8,Perl支持是與主要MySQL發(fā)行版本單獨(dú)分發(fā)。如果你想要安裝Perl支持,你需要的文件能從http://www./Contrib獲得。
Perl 分發(fā)以壓縮的tar
檔案提供,并且有一個類似“MODULE-VERSION.tar.gz”的名字,這里MODULE
是模塊名字并且VERSION
是版本號。你應(yīng)該得到Data-Dumper
、DBI和Msql-Mysql-modules
分發(fā)并按此次序安裝他們。安裝過程顯示出在下面,顯示的例子針對Data-Dumper
模塊, 但是所有3個過程是相同的。
- 解包分發(fā)到當(dāng)前目錄:
shell> gunzip < Data-Dumper-VERSION.tar.gz | tar xvf -
這個命令創(chuàng)建的一個名為“Data-Dumper-VERSION”的目錄。
- 進(jìn)入解包分發(fā)的頂級目錄:
shell> cd Data-Dumper-VERSION
- 構(gòu)造分發(fā)并且編譯所有東西:
shell> perl Makefile.PLshell> makeshell> make testshell> make install
make test
命令很重要,因?yàn)樗?yàn)證模塊正在工作。注意:在你Msql-Mysql-modules
安裝期間運(yùn)行該命令試驗(yàn)接口代碼時,MySQL服務(wù)器必須正在運(yùn)行,否則測試將失敗。
無論何時你安裝一個新版本的MySQL,重建并且重新安裝Msql-Mysql-modules
分發(fā)是一個好主意, 特別是如果你在升級MySQL后,觀察所有異常,如你的DBI
腳本核心傾倒(core dump)。
如果你沒有權(quán)限在系統(tǒng)目錄下安裝Perl模塊,或如果你安裝本地Perl模塊,下列參考書可以幫助你:
http://www./support/contrib/perl5/modules.html
在標(biāo)題Installing New Modules that Require Locally Installed Modules
下面查找。
4.10.2 在Win32上安裝ActiveState Perl
在 Win32 上安裝 ActiveState Perl的MySQL DBD
的模塊, 你應(yīng)該做下列步驟:
- 打開一個DOS shell。
- 如果需要,設(shè)置HTTP_proxy變量。例如, 你可以試一試:
set HTTP_proxy=my.proxy.com:3128
- 啟動PPM程序:
C:\perl\bin\ppm.pl
- 如果你還沒有這樣做,安裝
DBI
: install DBI
- 如果成功,安裝
DBD::mysql:http://www./Contrib/ppd/DBD-mysql.ppd
如果你不能使上述步驟工作,你應(yīng)該安裝MyODBC驅(qū)動程序并且通過ODBC連接MySQL服務(wù)器。
use DBI;$dbh= DBI->connect("DBI:ODBC:$dsn","$user","$password") || die "Got error $DBI::errstr when connecting to $dsn\n";
4.10.3 在Win32上安裝MySQL Perl分發(fā)
MySQL Perl分發(fā)包含DBI
、DBD:MySQL
和DBD:ODBC
。
- 從http://www./download.html得到Win32的Perl分發(fā)。
- 在
C:
解壓縮分發(fā),這樣你得到一個“C:\PERL”目錄。
- 增加目錄“C:\PERL\BIN”到你的路徑。
- 增加目錄“C:\PERL\BIN\MSWin32-x86-thread”或“C:\PERL\BIN\MSWin32-x86”到你的路徑。
- 在 DOS shell執(zhí)行
perl -v
測試perl
的運(yùn)行。
4.10.4 使用PerlDBI
/DBD
接口的問題
如果 Perl 報告它不能找到../mysql/mysql.so
模塊,那么問題可能是該P(yáng)erl不能找到共享庫文件“libmysqlclient.so”。
你可用下列任何一個方法修正它這:
- 用
perl Makefile.PL -static
而非perl Makefile.PL
編譯Msql-Mysql-modules
分發(fā)。
- 拷貝
libmysqlclient.so
到其他共享庫文件所在的目錄(可能是“/usr/lib”或“/lib”)。
- 在
Linux
上,你可以把libmysqlclient.so
所在目錄的路徑名加到“/etc/ld.so.conf”文件中。
- 把
libmysqlclient.so
所在目錄的路徑名加到LD_RUN_PATH
環(huán)境變量中。
如果你從DBD-mysql
得到下列錯誤,你可能正在使用gcc
(或使用一個舊的用gcc
編譯的二進(jìn)制代碼):
/usr/bin/perl: can‘t resolve symbol ‘__moddi3‘/usr/bin/perl: can‘t resolve symbol ‘__divdi3‘
當(dāng)“mysql.so”庫文件被構(gòu)造時候,為鏈接命令加上-L/usr/lib/gcc-lib/... -lgcc
(當(dāng)你編譯Perl客戶時檢查針對“mysql.so”的make
輸出)。-L
選項(xiàng)應(yīng)該指定“libgcc.a”在你系統(tǒng)上所在目錄的路徑名。
這個問題的另一個原因可能是Perl和MySQL都不是用gcc
編譯的。在這種情況下,你可以都用gcc
編譯以解決不匹配。
如果你想要在一個不支持動態(tài)鏈接(象SCO那樣)的系統(tǒng)上使用Perl模塊,你可以產(chǎn)生包括DBI
和DBD-mysql
的Perl的一個靜態(tài)版本。這種運(yùn)行方法是你生成一個鏈接了DBI
代碼的Perl版本并在最新的Perl上安裝它,然后你使用它來構(gòu)造附加鏈接了DBD
代碼的Perl版本,并且安裝它。
在 SCO 上,你必須有下列環(huán)境變量設(shè)置:
shell> LD_LIBRARY_PATH=/lib:/usr/lib:/usr/local/lib:/usr/progressive/lib或shell> LD_LIBRARY_PATH=/usr/lib:/lib:/usr/local/lib:/usr/ccs/lib:/usr/progressive/lib:/usr/skunk/libshell> LIBPATH=/usr/lib:/lib:/usr/local/lib:/usr/ccs/lib:/usr/progressive/lib:/usr/skunk/libshell> MANPATH=scohelp:/usr/man:/usr/local1/man:/usr/local/man:/usr/skunk/man:
首先, 在DBI
分發(fā)所在目錄下運(yùn)行下列命令,創(chuàng)造包括一個靜態(tài)鏈接的Perl DBI
:
shell> perl Makefile.PL LINKTYPE=staticshell> makeshell> make installshell> make perl
然后你必須安裝新的Perl。make perl
的輸出將顯示正確的你需要執(zhí)行施行安裝的make
的命令。在SCO上,是make -f Makefile.aperl inst_perl MAP_TARGET=perl
.
接下來,在Msql-Mysql-modules
分發(fā)所在目錄下,使用剛才創(chuàng)建的Perl來創(chuàng)建同樣包括一個靜態(tài)鏈接的PerlDBD::mysql
的另一個Perl:
shell> perl Makefile.PL LINKTYPE=static shell> make shell> make install shell> make perl
最后, 你應(yīng)該安裝這個新的Perl。而且,make perl
的輸出指出使用的命令。