- 論壇徽章:
- 0
|
在win2003上怎么裝mysql???
MySQL中文參考手冊
譯者:晏子 (clyan@sohu.com) 主頁:http://linuxdb.yeah.net
--------------------------------------------------------------------------------
第一章, 前一章, 下一章, 最后一章,目錄.
--------------------------------------------------------------------------------
4 安裝MySQL
本章描述怎樣獲得并安裝MySQL:
對于你能從其獲得MySQL的站點(diǎn)列表,見4.1 怎樣獲得MySQL。
要了解支持哪些平臺,見4.2 MySQL支持的操作系統(tǒng)。
可獲得MySQL的多個版本,以二進(jìn)制代碼和源代碼形式分發(fā)。為了確定你應(yīng)該使用的分發(fā)的版本和類型,見4.4 怎樣和何時(shí)發(fā)布更新版本。
針對二進(jìn)制代碼和源代碼分發(fā)的安裝指令在4.6 安裝 MySQL 二進(jìn)制代碼分發(fā)和4.7 安裝 MySQL 源代碼分發(fā)講述。每套指令均包含一個關(guān)于你可能涉及的系統(tǒng)特定問題的部分。
為安裝后期過程,見4.15 安裝后期的設(shè)置與測試。不管你是用一個二進(jìn)制代碼還是源代碼分發(fā)來安裝MySQL,這些過程均適用。
4.1 怎樣獲得MySQL
檢查MySQL主頁獲得當(dāng)前版本的信息和下載指令。
然而,TcX的因特網(wǎng)鏈接不是很快的;我們更希望讓你從下列鏡象站點(diǎn)之一進(jìn)行真正的下載。
請向webmaster@mysql.com報(bào)告不存在的或過時(shí)的鏡像站點(diǎn)。
歐洲:
奧地利 [ 維也納技術(shù)大學(xué) ]WWW ftp
保加利亞 [ Naturella ]ftp
克羅地亞 [ HULK ]WWW ftp
捷克共和國 [ 在Brno的Masaryk大學(xué) ]WWW ftp
捷克共和國 [ www.sopik.cz ]WWW
丹麥 [ Borsen ]WWW
丹麥 [ SunSITE ]WWW ftp
愛沙尼亞 [ OKinteractive ]WWW
法國 [ minet ]WWW
芬蘭 [ EUnet ]WWW
芬蘭 [ clinet ]ftp
德國 [ 波恩大學(xué), 波恩 ]WWW ftp
德國 [ Wolfenbuettel ]WWW ftp
德國 [ Staufen ]WWW
德國 [ Cable & Wireless ]ftp
希臘 [ NTUA , 雅典]WWW ftp
Island [ GM ]WWW WWW
意大利 [ Teta Srl ]WWW
愛爾蘭 [ Ireland On-Line/Dublin ]WWW ftp
波蘭 [ Sunsite ]WWW ftp
葡萄牙 [ lerianet ]WWW ftp
俄國 [ DirectNet ]WWW
俄國 [ IZHCOM ]WWW ftp
俄國 [ Scientific Center/Chernogolovka ]ftp
羅馬尼亞 [ Timisoara ]WWW ftp
羅馬尼亞 [ Bucharest ]WWW ftp
西班牙 [ MasterD ]WWW
瑞典 [ Sunet ]WWW ftp
瑞士 [ Sunsite ]WWW ftp
英國 [ Omnipotent/UK ]WWW ftp
英國 [ PLiG/UK ]WWW ftp
英國 [ SunSITE ]WWW ftp
烏克蘭 [ PACO ]WWW ftp
北美洲:
加拿大 [ Tryc ]WWW
加拿大 [ Cyberus ]WWW ftp
美國 [ Hurricane Electric/San Jose ]WWW
美國 [ Circle Net/North Carolina ]WWW
美國 [ Gina net/Florida ]WWW
美國 [ pingzero/Los Angeles ]WWW
美國 [ 威斯康星大學(xué) / 威斯康星]WWW ftp
美國 [ DIGEX ]ftp
南美洲:
巴西 [ Matrix ]WWW
智利 [ Vision ]WWW
亞洲:
中國 [ Freecode ]WWW
中國 [ Netfirm ]WWW
朝鮮 [ KREONet ]WWW
日本 [ Soft Agency ]WWW
日本 [ Nagoya Syouka University ]WWW ftp
新加坡 [ HJC ]WWW ftp
臺灣 [ HT ]WWW
澳洲:
澳洲 [ AARNet/Queensland ]WWW ftp
澳洲 [ Tas ]WWW ftp
澳洲 [ Blue Planet/Melbourne ]WWW
澳洲 [ ITworks Consulting/Victoria ]WWW
非洲:
南非 [ Mweb/ ]WWW
南非 [ The Internet Solution/Johannesburg ]ftp
4.2 MySQL 支持的操作系統(tǒng)
我們使用 GNU Autoconf,因此將MySQL移植到所有使用 Posix 線程和一個 C++ 編譯器的現(xiàn)代系統(tǒng)是可能的。(僅僅為了編譯客戶代碼,只需要一個 C++ 編譯器而不是線程)。我們主要在Sun Solaris(版本 2.5 & 2.6)上使用并開發(fā)軟件本身,而RedHat Linux 5.0 居其次。
MySQL已經(jīng)被報(bào)告在下列操作系統(tǒng)/線程包的組合上成功地編譯。注意,對很多操作系統(tǒng),原生的線程支持僅工作于最新的版本。
有原生線程的AIX 4.x
包括 MIT-pthreads 包的BSDI 2.x
有原生線程的BSDI 3.0、3.1和4.x
有原生線程的DEC UNIX 4.x
包括MIT-pthreads包的FreeBSD 2.x
有原生程的FreeBSD 3.x
包括 MIT-pthreads 包的 HP-UX 10.20
有原生線程的 HP-UX 11.x 。
有 LinuxThreads 0.7.1 的 Linux 2.0 + 或glibc2.0.7
MacOS X 服務(wù)器
NetBSD 1.3/1.4 Intel 和 NetBSD 1.3 Alpha ( 需要 GNU make)
包括 MIT-pthreads 包的 OpenBSD 2.x
OS/2 Wrap 3、FixPack 29和OS/2 Wrap 4、FixPack 4
有原生線程的SGI Irix 6.x
SPARC和x86上有原生線程的Solaris 2.5、2.6和2.7
包括 MIT-pthreads 包的SunOS 4.x
有最新FSU Pthreads移植包的SCO OpenServer
SCO UnixWare 7.0.1
Tru64 Unix
Win95、Win98和NT(只有擁有MySQL許可證或MySQL電子郵件支持的用戶可得到最新版本)。對那些在購買之前想測試的人,我們以共享軟件方式發(fā)布了MySQL 3.21.29(一個較老的版本)。
4.3 使用MySQL哪個版本
首先要作出決策,你是否想要使用最新的開發(fā)版本或最終的穩(wěn)定版本:
通常, 如果你是第一次開始使用MySQL或嘗試移植它到一些還沒有二進(jìn)制分發(fā)系統(tǒng)上,我們推薦使用開發(fā)版本(當(dāng)前 3.22.x)。這是因?yàn)橥ǔT陂_發(fā)版本中沒用真正嚴(yán)重的錯誤,并且你能容易用你的機(jī)器上的crash-me和基準(zhǔn)測試套件來測試它。見10.8 使用你自己的基準(zhǔn)測試。
否則,如果你正在運(yùn)行一個老的系統(tǒng)并且想要升級,但是又不想要用3.22冒險(xiǎn),你應(yīng)該升級到3.21.33。我們已經(jīng)試著僅修復(fù)致命錯誤,并且對那個版本進(jìn)行更小的相對安全的改動。
要做的第二項(xiàng)決策是你是否想要使用源代碼分發(fā)或二進(jìn)制分發(fā):
如果你想在一個已經(jīng)存在一個最新二進(jìn)制分發(fā)的平臺上運(yùn)行MySQL,就用它。通常,這比一個源代碼分發(fā)更容易安裝。
如果你想要閱讀(或修改)構(gòu)成MySQL的C和C++代碼,你應(yīng)該拿到源代碼分發(fā)。源代碼總是最終的手冊。源代碼分發(fā)也比二進(jìn)制的分發(fā)包含更多的測試和實(shí)例。
MySQL的命名機(jī)制使用由3個數(shù)字和一個后綴組成的版本號。例如,一個像mysql-3.21.17-beta的版本號這樣解釋:
第1數(shù)字(3)描述文件格式。所有版本3的發(fā)行都有相同的文件格式。當(dāng)一個版本4出現(xiàn)時(shí),每個數(shù)據(jù)庫表都將必須轉(zhuǎn)換到新格式(當(dāng)然,為此有一個很不錯的工具)。
第2數(shù)字(21)是發(fā)行級別。通常有2種選擇。一個是發(fā)部/穩(wěn)定分支(當(dāng)前為21)而其它是開發(fā)分支(當(dāng)前22)。通常兩者都是穩(wěn)定的,但是開發(fā)版本可能有毛病,新功能缺乏文檔或可能在某些系統(tǒng)上編譯失敗。
第3個數(shù)字(17)是在此發(fā)行級別的版本號,這隨每個新分發(fā)遞增。通常你需要你已經(jīng)選擇的發(fā)行(release)的最新版本(version)。
后綴(beta)顯示發(fā)行的穩(wěn)定性級別。可能的后綴有:
alpha 表明發(fā)行包含大量未被100%測試的新代碼。已知的錯誤(通常沒有)應(yīng)該在新聞小節(jié)被記錄。見D MySQL 變遷的歷史記錄。在大多數(shù) alpha 版本也有新的命令和擴(kuò)展。
beta 意味著所有的新代碼被測試了,沒有增加重要的新特征,應(yīng)該沒有已知的錯誤。
gamma 是一個發(fā)行了一段時(shí)間的beta版本,看起來應(yīng)該運(yùn)行正常。這就是很多其他公司稱為一個發(fā)布的東西。
如果沒有后綴,這意味著該版本已經(jīng)在很多地方運(yùn)行一段時(shí)間了,而且沒有非平臺特定的錯誤報(bào)告。這就是我們稱為一個穩(wěn)定版本的東西。
MySQL所有版本都經(jīng)過我們的標(biāo)準(zhǔn)測試和基準(zhǔn)測試運(yùn)行,以保證他們可相當(dāng)安全地使用。因?yàn)闃?biāo)準(zhǔn)測試不斷擴(kuò)充以檢測以前發(fā)現(xiàn)的錯誤,測試套件一直在改進(jìn)之中。
注意,所有版本都至少已經(jīng)用下列套件進(jìn)行了測試:
一個內(nèi)部測試套件
這是一個客戶生產(chǎn)系統(tǒng)的一部分。它可能有很多幾百個兆字節(jié)數(shù)據(jù)的數(shù)據(jù)庫表。
MySQL基準(zhǔn)測試套件
它運(yùn)行一定范圍的常用查詢。它也是一個測試,檢測最新的優(yōu)化處理是否真的使代碼更快。見10.8 使用你自己的基準(zhǔn)測試。
crash-me測試
這嘗試決定數(shù)據(jù)庫支持什么功能和它的能力與限制是什么。見10.8 使用你的自己基準(zhǔn)測試。
其他測試是在內(nèi)部的生產(chǎn)環(huán)境中使用最新MySQL版本,至少在一臺機(jī)器上。我們有超過100GB的數(shù)據(jù)可用使用。
4.4 怎樣和何時(shí)發(fā)布更新版本
在TcX,MySQL進(jìn)展的相當(dāng)快,并且我們想要與其它MySQL用戶分享它。當(dāng)我們有一個看來其它人似乎需要的非常有用的功能時(shí),我們就試著制作一個發(fā)行版本。
我們也嘗試幫助那些需要很容易實(shí)現(xiàn)的功能的用戶,我們也關(guān)注我們授權(quán)的用戶想要什么,我們更特別關(guān)注我們的擴(kuò)展電子郵件支持的客戶想要什么,并且盡力幫助他們。
沒有人一定要下載一個新版本,新聞小節(jié)中將告訴你新版本是否有一些你確實(shí)想要的東西。見D MySQL 變遷的歷史記錄。
當(dāng)更新MySQL時(shí),我們使用下列方針:
對每個小的改進(jìn),在版本字符串的最后數(shù)字增加1。當(dāng)有主要的新功能或與先前版本比有較小不兼容性時(shí),在版本字符串的第2數(shù)字增加1。當(dāng)文件格式變化時(shí),第1數(shù)字加1。
穩(wěn)定的測試過的版本每年準(zhǔn)備出現(xiàn)1-2次,但是如果發(fā)現(xiàn)小錯誤,只有錯誤修復(fù)的一個版本將被發(fā)行。
工作版本準(zhǔn)備每1-8周出現(xiàn)一次。
對一些平臺的二進(jìn)制分發(fā),主要版本由我們制作。其他人可以為其他系統(tǒng)制作二進(jìn)制分發(fā),但是可能不多見。
一旦我們找到并修復(fù)了小錯誤,我們通常使用戶可以得到補(bǔ)丁。
對非緊急但煩人的錯誤,如果他們被發(fā)給我們,我們將使用戶可以得到補(bǔ)丁,否則我們將集中許多錯誤到一個更大的補(bǔ)丁中。
在任何情況下,如果在一個發(fā)行中有一個致命錯誤,我們將盡快制作一個新版本。我們想其他公司也這樣做。
當(dāng)前的穩(wěn)定版本是3.22;我們已經(jīng)轉(zhuǎn)移到3.23的積極開發(fā)中。在穩(wěn)定版本中,錯誤仍將被修復(fù)。我們不相信一個完全凍結(jié),因?yàn)檫@也留下的錯誤修復(fù)和“必須做”的事情!澳撤N程度的凍結(jié)”意味著我們可以增加小東西,它“將幾乎肯定不影響已經(jīng)能工作的任何東西”。
4.5 安裝布局
這節(jié)描述安裝二進(jìn)制代碼和源代碼分發(fā)時(shí)創(chuàng)建的缺省目錄布局。
二進(jìn)制分發(fā)通過在你選擇的安裝地點(diǎn)(典型的“/usr/local/mysql”)解壓縮來安裝,并且在該處創(chuàng)建下列目錄:
目錄 目錄的內(nèi)容
“bin” 客戶程序和mysqld服務(wù)器
“data” 日志文件, 數(shù)據(jù)庫
“include” 包含(頭)文件
“l(fā)ib” 庫文件
“scripts” mysql_install_db
“share/mysql ” 錯誤消息文件
“sql-bench” 基準(zhǔn)程序
源代碼分發(fā)在你配置并編譯后進(jìn)行安裝。缺省地,安裝步驟將文件安裝在“/usr/local”下的下列子目錄:
目錄 目錄的內(nèi)容
“bin” 客戶程序和腳本
“include/mysql” 包含(頭)文件
“info” Info格式的文檔
“l(fā)ib/mysql” 庫文件
“l(fā)ibexec” mysqld服務(wù)器
“share/mysql” 錯誤消息文件
“sql-bench” 基準(zhǔn)程序和crash-me測試
“var” 數(shù)據(jù)庫和日志文件。
在一個安裝目錄內(nèi),源代碼安裝的布局在下列方面不同于二進(jìn)制安裝:
mysqld服務(wù)器被安裝在“l(fā)ibexec”目錄而不是“bin”目錄內(nèi)。
數(shù)據(jù)目錄是“var”而非“data”。
mysql_install_db被安裝在“/usr/local/bin”目錄而非“/usr/local/mysql/scripts”內(nèi)。
頭文件和庫目錄是“include/mysql”和“l(fā)ib/mysql”而非“include”和“l(fā)ib”。
4.6 安裝MySQL二進(jìn)制代碼分發(fā)
你需要下列工具安裝一個MySQL二進(jìn)制分發(fā):
GNU gunzip解壓縮分發(fā)。
一個適當(dāng)?shù)膖ar解包分發(fā)。 GNU tar已知可以。
在Linux下的另一個安裝方法是使用RPM(RedHat包管理器)分發(fā)。見4.6.1 Linux RPM 注意事項(xiàng)。
如果你碰到問題,在把問題郵寄到mysql@lists.mysql.com時(shí),請總是使用mysqlbug,就算問題不是一個bug,mysqlbug收集系統(tǒng)信息,將有助于其它人解決你的問題。不使用mysqlbug,你將減少得到你問題的一個解決方案的可能性!在你解包分發(fā)后,你會在“bin”目錄下找到mysqlbug。見2.3 怎樣報(bào)告錯誤或問題。
你必須執(zhí)行以便安裝并使用一個MySQL二進(jìn)制分發(fā)的基本命令是:
shell>; gunzip < mysql-VERSION-OS.tar.gz |tar xvf -
shell>; ln - s mysql-VERSION-OS mysql
shell>; cd mysql
shell>; scripts/mysql_install_db
shell>; bin/safe_mysqld &
如果你安裝了DBI和Msql-Mysql-modulesPerl模塊,你可以使用bin/mysql_setpermission腳本增加新用戶。
以下是更詳細(xì)的描述:
對于安裝二進(jìn)制分發(fā),遵循以下步驟,然后繼續(xù)到4.15 安裝后期的設(shè)置與測試,進(jìn)行安裝后期的設(shè)置和測試:
挑選一個你想解開分發(fā)包的目錄,進(jìn)入給目錄。在下面的例子中,我們將分發(fā)解包在“/usr/local”下并且創(chuàng)建一個安裝MySQL的“/usr/local/mysql”目錄。(因此,下列指令假設(shè)你有權(quán)限在“/usr/local”中創(chuàng)建文件,如果該目錄被保護(hù),你需要以root實(shí)施安裝。)
從4.1 怎樣獲得MySQL中列出的站點(diǎn)之一獲得一個分發(fā)文件。MySQL二進(jìn)制分發(fā)以壓縮的tar文檔提供,并且有類似“mysql-VERSION-OS.tar.gz”的名字,這里VERSION是一個數(shù)字(例如,3.21.15),且OS表明分發(fā)能運(yùn)行的操作系統(tǒng)類型(例如,pc-linux-gnu-i586)。
解開分發(fā)并且創(chuàng)建立安裝目錄:
shell>; gunzip < mysql-VERSION-OS.tar.gz |tar xvf -
shell>; ln - s mysql-VERSION-OS mysql
第一個命令創(chuàng)建一個名為“mysql-VERSION-OS”的目錄,第二個命令生成到該目錄的一個符號鏈接。這讓你更容易地把安裝目錄指定為“/usr/local/mysql”。
進(jìn)入安裝目錄:
shell>; cd mysql
你會在mysql目錄下發(fā)現(xiàn)幾個文件和子目錄,對安裝目的最重要的是“bin”和“scripts”子目錄。
“bin”
這個目錄包含客戶程序和服務(wù)器,你應(yīng)該把這個目錄的完整路徑加到你的PATH環(huán)境變量,以便你的shell能正確的找到MySQL程序。
“scripts”
這個目錄包含mysql_install_db腳本,用來初始化服務(wù)器存取權(quán)限。
如果你想使用mysqlaccess而在某個非標(biāo)準(zhǔn)的地點(diǎn)有MySQL分發(fā),你必須改變地點(diǎn),在哪兒mysqlaccess期望找到mysql客戶。編輯“bin/mysqlaccess”腳本,大約在第18行,尋找類似下面的行:
$MYSQL = “/usr/local/bin/mysql”; # path to mysql executable
改變路徑以反映出mysql實(shí)際存儲在你系統(tǒng)上的地點(diǎn)。如果你不這樣做,當(dāng)你運(yùn)行mysqlaccess時(shí),你將得到一個broken pipe的錯誤。
創(chuàng)造MySQL授權(quán)表(只有在你以前沒安裝過MySQL是必要的):
shell>; scripts/mysql_install_db
注意當(dāng)你運(yùn)行時(shí)mysql_install_db時(shí),比版本3.22.10老的MySQL版本啟動MySQL服務(wù)器。這不再是真的了!
如果你想要安裝對Perl DBI/DBD接口的支持,見4.10 Perl安裝注意事項(xiàng)。
如果你喜歡在引導(dǎo)機(jī)器時(shí)自動啟動MySQL,你可以拷貝support-files/mysql.server文件到你系統(tǒng)有啟動文件的地方。更多的信息可以在support-files/mysql.server腳本中和4.15.3 自動啟動和停止MySQL找到。
在所有東西被解包并且安裝以后,你應(yīng)該初始化并且測試你的分發(fā)。
你可以用下列命令啟動MySQL服務(wù)器:
shell>; bin/safe_mysqld &
見4.15 安裝后期的設(shè)置和測試。
4.6.1 Linux RPM 注意事項(xiàng)
在Linux上安裝MySQL推薦的方法是使用一個RPM文件。MySQL RPM目前是在一個 RedHat 5.2 系統(tǒng)上建立的,但是應(yīng)該能工作在支持rpm且使用glibc的其他 Linux 版本上。
如果一個RPM文件有問題,例如Sorry, the host 'xxxx' could not be looked up,見4.6.3.1 Linux 注意事項(xiàng)。
你可能要使用的RPM文件有:
MySQL-VERSION.i386.rpm MySQL服務(wù)器。除非你只是想要與運(yùn)行在其他機(jī)器上MySQL服務(wù)器連接,否則你將需要它。
MySQL-client-VERSION.i386.rpm 標(biāo)準(zhǔn)MySQL客戶程序。你可能總是需要安裝這個包。
MySQL-bench-VERSION.i386.rpm 測試和基準(zhǔn)程序。需要Perl和msql-mysql-modules RPM。
MySQL-devel-VERSION.i386.rpm 所需的庫和包含文件。如果你想要編譯其他MySQL客戶程序, 例如Perl模塊。
MySQL-VERSION.src.rpm 包含上述所有包的源代碼。它也能被用來嘗試為其他硬件平臺構(gòu)造RPM(例如,Alpha或SPARC)。
查看一個RPM包中的所有文件:
shell>; rpm - qpl MySQL-VERSION.i386.rpm
實(shí)施一個標(biāo)準(zhǔn)的最小安裝,運(yùn)行這個命令:
shell>; rpm -i MySQL-VERSION.i386.rpm MySQL-client-VERSION.i386.rpm
只安裝客戶包:
shell>; rpm -i MySQL-client-VERSION.i386.rpm
RPM將數(shù)據(jù)放在“/var/lib/mysql”里,RPM也在“/etc/rc.d/”里創(chuàng)建適當(dāng)?shù)娜肟谝员阍谝龑?dǎo)時(shí)自動啟動服務(wù)器。(這意味著如果你以前已經(jīng)安裝過,在對它改變之前,你可以把你以前安裝的MySQL啟動文件做個拷貝,因此你不會丟失改動)。
在安裝了RPM文件后,“mysqld”守護(hù)程序應(yīng)該正在運(yùn)行,并且現(xiàn)在你應(yīng)該可以開始使用MySQL。見4.15 安裝后期的設(shè)置和測試。
如果一些東西出錯,可以在二進(jìn)制的安裝一節(jié)里找到更多的信息。見4.6 安裝MySQL二進(jìn)制代碼分發(fā)。
4.6.2 構(gòu)造客戶程序
如果你編譯你自己寫的或你從第三方獲得的MySQL客戶程序,他們必須用link命令的-lmysqlclient選項(xiàng)進(jìn)行鏈接。你可能也需要指定一個 -L 選項(xiàng),告訴鏈接器在哪兒查找?guī)煳募。例如,如果庫文件安裝在“/usr/local/mysql/lib”里,在鏈接命令上使用 -L/usr/local/mysql/lib -lmysqlclient。
對使用MySQL頭文件的客戶程序,當(dāng)你編譯他們時(shí),你可能需要指定一個 -I 選項(xiàng)(例如,-I/usr/local/mysql/include), 使得編譯器能找到頭文件。
4.6.3 系統(tǒng)特定的問題
下一節(jié)說明在從一個二進(jìn)制分發(fā)安裝MySQL時(shí),已經(jīng)在特定的系統(tǒng)上觀察到已發(fā)生過一些問題。
4.6.3.1 Linux 注意事項(xiàng)
MySQL需要至少Linux 2.0。
二進(jìn)制發(fā)行版用-static鏈接的,這意味著你一般不必?fù)?dān)心你擁有的系統(tǒng)庫是哪個版本。你也不必安裝LinuxThreads。一個用-static鏈接的程序比一個動態(tài)鏈接程序稍大些但更快(3-5%)。然而,一個問題是你不能使用靜態(tài)鏈接的用戶定義函數(shù)(UDF)。如果你準(zhǔn)備編寫或使用UDF函數(shù)(這只對C或C++程序員),你必須編譯MySQL本身,使用動態(tài)鏈接。
如果你正在使用一個基于libc-的系統(tǒng)(而不是一個glibc2系統(tǒng)),你將可能碰到二進(jìn)制發(fā)行的主機(jī)名解析和getpwnam()的一些問題(這是因?yàn)間libc不幸地依賴于一些包括解析主機(jī)名和getwpent()的外部庫,甚至在用-static編譯時(shí))。在這種情況下,當(dāng)你運(yùn)行mysql_install_db時(shí),你可能得到下列錯誤信息:
sorry, the host 'xxxx' could not be looked up
或當(dāng)你嘗試以 --user 選項(xiàng)運(yùn)行 mysqld 時(shí)的下列錯誤:
getpwnam : No such fileor directory
你能用下列方法之一解決這個問題:
獲得一個MySQL源代碼分發(fā)(一個RPM或tar分發(fā))并且安裝它。
執(zhí)行mysql_install_db --force;這將不執(zhí)行mysql_install_db里面的resolveip測試。缺點(diǎn)是你不能在授權(quán)表中使用主機(jī)名字;相反你必須使用IP數(shù)字(除了localhost)。如果你正在使用一個老的不支持--force的MySQL版本,你必須用編輯器刪除mysql_install中的resolveip測試。
用su啟動mysqld而不使用--user。
MySQL的Linux-Intel二進(jìn)制代碼和RPM發(fā)行版是為最高可能的速度而配置的。我們總是努力使用可用的最快的穩(wěn)定的編譯器。
MySQL的Perl支持要求Perl 5.004_03或更新。
4.6.3.2 HP-UX 注意事項(xiàng)
針對HP-UX的MySQL二進(jìn)制分發(fā)作為一個HP depot(倉庫)或tar 文件格式分發(fā)的。為了使用depot文件,你必須運(yùn)行至少HP-UX 10.x 以便訪問HP的軟件倉庫工具。
MySQL的HP版本在運(yùn)行HP-UX 10.20下的HP 9000/8xx 服務(wù)器上編譯,并且使用MIT-pthreads。它已知可在這種配置下很好地工作。MySQL 3.22.26和更新版也用HP原生線程包構(gòu)造。
其他可以運(yùn)行的配置:
運(yùn)行 HP-UX 10.20 + 的 HP 9000/7xx
運(yùn)行 HP-UX 10.30 的 HP 9000/8xx
下列配置幾乎肯定不能運(yùn)行:
運(yùn)行 HP-UX 10.x 的 HP 9000/7xx 或 8xx ,x < 2
運(yùn)行 HP-UX 9.x 的 HP 9000/7xx 或 8xx
為了安裝分發(fā),使用下面的命令之一, 這里/path/to/depot是倉庫文件的完整路徑:
要安裝所有東西,包括服務(wù)器、客戶和開發(fā)工具:
shell>; /usr/sbin/swinstall - s /path/to/depot mysql.full
僅僅安裝服務(wù)器:
shell>; /usr/sbin/swinstall - s /path/to/depot mysql.server
僅僅安裝客戶軟件包:
shell>; /usr/sbin/swinstall - s /path/to/depot mysql.client
僅僅安裝開發(fā)工具:
shell>; /usr/sbin/swinstall - s /path/to/depot mysql.developer
depot在“/opt/mysql”存放二進(jìn)制代碼和庫文件并在“/var/opt/mysql”存放數(shù)據(jù)。depot也在“/sbin/init.d”和“ /sbin/rc2.d”里創(chuàng)建適當(dāng)?shù)娜肟谝宰詣拥卦谝龑?dǎo)時(shí)啟動服務(wù)器。顯然, 這有必要以root身份來安裝。
為了安裝HP-UX tar分發(fā),你必須有GNU tar的一個拷貝。
4.7 安裝MySQL源代碼分發(fā)
你需要下列工具構(gòu)造并安裝MySQL源代碼:
GNU gunzip解壓縮該分發(fā)。
一個合適的tar解包分發(fā)。GNU tar已知可以工作。
一個能運(yùn)行的ANSI C++編譯器。gcc>; = 2.8.1 、egcs>; = 1.0.2 、SGI C++和SunPro C++是一些已知能工作編譯器。 當(dāng)使gcc用時(shí),不需要libg++。gcc2.7.x 有一個bug,使得它可能不能編譯一些完全合法的C++文件,例如“sql/sql_base.cc”。如果你僅有g(shù)cc2.7.x,你必須升級gcc才能編譯MySQL。
一個優(yōu)秀的make程序。GNU make總是被推薦且有時(shí)必須。如果你有問題,我們推薦試一試GNU make3.75或更新。
如果你遇到問題,當(dāng)向mysql@lists.mysql.com郵寄問題時(shí),請一直使用mysqlbug。就算問題不是一個bug,mysqlbug收集系統(tǒng)信息,將有助于其它人解決你的問題。如果不使用mysqlbug,你減少得到關(guān)你問題的一個解決方案的可能性!在你解包分發(fā)后,你會在“scripts”目錄下找到mysqlbug。見2.3 怎樣報(bào)告錯誤或問題。
4.7.1 快速安裝概述
你必須執(zhí)行的安裝MySQL源代碼分發(fā)的基本命令是(從一個解包的tar文件):
shell>;configure
shell>;make
shell>;make install
shell>;scripts/mysql_install_db
shell>;/usr/local/mysql/bin/safe_mysqld &
如果你從一個源代碼RPM開始,那么執(zhí)行如下命令。
shell>; rpm -- rebuild MySQL-VERSION.src.rpm
這樣你制作一個可以安裝的二進(jìn)制RPM。
如果你安裝了DBI和Msql-Mysql-modulesPerl模塊,你可以利用bin/mysql_setpermission腳本增加新用戶。
以下是更詳細(xì)的描述:
為了安裝源代碼分發(fā),按照下列步驟,然后繼續(xù)到4.15 安裝后期的設(shè)置與測試,進(jìn)行安裝后期的初始化與測試。
挑選一個你要在其下面解包分發(fā)的目錄,并且進(jìn)入該目錄。
從節(jié)4.1 怎樣獲得MySQL中列出的站點(diǎn)之一獲得一個分發(fā)文件。MySQL源代碼分發(fā)以壓縮的tar檔案提供,并且有類似于“mysql-VERSION.tar.gz”的名字,這里的VERSION是一個類似3.23.7-alpha的數(shù)字。
在當(dāng)前目錄下解包分發(fā):
shell>; gunzip < mysql-VERSION.tar.gz | tar xvf -
這個命令創(chuàng)建名為“mysql-VERSION”的一個目錄。
進(jìn)入解包分發(fā)的頂級目錄:
shell>; cd mysql-VERSION
設(shè)置發(fā)行版本并且編譯:
shell>;./configure--prefix=/usr/local/mysql
shell>;make
當(dāng)你運(yùn)行configure時(shí),你可能想要指定一些選項(xiàng),運(yùn)行./configure --help得到一張選項(xiàng)表。4.7.3 典型的configure選項(xiàng)討論一些很有用的選項(xiàng)。如果configure失敗,你將發(fā)送包含你認(rèn)為能幫你解決該問題的“config.log”的郵件,如果configure異常退出,也要包括configure的最后幾行輸出。用mysqlbug腳本郵寄錯誤報(bào)告。見2.3 怎樣報(bào)告錯誤和問題。如果編譯失敗,見節(jié)4.8 編譯問題?,幫助解決很多常見問題。
安裝所有東西:
shell>;make install
你可能需要root用戶來運(yùn)行這個命令。
創(chuàng)造MySQL授權(quán)表(只有你以前沒安裝MySQL是必需的):
shell>;scripts/mysql_install_db
注意,在運(yùn)行mysql_install_db時(shí),那些比3.22.10舊的MySQL版本啟動MySQL服務(wù)器。現(xiàn)在不是這樣了!
如果你想要安裝對Perl DBI/DBD接口的支持,見4.10 Perl安裝注意說明。
如果你想要MySQL在你引導(dǎo)機(jī)器時(shí)自動地啟動,你可以拷貝support-files/mysql.server到你的系統(tǒng)中有啟動文件的地方。更多的信息可以在support-files/mysql.server腳本里和4.15.3 自動啟動和停止MySQL找到。
在所有東西安裝完以后,你應(yīng)該初始化并且測試你的分發(fā)。
你可以用下列命令啟動MySQL服務(wù)器,這里BINDIR是safe_mysqld被安裝的目錄(缺省為“/usr/local/bin”):
shell>; BINDIR/safe_mysqld &
如果這個命令提示mysqld daemon ended并馬上失敗,那么你能在文件“mysql-data-directory/'hostname'.err”找到一些信息。可能的原因是你已經(jīng)有另外一個正在運(yùn)行的mysqld服務(wù)器。見19.3 在同一臺機(jī)器上運(yùn)行多個MySQL服務(wù)器。
參見4.15 安裝后期的設(shè)置與測試。
4.7.2 運(yùn)用補(bǔ)丁
有時(shí)補(bǔ)丁出現(xiàn)在郵件列表上或放在MySQL FTP地點(diǎn)的補(bǔ)丁區(qū)。
為了使用來自郵件列表的一個補(bǔ)丁,保存補(bǔ)丁出現(xiàn)在文件的消息,進(jìn)入你的MySQL源代碼樹的頂級目錄并運(yùn)行這些命令:
shell>;patch - p1 <patch-file-name
shell>;rm config.cache
shell>;make clean
來自FTP地點(diǎn)的補(bǔ)丁是作為普通文本文件或作為被壓縮了的gzip文件分發(fā)。運(yùn)用一個文本的補(bǔ)丁如上述郵件列表補(bǔ)丁,為了使用一個壓縮的補(bǔ)丁,進(jìn)入你的MySQL源代碼樹頂級目錄并運(yùn)行這些命令:
shell>;gunzip <patch-file-name.gz |patch - p1
shell>;rm config.cache
shell>;make clean
在使用一個補(bǔ)丁以后,按照正常的源代碼安裝的指令,開始./configure步驟。在運(yùn)行make install后,重啟你的MySQL服務(wù)器。
在運(yùn)行make install前,你可能需要關(guān)閉所有正在運(yùn)行的服務(wù)器(使用mysqladmin shutdown)。如果一個程序的新版本替代當(dāng)前正在執(zhí)行的版本,一些系統(tǒng)不允許你安裝它。
4.7.3 典型的configure選項(xiàng)
configure腳本給你一個很大的控制權(quán)來如何配置你的MySQL分發(fā)。典型地,你使用configure命令行的選項(xiàng)進(jìn)行。你也可以用正確的環(huán)境變量作用于configure。對于一個由configure支持的選擇列表,運(yùn)行這個命令:
shell>; ./configure -- help
一些更常用的configure選項(xiàng)見下面的描述:
只編譯MySQL客戶庫和客戶程序而不是服務(wù)器,使用--without-server選項(xiàng):
shell>; ./configure --without-server
如果你沒有一個 C++ 編譯器,mysql將不編譯(有一個客戶程序需要C++)。在這種情況下,你可以去掉configure里面測試C++編譯器的代碼,然后運(yùn)行帶有 --without-server選項(xiàng)的./configure。編譯步驟步將仍然嘗試構(gòu)造mysql,但是你可以忽略任何關(guān)于“ mysql.cc ”的警告。(如果make停止,試試make -k告訴它即使出錯繼續(xù)剩下的構(gòu)造步驟)。
如果你不想要位于“/usr/local/var”目錄下面的日志(log)文件和數(shù)據(jù)庫,使用類似于下列configure命令的一個:
shell>;./configure--prefix=/usr/local/mysql
shell>;./configure--prefix=/usr/local --localstatedir=/usr/local/mysql/data
第一個命令改變安裝前綴以便任何東西被安裝在“/usr/local/mysql”下面而非缺省的“/usr/local”。第二個命令保留缺省安裝前綴,但是覆蓋了數(shù)據(jù)庫目錄缺省目錄(通常是“/usr/local/var”)并且把它改/usr/local/mysql/data.
如果你正在使用Unix并且你想要MySQL的套接字位于缺省地點(diǎn)以外的某個地方(通常在目錄“/tmp”或“/var/run”,使用象這樣的configure的命令:
shell>; ./configure -- with-unix-socket-path=/usr/local/mysql/tmp/mysql.sock
注意給出的文件必須是一個絕對路徑!
如果你想編譯靜態(tài)鏈接程序(例如,制作二進(jìn)制分發(fā)、獲得更快的速度或與解決與RedHat分發(fā)的一些),像這樣運(yùn)行configure:
shell>;./configure --with-client-ldflags=-all-static --with-mysqld-ldflags=-all-static
如果你正在使用gcc并且沒有安裝libg++或libstdc++,你可以告訴configure使用gcc作為C++編譯器:
shell>; CC=gcc CXX=gcc ./configure
當(dāng)你使用時(shí)gcc作為C++編譯器是,它將不試圖鏈接libg++或libstdc++。如果構(gòu)造失敗并且產(chǎn)生有關(guān)編譯器或鏈接器的錯誤,不能創(chuàng)建共享庫“l(fā)ibmysqlclient.so.#”(“#”是一個版本號), 你可以通過為configure指定--disable-shared選項(xiàng)來解決此問題。在這種情況下,configure將不構(gòu)造一個共享libmysqlclient.so.#庫。
你可以設(shè)置MySQL對于非NULL的列不使用DEFAULT列值(即,不允許列是NULL)。這導(dǎo)致INSERT語句產(chǎn)生一個錯誤,除非你明確地為所有要求非NULL值的列指定值。為了禁止使用缺省值,這樣運(yùn)行configure:
shell>; CXXFLAGS=-DDONT_USE_DEFAULT_FIELDS ./configure
缺省地,MySQL使用ISO-8859-1(Latin1)字符集。為了改變?nèi)笔≡O(shè)置,使用--with-charset選項(xiàng)目:
shell>; ./configure -- with-charset=CHARSET
CHARSET可以是big5、cp1251、cp1257、czech、danish、dec8、dos、euc_kr、gb2312 gbk、german1、hebrew、 hp8、hungarian、koi8_ru、koi8_ukr、latin1、latin2、sjis、swe7、tis620、ujis、usa7、win1251或win1251ukr之一。見9.1.1 用于數(shù)據(jù)和排序的字符集。注意:如果你想要改變字符集,你必須在配置期間做make distclean!如果你想在服務(wù)器和客戶之間變換字符,你應(yīng)該看一下SET OPTION CHARACTER SET命令。見7.25 SET OPTION句法。警告:如果你在創(chuàng)建了任何數(shù)據(jù)庫表之后改變字符集,你將必須對每個表運(yùn)行myisamchk -r -q,否則你的索引可能不正確地排序。(如果你安裝了MySQL,創(chuàng)建一些表,然后重新配置MySQL使用一個不同的字符集并且重新安裝它,這時(shí)就可能發(fā)生這種情況。)
為了配置MySQL帶有調(diào)試代碼,使用--with-debug選項(xiàng):
shell>; ./configure --with-debug
這導(dǎo)致包含一個安全的內(nèi)存分配器,能發(fā)現(xiàn)一些錯誤和并提供關(guān)于正在發(fā)生的事情的輸出。見G.1調(diào)試一個MySQL服務(wù)器。
屬于特定系統(tǒng)的選項(xiàng)可在本章特定系統(tǒng)的小節(jié)里找到。見4.11 系統(tǒng)特定的問題。
4.8 編譯問題?
所有MySQL程序在Solaris上使用gcc編譯并且沒有任何警告。在其他系統(tǒng)上,由于系統(tǒng)包含文件的差別可能會發(fā)生警告。對于使用MIT-pthreads時(shí)發(fā)生的警告,見4.9 MIT-pthreads 注意事項(xiàng)。其他問題,檢查下面的表。
許多問題的解決方案涉及重新配置。如果你確實(shí)需要重新配置,注意下列事項(xiàng):
如果configure在它已經(jīng)被運(yùn)行了以后運(yùn)行,它可以使用先前收集的信息。這個信息被存儲在“config.cache”里面。當(dāng)configure啟動時(shí),它尋找該文件而且如果它存在,假定信息仍然是正確的,讀入它的內(nèi)容。當(dāng)你重新配置時(shí),該假設(shè)是無效的。
每次你運(yùn)行configure時(shí)候,你必須運(yùn)行make再重新編譯。然而, 你可能想要把先前構(gòu)造的老的目標(biāo)文件刪除,因?yàn)樗麄兪褂貌煌呐渲眠x項(xiàng)被編譯。
為了防止使用舊的配置信息或目標(biāo)文件,在重新運(yùn)行configure前運(yùn)行這些命令:
shell>;rm config.cache
shell>;make clean
另外,你可以運(yùn)行make distclean。
下表描述了一些最常發(fā)生的編譯MySQL的問題:
如果在編譯“sql_yacc.cc”時(shí),你得到如下的一個錯誤,你可能是存儲器或交換空間溢出:
Internal compiler error: program cc1plus got fatal signal 11
或
Out of virtual memory
或
Virtual memory exhausted
該問題是gcc要求大量的內(nèi)存編譯帶有嵌入函數(shù)(inline function)的“sql_yacc.cc”。試試以--with-low-memory選項(xiàng)運(yùn)行configure:
shell>;./configure -- with-low-memory
如果你正在使用gcc,該選項(xiàng)使得將-fno-inline加到編譯行,如果你正在使用其他的編譯器,則加入-O0。你應(yīng)該試一試--with-low-memory選項(xiàng),即使你有特別多的存儲器和交換空間,而你認(rèn)為不能可能運(yùn)行得溢出。這個問題甚至在很慷慨的硬件配置的系統(tǒng)上出現(xiàn),通常用--with-low-memory選項(xiàng)修正它。
缺省地,configure挑選c++作為編譯器名字并用-lg++選項(xiàng)的GNU c++鏈接。如果你正在使用gcc,這個特性在配置期間導(dǎo)致如下問題:
configure: error: installation or configuration problem:
C++ compiler cannot create executables.
你可能也在編譯期間看到g++、libg++或libstdc++相關(guān)的問題。這些問題的一個原因是你可能沒有g(shù)++,或你可能有g(shù)++但無libg++或libstdc++。看一下“config.log”文件。它應(yīng)該包含你的c++編譯器不能工作的準(zhǔn)確原因!為了解決這些問題,你可以使用gcc作為你的C++編譯器。試試設(shè)置環(huán)境變量CXX為"gcc -O3"。例如:
shell>;CXX="gcc -O3" ./configure
它能工作,因?yàn)間cc象g++一樣編譯C++源代碼,但缺省地它不鏈接libg++或libstdc++。解決這些問題的其他方法當(dāng)然是安裝g++、libg++和libstdc++。
如果你的編譯以下面任何錯誤而失敗,你必須升級make版本到GNUmake:
making all in mit-pthreads
make: Fatal error in reader: Makefile, line 18:
Badly formed macro assignment
or
make: file `Makefile' line 18: Must be a separator (:
or
pthread.h: No such file or directory
Solaris和FreeBSD已知make程序有問題。GNU make版本3.75已知能工作。
如果你想要定義你的C或C++編譯器所使用的標(biāo)志,把標(biāo)志加到CFLAGS和CXXFLAGS環(huán)境變量中即可。你也能使用CC和CXX來指定編譯器名字。例如:
shell>;CC=gcc
shell>;CFLAGS=-O6
shell>;CXX=gcc
shell>;CXXFLAGS=-O6
shell>;export CC CFLAGS CXX CXXFLAGS
對于已經(jīng)知道在不同系統(tǒng)上有用的標(biāo)志定義列表,見4.14 TcX 二進(jìn)制代碼。
如果你得到象如下的一條錯誤消息,你需要升級你的gcc編譯器:
client/libmysql.c:273: parse error brfore '__attribute__'
gcc2.8.1已知可以工作,但是我們推薦使用egcs1.0.3a或更新。
如果你在編譯mysqld時(shí)顯示例如下面的那些錯誤, configure沒有正確地檢測傳到accept()、getsockname()或getpeername()最后參數(shù)的類型:
cxx: Error: mysqld.cc, line 645: In this statement, the referenced
type of the pointer value "&length" is "unsigned long", which
is not compatible with "int".
new_sock = accept(sock, (struct sockaddr *)&cAddr, &length);
為了修正它,編輯“config.h”文件(它由configure生成)。尋找這些行:
/* Define as the base type of the last arg to accept */
#define SOCKET_SIZE_TYPE XXX
更改XXX為size_t或int,這取決于你的操作系統(tǒng)。(注意:你每次運(yùn)行configure都必須這樣做,因?yàn)閏onfigure重新生成“config.h”。)
“sql_yacc.cc”文件由“sql_yacc.yy”生成。通常構(gòu)造過程不需要創(chuàng)造“sql_yacc.cc”,因?yàn)镸ySQL有一個已經(jīng)生成的拷貝,然而,如果你確實(shí)需要再創(chuàng)建它,你可能碰到這個錯誤:
"sql_yacc.yy", line xxx fatal: default action causes potential...
這是一個你的yacc版本不完善的跡象。你可能需要安裝bison(GNU 版本yacc)并使用它。
如果你需要調(diào)試mysqld或MySQL客戶,運(yùn)行configure,使用--with-debug選項(xiàng),然后重新編譯并且鏈接你客戶程序到新的客戶庫。見G.2 調(diào)試一個MySQL客戶。
4.9 MIT-pthreads注意事項(xiàng)
這節(jié)描述在使用 MIT-pthreads 所涉及的一些問題。
注意:在Linux上,你應(yīng)該不使用MIT-pthreads而是安裝LinuxThreads!見4.11.5 Linux 注意事項(xiàng)(所有的Linux 版本)。
如果你的系統(tǒng)不提供原生的線程支持,你將需要使用MIT-pthreads包構(gòu)造MySQL。這包括大多數(shù)FreeBSD系統(tǒng)、SunOS 4.x 、Solaris 2.4和更早版本及其他,見4.2 MySQL 支持的操作系統(tǒng)。
在大多數(shù)系統(tǒng)上,你能通過使用configure,用--with-mit-threads選項(xiàng)來強(qiáng)迫運(yùn)行MIT-pthreads:
shell>; ./configure -- with-mit-threads
當(dāng)使用MIT-pthreads時(shí),不支持在一個非源代碼目錄構(gòu)造,因?yàn)槲覀兿胍刮覀儗Υa的改變減到最小。
MIT-pthreads不支持用于實(shí)現(xiàn)Unix套接字的AF_UNIX協(xié)議。這意味著如果你使用MIT-pthreads進(jìn)行編譯,所有的鏈接必須使用TCP/IP進(jìn)行(它有點(diǎn)慢)。如果在構(gòu)造MySQL后,你發(fā)現(xiàn)你不能與本地的服務(wù)器連接,很可能是客戶程序正在試圖用缺省的Unix套接字與localhost連接。使用主機(jī)選擇(-h或--host)明確地指定本地的主機(jī)名字,嘗試做一個TCP/IP連接到mysql。
決定是否使用MIT-pthreads的檢查僅在處理服務(wù)器代碼的配置過程期間發(fā)生。如果已經(jīng)用--without-server配置了分發(fā)并只構(gòu)造客戶代碼,客戶將不知道MIT-pthreads是否正在被使用并且是否使用缺省的Unix套接字連接。因?yàn)閁nix套接字不能在MIT-pthreads下面工作,這意味著當(dāng)你運(yùn)行客戶程序時(shí),你將需要使用-h或--host。
當(dāng)使用MIT-pthreads編譯MySQL時(shí),因?yàn)樾阅茉,系統(tǒng)鎖定缺省為禁止使用。你可以用--use-locking選項(xiàng)告訴服務(wù)器使用系統(tǒng)鎖定。
有時(shí)pthreadbind()命令不能綁定一個套接字但沒有任何錯誤消息(至少在Solaris上),結(jié)果是所有到服務(wù)器的連接均失敗。例如:
shell>; mysqladmin version
mysqladmin: connect to server at '' failed;
error: 'Can't connect to mysql server on localhost (146)'
解決它的方法是殺死m(xù)ysqld服務(wù)器并且重啟它。這只有當(dāng)我們強(qiáng)迫服務(wù)器停止并馬上進(jìn)行重啟時(shí)在發(fā)生。
使用MIT-pthreads,sleep()系統(tǒng)調(diào)用不是可中斷的SIGINT(break)。這只有在你運(yùn)行mysqladmin --sleep時(shí)才能注意到。你在中斷起作用并且進(jìn)程停止之前必須等待sleep()終止。
當(dāng)鏈接時(shí),你可能會收到這樣的警告消息(至少在Solaris上);他們可以被忽視:
ld: warning: symbol `_iob' has differing sizes:
(file /my/local/pthreads/lib/libpthread.a(findfp.o) value=0x4;
file /usr/lib/libc.so value=0x140);
/my/local/pthreads/lib/libpthread.a(findfp.o) definition taken
ld: warning: symbol `__iob' has differing sizes:
(file /my/local/pthreads/lib/libpthread.a(findfp.o) value=0x4;
file /usr/lib/libc.so value=0x140);
/my/local/pthreads/lib/libpthread.a(findfp.o) definition taken
一些其他的警告也可被忽略:
implicit declaration of function `int strtoll(...)'
implicit declaration of function `int strtoul(...)'
我們還沒有讓readline可在MIT-pthreads上工作。(這不需要,但是可能某些人有興趣。)
4.10 Perl 安裝說明
4.10.1 在Unix上安裝Perl
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.mysql.com/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.PL
shell>; make
shell>; make test
shell>; make install
make test命令很重要,因?yàn)樗?yàn)證模塊正在工作。注意:在你Msql-Mysql-modules安裝期間運(yùn)行該命令試驗(yàn)接口代碼時(shí),MySQL服務(wù)器必須正在運(yùn)行,否則測試將失敗。
無論何時(shí)你安裝一個新版本的MySQL,重建并且重新安裝Msql-Mysql-modules分發(fā)是一個好主意, 特別是如果你在升級MySQL后,觀察所有異常,如你的DBI腳本核心傾倒(core dump)。
如果你沒有權(quán)限在系統(tǒng)目錄下安裝Perl模塊,或如果你安裝本地Perl模塊,下列參考書可以幫助你:
http://www.iserver.com/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.mysql.com/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.mysql.com/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 報(bào)告它不能找到../mysql/mysql.so模塊,那么問題可能是該P(yáng)erl不能找到共享庫文件“l(fā)ibmysqlclient.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)造時(shí)候,為鏈接命令加上-L/usr/lib/gcc-lib/... -lgcc(當(dāng)你編譯Perl客戶時(shí)檢查針對“mysql.so”的make輸出)。-L選項(xiàng)應(yīng)該指定“l(fā)ibgcc.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/lib
shell>; LIBPATH=/usr/lib:/lib:/usr/local/lib:/usr/ccs/lib:/usr/progressive/lib:/usr/skunk/lib
shell>; 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=static
shell>; make
shell>; make install
shell>; 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的輸出指出使用的命令。
4.11 系統(tǒng)特定的問題
下面的章節(jié)說明在從源代碼分發(fā)安裝MySQL時(shí),發(fā)生在特定的系統(tǒng)上并已觀察到的一些問題。
4.11.1 Solaris注意事項(xiàng)
在Solaris上,甚至在你解開MySQL分發(fā)以前,你可能陷入困境!Solaris tar不能處理長文件名字,因此你在打開MySQL時(shí),可能看到這樣的一個錯誤:
x mysql-3.22.12-beta/bench/Results/ATIS-mysql_odbc-NT_4.0-cmp-db2,informix,ms-sql,mysql,oracle,solid,sybase, 0 bytes, 0 tape blocks
tar: directory checksum error
在這種情況下,你必須使用 GNU tar(gtar) 打開分發(fā)。你能在http://www.mysql.com/Downloads/找到為Solaris的一個預(yù)編譯的拷貝。
Sun的原生線程只工作在Solaris 2.5和更高版本上。對于2.4和更早的版本,MySQL將自動地使用 MIT-pthreads 。見4.9 MIT-pthreads 注意事項(xiàng)。
如果你從配置得到下列錯誤:
checking for restartable system calls... configure: error can not run test
programs while cross compiling
這意味著你的編譯器安裝有些問題!在這種情況下,你應(yīng)該升級編譯器到一個更新的版本。你也可以把下列行插入到config.cache文件來解決這個問題:
ac_cv_sys_restartable_syscalls=${ac_cv_sys_restartable_syscalls='no'}
如果你在一個SPARC上使用Solaris,推薦的編譯器是egcs1.1.2 或更新。你能在http://egcs.cygnus.com/找到它。注意:egs1.1.1 和gcc2.8.1 不能在 SPARC 上可靠地工作!
當(dāng)使用時(shí)egcs1.1.2時(shí),推薦的configure命令行是:
shell>; CC=gcc CFLAGS="-O6" \
CXX=gcc CXXFLAGS="-O6 -felide-constructors -fno-exceptions -fno-rtti" \
./configure --prefix=/usr/local/mysql --with-low-memory
如果你有Sun Workshop 4.2 編譯器,你能這樣運(yùn)行configure:
CC=cc CFLAGS="-xstrconst -Xa -xO4 -native -mt" CXX=CC CXXFLAGS="-xO4 -native -noex -mt" ./configure --prefix=/usr/local/mysql
shell>; CC=cc CFLAGS="-Xa -fast -xO4 -native -xstrconst -mt" \
CXX=CC CXXFLAGS="-noex -XO4 -mt" \
./configure
你也可以編輯configure腳本改變該行:
#if !defined(__STDC__) || __STDC__ != 1
為:
#if !defined(__STDC__)
如果你使用-Xc選項(xiàng)打開__STDC__,Sun編譯器不能用 Solaris 的“pthread.h”頭文件編譯。這是Sun的一個bug。
如果mysqld在運(yùn)行時(shí)發(fā)出顯示在下面的錯誤消息,你已經(jīng)嘗試用Sun編譯器編譯MySQL,沒有啟用多線程選擇(-mt):
libc internal error: _rmutex_unlock: rmutex not held
增加-mt到CFLAGS和CXXFLAGS并且再試一試。
如果你在用gcc編譯MySQL時(shí)得到下列錯誤,它意味著你的gcc沒有對你的Solaris版本進(jìn)行配置!
shell>; gcc -O3 -g -O2 -DDBUG_OFF -o thr_alarm ...
./thr_alarm.c: In function `signal_hand':
./thr_alarm.c:556: too many arguments to function `sigwait'
在這種情況下正確的做法是得到最新版本的egcs,并且用你當(dāng)前的gcc編譯器編譯它!至少對于 Solaris 2.5,幾乎所有的gcc二進(jìn)制版本都有舊的、不可用的包含文件,將破懷使用線程的所有程序的文件(并且可能是其他的程序)!
Solaris不提供所有系統(tǒng)庫的靜態(tài)版本(libpthreads和libdl),所以你不能用--static編譯MySQL。如果你嘗試這樣做,你將得到錯誤:
ld: fatal: library -ldl: not found
如果太多進(jìn)程試圖很快地連接mysqld,你將在MySQL日志文件中看見這個錯誤:
Error in accept: Protocol error
你可以試著用--set-variable back_log=50選項(xiàng)啟動服務(wù)器作為它的一個解決辦法。
如果你正在鏈接你自己的MySQL客戶,當(dāng)你試著執(zhí)行它時(shí),你可能得到下列錯誤:
ld.so.1: ./my: fatal: libmysqlclient.so.#: open failed: No such file or directory
這個問題能用下列方法之一避免:
用下列標(biāo)志鏈接客戶(而不是-Lpath): -Wl,r/full-path-to-libmysqlclient.so。
拷貝libmysqclient.so到“/usr/lib”。
在運(yùn)行你的客戶程序前,把libmysqlclient.so所在目錄的路徑名加到LD_RUN_PATH的環(huán)境變量中。
4.11.2 Solaris 2.7 注意事項(xiàng)
通常你能在 Solaris 2.7 上使用 Solaris 2.6 二進(jìn)制代碼。大多數(shù)Solaris 2.6 的問題也適用于Solaris 2.7。
注意:MySQL3.23.4 和更高版本應(yīng)該能自動檢測 Solaris 2.7 并且啟用下列問題的解決辦法!
Solaris 2.7 在包括文件中有一些bug,在使用gcc時(shí),你可以看見下列錯誤:
/usr/include/widec.h:42: warning: `getwc' redefined
/usr/include/wchar.h:326: warning: this is the location of the previous
definition
如果出現(xiàn)這種情況,你可以做下列事情解決這個問題:
拷貝/usr/include/widec.h到.../lib/gcc-lib/os/gcc-version/include并且改變第41行:
#if !defined(lint) && !defined(__lint)
為
#if !defined(lint) && !defined(__lint) && !defined(getwc)
另外,你可以直接編輯“/usr/include/widec.h”。這兩種方法,在你進(jìn)行修正以后,你應(yīng)該刪除“config.cache”并且再運(yùn)行configure!
如果當(dāng)你運(yùn)行make時(shí),你得到象這樣錯誤,那是因?yàn)閏onfigure沒檢測“curses.h”文件(可能因?yàn)?usr/include/widec.h的錯誤):
In file included from mysql.cc:50:
/usr/include/term.h:1060: syntax error before `,'
/usr/include/term.h:1081: syntax error before `;'
解決它的方案是做下列步驟之一:
如上所述編輯“/usr/include/widec.h”并且再次運(yùn)行configure。
從“config.h”文件刪除#define HAVE_TERM行并再次運(yùn)行make。
用CFLAGS=-DHAVE_CURSES CXXFLAGS=-DHAVE_CURSES ./configure進(jìn)行配置。
4.11.3 Solaris x86 注意事項(xiàng)
如果你正在在 Solaris x86上使用gcc或egcs,并且你碰到了在裝載時(shí)的核心傾倒(core dump)問題,你應(yīng)該使用下列configure命令:
shell>; CC=gcc CFLAGS="-O6 -fomit-frame-pointer" \
CXX=gcc \
CXXFLAGS="-O6 -fomit-frame-pointer -felide-constructors -fno-exceptions -fno-rtti" \
./configure --prefix=/usr/local/mysql
用libstdc++庫和與C++異常處理來避免這個問題。
如果這沒有幫助,你應(yīng)該編譯一個調(diào)試版本并且用一個蹤跡文件運(yùn)行它或在gdb下運(yùn)行它。見G.1 調(diào)試一個 MySQL 服務(wù)器。
4.11.4 SunOS 4 注意事項(xiàng)
在 SunOS 4 上, 需要MIT-pthreads 編譯MySQL,反過來這意味著你將需要GNU make。
一些SunOS 4系統(tǒng)的動態(tài)庫和libtool有問題。你可以使用下列configure行來避免這個問題:
shell>; ./configure --disable-shared --with-mysqld-ldflags=-all-static
當(dāng)編譯readline時(shí),你可能得到關(guān)于重復(fù)定義的警告,這些可以被忽略。
當(dāng)編譯mysqld時(shí)候, 將有一些implicit declaration of function警告,這些可以被忽略。
4.11.5 Linux 注意事項(xiàng)(所有Linux版本)
MySQL在Linux上使用 LinuxThreads 。如果你正在使用一個沒有g(shù)libc2的老的Linux版本,你必須在嘗試編譯MySQL前安裝LinuxThreads。http://www.mysql.com/Downloads/Linux
注意:但你做INSERT DELAYED時(shí),所用的包括2.1.1及以前的glibc版本在pthread_mutex_timedwait處理上有一個致命錯誤,如果你正在使用INSERT DELAYED,你必須把下列補(bǔ)丁加到你的glibc庫中:http://www.mysql.com/Downloads/Patches/glibc-pthread_cond_timedwait.patch。MySQL 3.23.7包含了對這個錯誤的一個臨時(shí)解決辦法。
如果你不能啟動mysqld或如果mysql_install_db不工作,請繼續(xù)讀下去!這僅發(fā)生在有LinuxThreads問題或libc/glibc庫為題的Linux系統(tǒng)上。有很多簡單的解決辦法讓MySQL工作!最簡單是使用針對Linux x86的二進(jìn)制版本的MySQL(不是RPM),這個版本的一個好的方面是它可能比你編譯你自己的任何版本快10%!見10.2.1 編譯和鏈接如何影響 MySQL 的速度。
二進(jìn)制分發(fā)的一個已知問題是與使用libc的更老的Linux系統(tǒng)(如RedHat 4.x 或 Slackware),你將得到有關(guān)主機(jī)名解決的一些非致命問題。見4.6.3.1 Linux注意事項(xiàng)。
使用libc.so.5.3.12,myisamchk將掛起,升級到最新libc以解決這個問題。
當(dāng)使用 LinuxThreads 時(shí),你將看到最少 3 進(jìn)程在運(yùn)行。這些事實(shí)上的線程,對LinuxThreads管理器將有一個線程,一個線程處理連接,還有一個線程處理告警和信號。
如果你用ps看到了一個死掉的mysqld守護(hù)進(jìn)程,這通常意味著你發(fā)現(xiàn)了MySQL里面的一個錯誤或你有一個被破壞的數(shù)據(jù)庫表。見18.1 如果MySQL總是崩潰怎么辦。
如果你正在使用LinuxThreads并且mysqladmin shutdown不工作,你必須升級到 LinuxThreads 0.7.1 或更新。
如果你正在使用 RedHat ,你可能得到象這樣的錯誤:
/usr/bin/perl is needed...
/usr/sh is needed...
/usr/sh is needed...
如果是這樣,你應(yīng)該升級rpm版本到“rpm-2.4.11-1.i386.rpm”和“rpm-devel-2.4.11-1.i386.rpm”(或以后)。
你能從ftp://ftp.redhat.com/updates/4.2/i386得到RedHat 4.2的庫文件升級,或?qū)ζ渌职l(fā)http://www.sunsite.unc.edu/pub/Linux/distributions/redhat/code/rpm/。
如果你正在鏈接你自己的MySQL客戶并且得到錯誤:
ld.so.1: ./my: fatal: libmysqlclient.so.4: open failed: No such file or directory
當(dāng)執(zhí)行它們時(shí),這個問題可用下列方法之一避免:
用下列標(biāo)志鏈接客戶(而不是-Lpath): -Wl,r/path-libmysqlclient.so。
拷貝libmysqclient.so到“/usr/lib”。
在運(yùn)行你的客戶程序前,把libmysqlclient.so所在目錄的路徑名加到LD_RUN_PATH的環(huán)境變量中。
如果你正在使用 Fujitsu 編譯器(fcc / FCC),編譯MySQL你將有一些問題,因?yàn)?Linux 頭文件面向gcc。
下列configure行應(yīng)該與fcc/FCC工作:
CC=fcc CFLAGS="-O -K fast -K lib -K omitfp -Kpreex -D_GNU_SOURCE -DCONST=const \
-DNO_STRTOLL_PROTO" CXX=FCC CXXFLAGS="-O -K fast -K lib -K omitfp \
-K preex --no_exceptions --no_rtti -D_GNU_SOURCE -DCONST=const \
-Dalloca=__builtin_alloca -DNO_STRTOLL_PROTO '-D_EXTERN_INLINE=static __inline'" \
./configure --prefix=/usr/local/mysql --enable-assembler \
--with-mysqld-ldflags=-all-static --disable-shared --with-low-memory
4.11.5.1 Linux-x86 注意事項(xiàng)
MySQL要求libc版本 5.4.12 或更新,已知可工作在libc 5.4.46。glibc版本2.0.6和以后版本應(yīng)該也工作。使用RedHat的glibc RPM有一些問題,所以如果你有問題,檢查是否有任何更新!glibc2.0.7-19和2.0.7-29 RPM已知可以工作。
在一些更老的 Linux 分發(fā)上,configure可能產(chǎn)生象這樣的一個錯誤:
Syntax error in sched.h. Change _P to __P in the /usr/include/sched.h file.
See the Installation chapter in the Reference Manual.
按照錯誤消息所說的去做,并且給只有一條下劃線的_P宏增加一個額外下劃線 ('__P'), 然后再試一試。
在編譯時(shí),你可能得到一些警告;顯示在下面的那些可以被忽略:
mysqld.cc -o objs-thread/mysqld.o
mysqld.cc: In function `void init_signals()':
mysqld.cc:315: warning: assignment of negative value `-1' to `long unsigned int'
mysqld.cc: In function `void * signal_hand(void *)':
mysqld.cc:346: warning: assignment of negative value `-1' to `long unsigned int'
在Debian GNU/Linux上,如果你想要在系統(tǒng)啟動時(shí)自動啟動MySQL,做下列命令:
shell>; cp support-files/mysql.server /etc/init.d/mysql.server
shell>; /usr/sbin/update-rc.d mysql.server defaults 99
mysql.server可以在MySQL安裝目錄的“share/mysql”目錄下面找到, 或在MySQL源代碼樹的“support-files”目錄下找到。
如果mysqld在它啟動時(shí)總是核心傾倒(core dump), 問題可能是你有一個老版本的“/lib/libc.a”,重命名它,然后刪除“sql/mysqld”并且重新make install再試一試。這個問題在一些 Slackware 安裝上被報(bào)告了。有最新版本的glibc的RedHat 5.0也有一些類似的問題。見4.11.5.2 RedHat 5.0 注意事項(xiàng)。
如果再鏈接mysqld時(shí),你得到下列錯誤, 它意味著你的“l(fā)ibg++.a”沒有正確安裝:
/usr/lib/libc.a(putc.o): In function `_IO_putc':
putc.o(.text+0x0): multiple definition of `_IO_putc'
像這樣運(yùn)行configure,你能避免使用“l(fā)ibg++.a”:
shell>; CXX=gcc ./configure
4.11.5.2 RedHat 5.0 注意事項(xiàng)
如果你在RedHat上有MySQL的任何問題,你應(yīng)該開始升級glibc到最新可能的版本!
如果你安裝所有的官方RedHat補(bǔ)丁(包括glibc-2.0.7-19和glibc-devel-2.0.7-19),MySQL的二進(jìn)制代碼和源代碼分發(fā)運(yùn)行應(yīng)該沒有任何麻煩!
因?yàn)樵趃libc2.0.5里面有關(guān)如何釋放pthread_key_create變量有一個錯誤,更新是需要的。用glibc2.0.5,你必須使用一個靜態(tài)地鏈接的MySQL二進(jìn)制分發(fā)。如果你想要從源代碼編譯,你必須安裝來自于http://www.mysql.com/Downloads/Linux 的LinuxThreads修正版本或升級你的glibc。
如果你有一個不正確的glibc或LinuxThreads版本,其結(jié)果是mysqld在每個連接以后崩潰。例如,mysqladmin version完成后,mysqld將崩潰!
另一個不正確的庫的癥狀是當(dāng)mysqld啟動時(shí),馬上崩潰。在一些Linux系統(tǒng)上,這個問題可以通過這樣的配置來修正:
shell>; ./configure -- with-mysqld-ldflags=-all-static
在Redhat 5.0上,容易的方法是安裝glibc2.0.7-19 RPM并運(yùn)行configure --with-mysqld-ldflags=-all-static選項(xiàng)。
對于glibc2.0.7的源代碼分發(fā),容易運(yùn)用并被MySQL測試的一個補(bǔ)丁可以在下面找到:
http://www.mysql.com/Download/Linux/glibc-2.0.7-total-patch.tar.gz
如果當(dāng)你構(gòu)造MySQL時(shí),你有類似于這些崩潰的經(jīng)歷, 你總能下載到最新的MySQL二進(jìn)制版本。這是靜態(tài)鏈接的以避免庫沖突而且應(yīng)該在所有的Linux系統(tǒng)上工作!
MySQL自帶一個內(nèi)部的調(diào)試器可以有很多信息產(chǎn)生蹤跡文件,能被用來發(fā)現(xiàn)并解決大量不同的問題。見G.1 調(diào)試一個MySQL服務(wù)器。
4.11.5.3 RedHat 5.1 注意事項(xiàng)
RedHat 5.1的glibc(glibc2.0.7-13 )有一個內(nèi)存缺陷,所以要得到一個穩(wěn)定的MySQL版本,你必須升級glibc到2.0.7-19、降級glibc或使用一個mysqld的二進(jìn)制版本。如果你不這樣做,你將碰到內(nèi)存問題(存儲器溢出,等等, 等等)。在這種情況下,最常見的錯誤是:
Can't create a new thread (errno 11). If you are not out of available
memory, you can consult the manual for any possible OS dependent bug
在你升級到glibc2.0.7-19以后,你可以用動態(tài)鏈接(缺省)配置MySQL,但是在你從源代碼安裝了glibc 2.0.7-19之前,你不能運(yùn)行configure --with-mysqld-ldflags=-all-static選項(xiàng)!
你可以用rpm -q glibc檢查你有g(shù)libc哪個版本。
4.11.5.4 Linux-SPARC 注意事項(xiàng)
在一些實(shí)現(xiàn)中,readdir_r()被破壞了。其癥狀是SHOW DATABASES總是返回一個空集合。這可以通過在編譯前從“config.h”中刪除HAVE_READDIR_R進(jìn)行更正。
有些問題將需要給你的Linux安裝打補(bǔ)丁。補(bǔ)丁可在http://www.mysql.com/patches/Linux-sparc-2.0.30.diff找到,這個補(bǔ)丁是針對Linux分發(fā)“sparclinux-2.0.30.tar.gz”,它們可從vger.rutgers.edu(一個從來沒有與官方的2.0.30版合并的版本)得到。你也必須安裝LinuxThreads 0.6或更新。
感謝jacques@solucorp.qc.ca提供這個信息。
4.11.5.5 Linux-Alpha注意事項(xiàng)
在Linux-Alpha上的大問題仍然是在這個平臺上的glibc的線程有一些問題。你應(yīng)該從得到你能找到的最新glibc版本開始。
注意:在你運(yùn)行任何使用線程的程序之前(象mysqld、thr_alarm或thr_lock),你應(yīng)該增減共享存儲器的限制(用ulimit)。如果你忘記這樣做,MySQL基準(zhǔn)測試已知是失敗的!
用下列命令配置MySQL:
shell>; CC=gcc CCFLAGS="-Dalpha_linux_port" \
CXX=gcc CXXFLAGS="-O3 -Dalpha_linux_port -felide-constructors -fno-exceptions -fno-rtti" \
./configure --prefix=/usr/local/mysql
試試編譯mysys/thr_lock和mysys/thr_alarm,測試這些程序的運(yùn)行。ú挥脜(shù)調(diào)用每一個,如果一切正常,每個應(yīng)該以test_succeeded結(jié)束。)
在安裝MySQL以后,在safe_mysqld里去掉ulimit命令的注釋,并加入選項(xiàng)以增加共享存儲器。
注意對MySQL來說,Linux-Alpha仍然是一個alpha質(zhì)量的平臺。用最新glibc,你有一個讓它工作的很好機(jī)會。
如果你用信號方面的問題(MySQL出人意料地在高負(fù)載下死掉),你可能找到了一個線程和信號有關(guān)的OS錯誤。在這種情況下,你可以告訴MySQL如下配置以不使用信號:
shell>; CFLAGS=-DDONT_USE_THR_ALARM \
CXXFLAGS=-DDONT_USE_THR_ALARM \
./configure ...
這不影響MySQL性能,但是有副作用,就是你不能用mysqladmin kill或mysqladmin shutdown殺死在一個連接上“睡眠”的客戶。相反,當(dāng)客戶發(fā)出下一個命令時(shí),它將死掉。
4.11.5.6 MkLinux 注意
MySQL應(yīng)該能工作在有最新glibc包的MkLinux上(用glibc2.0.7測試過)。
4.11.5.7 Qube2 Linux注意事項(xiàng)
為了讓MySQL在Qube2上工作,(Linux Mips),你需要最新的glibc庫(glibc-2.0.7-29C2已知可工作)。你也必須使用egcsC++編譯器(egcs-1.0.2-9或更新)。
4.11.6 Alpha-DEC-Unix 注意事項(xiàng)
當(dāng)在Digital UNIX下編譯線程程序時(shí),文檔推薦對于cc和cxx使用-pthread選項(xiàng)而且?guī)煳募?lmach -lexc(除了-lpthread外)。你應(yīng)該象下面這樣運(yùn)行configure:
shell>; CC="cc -pthread" CXX="cxx -pthread -O" \
./configure --with-named-thread-libs="-lpthread -lmach -lexc -lc"
當(dāng)編譯mysqld時(shí),你可能看見這樣一些警告:
mysqld.cc: In function void handle_connections()':
mysqld.cc:626: passing long unsigned int *' as argument 3 of
accept(int,sockadddr *, int *)'
你可以安全地忽略這些警告,他們的發(fā)生是因?yàn)閏onfigure只能檢測出錯誤,而不是警告。
如果你直接從命令行啟動服務(wù)器,當(dāng)你退出時(shí),你可能有死掉的問題。(當(dāng)你退出時(shí),你的重要進(jìn)程收到一個SIGHUP信號),如果如此,試著象這樣啟動服務(wù)器:
shell>; nohup mysqld [options] &
nohup使得跟隨它的命令忽視從終端發(fā)來的任何SIGHUP信號了。另外,通過運(yùn)行safe_mysqld啟動服務(wù)器,它為你使用nohup調(diào)用mysqld。
4.11.7 Alpha-DEC-OSF1注意事項(xiàng)
如果你有編譯問題并安裝了DECCC和gcc,嘗試這樣運(yùn)行configure:
shell>; CC=cc CFLAGS=-O CXX=gcc CXXFLAGS=-O3 \
./configure --prefix=/usr/local/mysql
如果你得到“c_asm.h”文件的問題,你可以創(chuàng)建并使用一個“啞(dummy)”“c_asm.h”文件:
shell>; touch include/c_asm.h
shell>; CC=gcc CFLAGS=-I./include \
CXX=gcc CXXFLAGS=-O3 \
./configure --prefix=/usr/local/mysql
在OSF1 V4.0D和編譯器"DEC C V5.6-071 on Digital UNIX V4.0 (Rev. 87 " 上,編譯器有了一些奇怪的行為(未定義asm標(biāo)志)。/bin/ld好象也被破壞(當(dāng)鏈接mysqld時(shí),發(fā)生_exit undefined問題)。在這個系統(tǒng)上,從OSF 4.0C的版本替換了/bin/ld后,我們設(shè)法用下列configure命令行編譯MySQL,:
shell>; CC=gcc CXX=gcc CXXFLAGS=-O3 ./configure --prefix=/usr/local/mysql
用Digital編譯器“C++ V6.1-029”,下列命令應(yīng)該工作:
CC=cc -pthread
CFLAGS=-O4 -ansi_alias -ansi_args -fast -inline speed -speculate all -arch host
CXX=cxx -pthread
CXXFLAGS=-O4 -ansi_alias -ansi_args -fast -inline speed -speculate all -arch host
export CC CFLAGS CXX CXXFLAGS
./configure --prefix=/usr/mysql/mysql --with-low-memory --enable-large-files \
--with-mysqld-ldflags=-all-static --disable-shared --with-named-thread-libs="-lmach -lexc -lc"
在OSF1的某些版本中,alloca()函數(shù)被破壞,通過刪除定義'HAVE_ALLOCA'的“config.h”的行更正它。
alloca()函數(shù)也可能在/usr/include/alloca.h里面有一個不正確的原型,源于此的警告可以忽略。
configure將自動地使用下列線程庫: --with-named-thread-libs="-lpthread -lmach -lexc -lc"。
當(dāng)使用gcc時(shí),你也可以試試這樣運(yùn)行configure:
shell>; CFLAGS=-D_PTHREAD_USE_D4 CXX=gcc CXXFLAGS=-O3 ./configure ……
如果你的信號有問題(MySQL出人意料地在高負(fù)載下死掉),你可能找到了一個線程和信號有關(guān)的OS錯誤。在這種情況下,你可以告訴MySQL如下配置以不使用信號:
shell>; CFLAGS=-DDONT_USE_THR_ALARM \
CXXFLAGS=-DDONT_USE_THR_ALARM \
./configure ...
這不影響MySQL性能,但是有負(fù)面效應(yīng),就是你不能用mysqladmin kill或mysqladmin shutdown殺死在一個連接上“睡眠”的客戶。相反,當(dāng)客戶發(fā)出下一個命令時(shí),它將死掉。
4.11.8 SGI-Irix 注意事項(xiàng)
你可能需要在運(yùn)行configure后且在編譯前去掉在“config.h”里面一些東西的定義(underfine)。
在一些Irix實(shí)現(xiàn)中,alloca()函數(shù)被破壞。如果mysqld服務(wù)器死于一些SELECT語句,把“config.h”定義HAVE_ALLOC和HAVE_ALLOCA_H的行刪除即可。如果mysqladmin create不工作,把“config.h”定義HAVE_READDIR_R的行刪除,你也可能必須刪除HAVE_TERM_H行。
SGI推薦你將本頁上的所有補(bǔ)丁作為一個整體來安裝:http://support.sgi.com/surfzone/patches/patchset/6.2_indigo.rps.html
最小地,你應(yīng)該安裝最新的核心卷(rollup)、最新的rld卷和最新的libc卷。
很明確,對于pthreads支持,你需要本頁上所有的POSIX補(bǔ)。
http://support.sgi.com/surfzone/patches/patchset/6.2_posix.rps.html
如果在編譯“mysql.cc”時(shí),你得到類似于下面的錯誤:
"/usr/include/curses.h", line 82: error(1084): invalid combination of type
那么,在你的MySQL源代碼樹的頂級目錄打下列命令:
shell>; extra/replace bool curses_bool < /usr/include/curses.h >; include/curses.h
shell>; make
應(yīng)該也有安排上的問題報(bào)告。如果只有一個線程正在運(yùn)行,事情會變慢的。通過啟動另外一個客戶來避免它,這可以導(dǎo)致此后其他線程的執(zhí)行速度增加2到10倍。這是Irix線程難以理解的問題;你可能必須臨時(shí)準(zhǔn)備找出解決方案直到它能被修正。
如果你正在用gcc編譯,你可以使用下列configure命令:
shell>; CC=gcc CXX=gcc CXXFLAGS=-O3 \
./configure --prefix=/usr/local/mysql --with-thread-safe-client --with-named-thread-libs=-lpthread
4.11.9 FreeBSD 注意事項(xiàng)
對于運(yùn)行MySQL,F(xiàn)reeBSD 3.x是被推薦的,因?yàn)槠渚程包是更加完整。
最容易因此是比較受喜歡的安裝方法是使用mysql服務(wù)者和 mysql客戶的移植,可從http://www.freebsd.org得到。
使用這些給你的東西:
一個全優(yōu)化的工作在你的FreeBSD版本上的MySQL。
自動配置和構(gòu)造。
啟動腳本安裝在/usr/local/etc/rc.d。
用pkg_info -L察看哪個文件被安裝的能力,并且如果你在那臺機(jī)器上不再想要MySQL,用pkg_delete完全刪除它們。
建議在FreeBSD 2.x版上使用 MIT-pthreads,在版本3和以上版本用原生線程。在一些2.2.x的以后版本使用原生線程運(yùn)行是可能的,但是你可能碰到mysqld關(guān)掉的問題。
確定讓你的名字解析程序安裝正確,否則當(dāng)連接mysqld時(shí),你可能會經(jīng)歷解析延時(shí)或失敗。
保證在“/etc/hosts”文件中的localhost入口是正確的(否則你與數(shù)據(jù)庫連接時(shí)將有問題)!/etc/hosts”文件應(yīng)該以一行開始:
127.0.0.1 localhost localhost.your.domain
如果你注意到configure使用 MIT-pthreads,你應(yīng)該閱讀MIT-pthreads注意事項(xiàng),見4.9 MIT-pthreads 注意事項(xiàng)。
如果你從make install得到一個它不能找到“/usr/include/pthreads”的錯誤,configure沒有檢測出你需要 MIT-pthreads。通過執(zhí)行這些命令修正它:
shell>; rm config.cache
shell>; ./configure --with-mit-threads
FreeBSD make的行為與make GNU略有不同。如果你有make相關(guān)問題,你應(yīng)該安裝GNU make。
FreeBSD也已知有一個非常低的缺省文件句柄限制。見18.11 文件沒找到。去掉在safe_mysqld中的ulimit -n 小節(jié)的注釋或在/etc/login.conf為mysqld用戶提高限制(并用cap_mkdb /etc/login.conf重建它),如果你不使用缺省,也要保證你為此用戶在口令文件(用法:chpass mysqld-user-name )。
你用SELECT NOW()返回GMT形式的值而不是你的本地時(shí)間,如果有這樣的問題,你必須設(shè)定TZ環(huán)境變量為你的當(dāng)前時(shí)區(qū)的。這應(yīng)該設(shè)置服務(wù)器運(yùn)行的環(huán)境,例如在safe_mysqld或mysql.server里。
為了得到一個安全并且穩(wěn)定的系統(tǒng),你應(yīng)該只僅使用被標(biāo)記為-STABLE的FreeBSD內(nèi)核。
4.11.10 NetBSD 注意事項(xiàng)
為了NetBSD上編譯,你需要GNU make,否則當(dāng)make試圖在C++文件上運(yùn)行l(wèi)int時(shí),編譯將崩潰。
4.11.11 OpenBSD 2.5 注意事項(xiàng)
在OpenBSD 2.5上,你可以用下列選項(xiàng)編譯帶原生線程的MySQL:
CFLAGS=-pthread CXXFLAGS=-pthread ./configure -- with-mit-threads=no
4.11.12 BSD/OS 注意事項(xiàng)
4.11.12.1 BSD/OS 2.x 注意事項(xiàng)
如果在編譯MySQL時(shí),你得到下列錯誤, 你對虛存的ulimit值是太低了:
item_func.h: In method `Item_func_ge::Item_func_ge(const Item_func_ge & ':
item_func.h:28: virtual memory exhausted
make[2]: *** [item_func.o] Error 1
試試使用ulimit -v 80000并再運(yùn)行make。如果這還不行并且你正在使用bash,試試換到csh或sh;一些BSDI用戶報(bào)告了與bash和ulimit有關(guān)問題。
如果你正在使用gcc,你也可能必須為configure使用--with-low-memory標(biāo)志才能編譯“sql_yacc.cc”。
你用SELECT NOW()返回GMT形式的值而不是你的本地時(shí)間,如果有這樣的問題,你必須設(shè)定TZ環(huán)境變量為你的當(dāng)前時(shí)區(qū)的。這應(yīng)該為服務(wù)器運(yùn)行的環(huán)境設(shè)置,例如在safe_mysqld或mysql.server里。
4.11.12.2 BSD/OS 3.x 注意事項(xiàng)
升級到BSD/OS 3.1。如果那不可能,安裝BSDI patch M300-038。
在配置MySQL時(shí),使用下列命令:
shell>; env CXX=shlicc++ CC=shlicc2 \
./configure \
--prefix=/usr/local/mysql \
--localstatedir=/var/mysql \
--without-perl \
--with-unix-socket-path=/var/mysql/mysql.sock
下列也已知可用:
shell>; env CC=gcc CXX=gcc CXXFLAGS=-O3 \
./configure \
--prefix=/usr/local/mysql \
--with-unix-socket-path=/var/mysql/mysql.sock
如果你愿意,你可以改變目錄地點(diǎn),或不指定任何地點(diǎn)而使用缺省。
如果你在重負(fù)再下的性能有問題,試試使用對safe_mysqld使用--skip-thread-priority選項(xiàng)!這將以相同優(yōu)先級運(yùn)行所有線程;在BSDI 3.1上,這得到較好的性能(至少直到BSDI修正其線程調(diào)度程序)。
如果你在編譯時(shí)得到virtual memory exhausted錯誤,試試使用ulimit -v 80000并再運(yùn)行make。如果這還不行并且你正在使用bash,試試換到csh或sh;一些BSDI用戶報(bào)告了與bash和ulimit有關(guān)問題。
4.11.12.3 BSD/OS 4.x 注意事項(xiàng)
BSDI 4.x有一些線程有關(guān)的錯誤。如果你想要在這上面使用MySQL,你應(yīng)該安裝所有與線程相關(guān)的補(bǔ)丁,至少應(yīng)該安裝M400-023。
4.11.13 SCO 注意事項(xiàng)
當(dāng)前的移植僅在“sco3.2v5.0.4”和“sco3.2v5.0.5”系統(tǒng)上被測試,在“sco 3.2v4.2”一個移植也有很大進(jìn)展。
此時(shí)在OpenServer上推薦的編譯器是gcc 2.95.2,用它你應(yīng)該能編譯MySQL:
CC=gcc CXX=gcc ./configure ... (options)
對于OpenServer 5.0.X,你需要在Skunkware 95上使用GDS(95q4c),這是必要的,因?yàn)樵赟kunkware 97上的GNU gcc 2.7.2 沒有GNU as。你也可以使用egcs1.1.2或更新:http://www.egcs.com/。如果你正在使用egcs1.1.2,你必須執(zhí)行下列命令:
shell>; cp -p /usr/include/pthread/stdtypes.h \
/usr/local/lib/gcc-lib/i386-pc-sco3.2v5.0.5/egcs-2.91.66/include/pthread/
對該產(chǎn)品和開發(fā)系統(tǒng),你需要GCC 2.5.?的移植。他們在這個SCO UNIX版本上是必需的,你不能只使用GCC Dev系統(tǒng)。
你應(yīng)該得到 FSU Pthreads 包并且首先安裝它,它可在http://www.cs.wustl.edu/~ schmidt/ACE_wrappers/FSU-threads.tar.gz找到。你也可以從ftp://www.mysql.com/pub/mysql/Downloads/SCO/FSU-threads-3.5c.tar.gz得到一個預(yù)編譯的包。
FSU Pthreads能用帶tcpip的SCO UNIX 4.2編譯,或OpenServer 3.0或Open Desktop 3.0(OS 3.0 ODT 3.0),安裝帶有使用一個GCC 2.5.X ODT的SCO開發(fā)系統(tǒng),或?qū)S 3.0你將需要一個GCC 2.5.?的良好移植。 沒有一個良好的移植會有很多問題。對這個產(chǎn)品的移植需要SCO UNIX開發(fā)系統(tǒng),沒有它,你正缺少所需的庫和鏈接器。
為了在你的系統(tǒng)上構(gòu)造FSU Pthreads,做下列工作:
在“thread/src”目錄下運(yùn)行./configure并且選擇SCO OpenServer選項(xiàng)。這個命令拷貝“Makefile.SCO5”到“Makefile”。
運(yùn)行make。
為了在缺省的“/usr/include”目錄安裝,作為root登錄,然后cd 到“thread/src”目錄,并運(yùn)行make install。
記得在制作MySQL時(shí)要使用GNU make。
在OSR 5.0.5上,你應(yīng)該使用下列配置命令行:
shell>; CC="gcc -DSCO" CXX="gcc -DSCO" ./configure
需要-DSCO幫助配置正確檢測一些線程函數(shù)。如果你忘記-DSCO,在編譯時(shí),你將得到下列錯誤消息:
my_pthread.c: In function `my_pthread_mutex_init':
my_pthread.c:374: `pthread_mutexattr_default' undeclared (first use this function)
如果你不是作為root啟動safe_mysqld,你將可能每進(jìn)程只有缺省的110個打開文件。mysqld將在日志文件寫下關(guān)于此的注解。
用SCO 3.2 V5.0.5,你應(yīng)該使用一個FSU Pthreads版本3.5c或更新。下列configure命令應(yīng)該工作:
shell>; CC="gcc -belf" ./configure --prefix=/usr/local/mysql --disable-shared
用SCO 3.2V4.2,你應(yīng)該使用一個FSU Pthreads版本3.5c或更新。下列configure命令應(yīng)該工作:
shell>; CFLAGS="-D_XOPEN_XPG4" CXX=gcc CXXFLAGS="-D_XOPEN_XPG4" \
./configure \
--with-debug --prefix=/usr/local/mysql \
--with-named-thread-libs="-lgthreads -lsocket -lgen -lgthreads" \
--with-named-curses-libs="-lcurses"
你可能得到一些包括文件的某些問題。在這種情況下,你能在ftp://www.mysql.com/pub/mysql/Downloads/SCO/SCO-3.2v4.2-includes.tar.gz找到新的SCO特定的包括文件。你應(yīng)該在你的MySQL源代碼樹的“include”目錄下打開這個文件。
SCO開發(fā)注意事項(xiàng):
MySQL應(yīng)該自動地檢測FSU Pthreads并且用-lgthreads -lsocket -lgthreads選項(xiàng)鏈接mysqld。
SCO開發(fā)庫在FSU Pthreads是重入(reentrant)的。SCO宣稱它的庫函數(shù)是重入的,因此他們一定在FSU Pthreads中是重入的。在 OpenServer上的 FSU Pthreads 試圖使用SCO方案制作重入的庫。
FSU Pthreads(至少在www.mysql.com的版本)鏈接了GNU malloc,如果你甭到內(nèi)存使用的問題,確定“gmalloc.o”被包含在“l(fā)ibgthreads.a”和“l(fā)ibgthreads.so”中。
在FSU Pthreads中,下列系統(tǒng)調(diào)用是pthreads感知的:read()、write()、getmsg()、connect()、accept()、select()和wait()。
如果你想要在SCO上安裝DBI,你必須編輯在DBI-xxx和每個子目錄下的“Makefiles”:
OLD: NEW:
CC = cc CC = gcc -belf
CCCDLFLAGS = -KPIC -W1,-Bexport CCCDLFLAGS = -fpic
CCDLFLAGS = -wl,-Bexport CCDLFLAGS =
LD = ld LD = gcc -belf -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 -belf -G -fpic
OPTIMISE = -Od OPTIMISE = -O1
OLD:
CCCFLAGS = -belf -dy -w0 -U M_XENIX -DPERL_SCO5 -I/usr/local/include
NEW:
CCFLAGS = -U M_XENIX -DPERL_SCO5 -I/usr/local/include
這時(shí)如果他們用icc或cc編譯,Perl動態(tài)裝載器(dynaloader)將不裝載DBI模塊。
當(dāng)用cc編譯時(shí),Perl工作得最好。
4.11.14 SCO Unixware 7.0 注意事項(xiàng)
你必須使用一個最新的MySQL版本,至少是3.22.13,因?yàn)樵摪姹驹赨nixware下面解決一些移植性問題。
在UnixWare 7.0.1上,我們可用下列configure的命令編譯MySQL:
shell>; CC=cc CXX=CC ./configure --prefix=/usr/local/mysql
4.11.15 IBM-AIX 注意事項(xiàng)
xlC自動檢測從Autoconf丟失,當(dāng)使用 IBM 編譯器時(shí),需要如下這樣一個configure命令:
shell>; CC="xlc_r -ma -O3 -qstrict -DHAVE_INT_8_16_32" \
CXX="xlC_r -ma -O3 -qstrict -DHAVE_INT_8_16_32" \
./configure
如果你正在使用egcs編譯MySQL,你必須使用-fno-exceptions標(biāo)志,因?yàn)閑gcs得異常處理不是對線程安全的。ㄟ@用egcs1.1被測試過)。在 AIX 上使用egcs和gcc,我們推薦下列configure行:
shell>; CXX=gcc \
CXXFLAGS="-felide-constructors -fno-exceptions -fno-rtti" \
./configure --prefix=/home/monty --with-debug --with-low-memory
如果你用信號問題(MySQL出人意料地在高負(fù)載下死掉),你可能發(fā)現(xiàn)了與線程和信號有關(guān)的一個OS錯誤。在這種情況下,你可以用如下配置告訴MySQL不使用信號:
shell>; CFLAGS=-DDONT_USE_THR_ALARM CXX=gcc \
CXXFLAGS="-felide-constructors -fno-exceptions -fno-rtti -DDONT_USE_THR_ALARM" \
./configure --prefix=/home/monty --with-debug --with-low-memory
這不影響MySQL性能,但是有副作用,就是你不能用mysqladmin kill或mysqladmin shutdown殺死在一個連接上“睡眠”的客戶。相反,當(dāng)客戶發(fā)出下一個命令時(shí),它將死掉。
在 AIX 的一些版本上用libbind.a鏈接使得getservbyname核心傾倒(core dump),這是AIX的一個bug并且應(yīng)該被報(bào)告到IBM了。
4.11.16 HP-UX 注意事項(xiàng)
在 HP-UX 上編譯MySQL時(shí),有一些“小”問題。我們推薦您使用gcc而不是HP-UX自己的編譯器,因?yàn)間cc生成更好一些的代碼!
我們推薦在HP-UX上使用gcc 2.95,不使用高度優(yōu)化標(biāo)志(類似-O6),因?yàn)檫@在 HP-UX 上可能不安全。
注意MIT-pthreads不能用 HP-UX 編譯器編譯,因?yàn)樗荒芫幾g.S(匯編器)文件。
下列配置行應(yīng)該工作:
CFLAGS="-DHPUX -I/opt/dce/include" CXXFLAGS="-DHPUX \
-I/opt/dce/include -felide-constructors -fno-exceptions \
-fno-rtti" CXX=gcc ./configure --with-pthread \
--with-named-thread-libs='-ldce' --prefix=/usr/local/mysql --disable-shared
如果你正在編譯gcc2.95本身,如果你想要用MIT-pthreads編譯MySQL,你不應(yīng)該用DCE庫(libdce.a或libcma.a)鏈接它。如果你混合DCE和MIT-pthreads包,你將得到一個使得你不能連接的mysqld。當(dāng)你編譯gcc2.95時(shí),刪除DCE庫!
4.11.17 MacOS X 注意事項(xiàng)
順著MacOS X移植的鏈接可以得到能讓MySQL載MacOS上工作的信息,見1.8 有用的MySQL相關(guān)鏈接。
MySQL3.23.7 應(yīng)該包括所有必要的MacOSX上配置它的補(bǔ)丁。然而在配置MySQL前,你必須首先安裝來自MacOSX 的MySql服務(wù)器的pthread 包。
你可能也想要把一個別名加到你的shell資源文件中以便從命令行訪問mysql和mysqladmin。
alias mysql '/usr/local/mysql/bin/mysql'
alias mysqladmin '/usr/local/mysql/libexec/mysqladmin'
4.12 Win32 注意事項(xiàng)
這節(jié)描述在Win32上安裝和使用MySQL,這也在MySQL Win32分發(fā)所帶的“readme”文件中描述。
4.12.1 在Win32上安裝MySQL
如果你沒有一個注冊的MySQL版本,你應(yīng)該首先下載共享軟件版本,從:
MySQL 3.21.29
如果你準(zhǔn)備從一些其他程序連接MySQL,你也可能需要MyODBC驅(qū)動程序。你可在MySQL下載頁找到。
安裝任何一個分發(fā),在某個空目錄解壓縮它并且運(yùn)行Setup.exe程序。
缺省地,MySQL-Win32被配置安裝在“C:\mysql”。如果你想要在其它地方安裝MySQL,在“C:\mysql”安裝它,然后將安裝移到你想要的地方。如果你真的移走M(jìn)ySQL,你必須通過提供選項(xiàng)給mysqld告訴mysqld那里的所有一切,使用C:\mysql\bin\mysqld --help顯示所有的選項(xiàng)目!例如,如果你移動MySQL分發(fā)到“D:\programs\mysql”,你必須用D:\programs\mysql\bin\mysqld --basedir D:\programs\mysql來啟動mysqld。
用登記的MySQL版本,你也可以創(chuàng)建一個“C:\my.cnf”文件來保存用于MySQL服務(wù)器的任何缺省選項(xiàng)。拷貝文件 |
|