http://www.yuzi.net/Show.asp?id=9585
Perl對MySQL的支持藉助DBI
/DBD
客戶接口而提供。見20.5 MySQL Perl API。Perl DBD
/DBI
客戶代碼要求Perl 5.004或以後版本。如果你有Perl的一個更舊的版本,接口將不能工作。
MySQL Perl支持也要求你安裝了MySQL客戶編程支持。如果你從RPM文件安裝MySQL,客戶程序在客戶RPM中,但是客戶編程支持在開發者RPM。確定你安裝了後一個RPM 。
對於版本3.22.8,Perl支持是與主要MySQL發行版本單獨分發。如果你想要安裝Perl支持,你需要的文件能從http://www.mysql.com/Contrib獲得。
Perl 分發以壓縮的tar
檔案提供,並且有一個類似“MODULE-VERSION.tar.gz”的名字,這裏MODULE
是模塊名字並且VERSION
是版本號。你應該得到Data-Dumper
、DBI和Msql-Mysql-modules
分發並按此次序安裝他們。安裝過程顯示出在下面,顯示的例子針對Data-Dumper
模塊, 但是所有3個過程是相同的。
- 解包分發到當前目錄:
shell> gunzip < Data-Dumper-VERSION.tar.gz | tar xvf -
這個命令創建的一個名爲“Data-Dumper-VERSION”的目錄。
- 進入解包分發的頂級目錄:
shell> cd Data-Dumper-VERSION
- 構造分發並且編譯所有東西:
shell> perl Makefile.PLshell> makeshell> make testshell> make install
make test
命令很重要,因爲它驗證模塊正在工作。注意:在你Msql-Mysql-modules
安裝期間運行該命令試驗接口代碼時,MySQL服務器必須正在運行,否則測試將失敗。
無論何時你安裝一個新版本的MySQL,重建並且重新安裝Msql-Mysql-modules
分發是一個好主意, 特別是如果你在升級MySQL後,觀察所有異常,如你的DBI
腳本核心傾倒(core dump)。
如果你沒有權限在系統目錄下安裝Perl模塊,或如果你安裝本地Perl模塊,下列參考書可以幫助你:
http://www.iserver.com/support/contrib/perl5/modules.html
在標題Installing New Modules that Require Locally Installed Modules
下面查找。
4.10.2 在Win32上安裝ActiveState Perl
在 Win32 上安裝 ActiveState Perl的MySQL DBD
的模塊, 你應該做下列步驟:
- 打開一個DOS shell。
- 如果需要,設置HTTP_proxy變量。例如, 你可以試一試:
set HTTP_proxy=my.proxy.com:3128
- 啓動PPM程序:
C:/perl/bin/ppm.pl
- 如果你還沒有這樣做,安裝
DBI
:install DBI
- 如果成功,安裝
DBD::mysql:http://www.mysql.com/Contrib/ppd/DBD-mysql.ppd
如果你不能使上述步驟工作,你應該安裝MyODBC驅動程序並且通過ODBC連接MySQL服務器。
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分發
MySQL Perl分發包含DBI
、DBD:MySQL
和DBD:ODBC
。
- 從http://www.mysql.com/download.html得到Win32的Perl分發。
- 在
C:
解壓縮分發,這樣你得到一個“C:/PERL”目錄。 - 增加目錄“C:/PERL/BIN”到你的路徑。
- 增加目錄“C:/PERL/BIN/MSWin32-x86-thread”或“C:/PERL/BIN/MSWin32-x86”到你的路徑。
- 在 DOS shell執行
perl -v
測試perl
的運行。
4.10.4 使用PerlDBI
/DBD
接口的問題
如果 Perl 報告它不能找到../mysql/mysql.so
模塊,那麼問題可能是該Perl不能找到共享庫文件“libmysqlclient.so”。
你可用下列任何一個方法修正它這:
- 用
perl Makefile.PL -static
而非perl Makefile.PL
編譯Msql-Mysql-modules
分發。 - 拷貝
libmysqlclient.so
到其他共享庫文件所在的目錄(可能是“/usr/lib”或“/lib”)。 - 在
Linux
上,你可以把libmysqlclient.so
所在目錄的路徑名加到“/etc/ld.so.conf”文件中。 - 把
libmysqlclient.so
所在目錄的路徑名加到LD_RUN_PATH
環境變量中。
如果你從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
編譯以解決不匹配。
如果你想要在一個不支持動態鏈接(象SCO那樣)的系統上使用Perl模塊,你可以產生包括DBI
和DBD-mysql
的Perl的一個靜態版本。這種運行方法是你生成一個鏈接了DBI
代碼的Perl版本並在最新的Perl上安裝它,然後你使用它來構造附加鏈接了DBD
代碼的Perl版本,並且安裝它。
在 SCO 上,你必須有下列環境變量設置:
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
分發所在目錄下運行下列命令,創造包括一個靜態鏈接的Perl DBI
:
shell> perl Makefile.PL LINKTYPE=staticshell> makeshell> make installshell> make perl
然後你必須安裝新的Perl。make perl
的輸出將顯示正確的你需要執行施行安裝的make
的命令。在SCO上,是make -f Makefile.aperl inst_perl MAP_TARGET=perl
.
接下來,在Msql-Mysql-modules
分發所在目錄下,使用剛纔創建的Perl來創建同樣包括一個靜態鏈接的PerlDBD::mysql
的另一個Perl:
shell> perl Makefile.PL LINKTYPE=static shell> make shell> make install shell> make perl
最後, 你應該安裝這個新的Perl。而且,make perl
的輸出指出使用的命令。