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編譯來解決不匹配問題。