第2章:安裝MySQL

目錄

2.1. 一般安裝問題
2.1.1. MySQL支援的作業系統
2.1.2. 選擇要安裝的MySQL分發版
2.1.3. 怎樣獲得MySQL
2.1.4. 通過MD5校驗和或GnuPG驗證軟件包的完整性
2.1.5. 安裝佈局
2.2. 使用二進制分發版的標準MySQL安裝
2.3. 在Windows上安裝MySQL
2.3.1. Windows系統要求
2.3.2. 選擇安裝軟件包
2.3.3. 用自動安裝器安裝MySQL
2.3.4. 使用MySQL安裝嚮導
2.3.5. 使用配置嚮導
2.3.6. 通過非安裝Zip檔案安裝MySQL
2.3.7. 提取安裝檔案檔案
2.3.8. 建立選項檔案
2.3.9. 選擇MySQL伺服器類型
2.3.10. 首次啟動伺服器
2.3.11. 從Windows命令行啟動MySQL
2.3.12. 以Windows服務方式啟動MySQL
2.3.13. 測試MySQL安裝
2.3.14. 在Windows環境下對MySQL安裝的故障診斷與排除
2.3.15. 在Windows下升級MySQL
2.3.16. Windows版MySQL同Unix版MySQL對比
2.4. 在Linux下安裝MySQL
2.5.在Mac OS X中安裝MySQL
2.6. 在NetWare中安裝MySQL
2.7. 在其它類Unix系統中安裝MySQL
2.8. 使用原始碼分發版安裝MySQL
2.8.1. 原始碼安裝概述
2.8.2. 典型配置選項
2.8.3. 從開發原始碼樹安裝
2.8.4. 處理MySQL編譯問題
2.8.5. MIT-pthreads注意事項
2.8.6. 在Windows下從原始碼安裝MySQL
2.8.7. 在Windows下編譯MySQL客戶端
2.9. 安裝後的設置和測試
2.9.1. Windows下安裝後的過程
2.9.2. Unix下安裝後的過程
2.9.3. 使初始MySQL帳號安全
2.10. 升級MySQL
2.10.1. 從5.0版升級
2.10.2. 升級授權資料表
2.10.3. 將MySQL資料庫拷貝到另一台機器
2.11. 降級MySQL
2.12. 具體作業系統相關的注意事項
2.12.1. Linux注意事項
2.12.2. Mac OS X注意事項
2.12.3. Solaris注意事項
2.12.4. BSD注意事項
2.12.5. 其它Unix注意事項
2.12.6. OS/2注意事項
2.13. Perl安裝注意事項
2.13.1. 在Unix中安裝Perl
2.13.2. 在Windows下安裝ActiveState Perl
2.13.3. 使用Perl DBI/DBD接口的問題

本章描述怎樣獲得並安裝MySQL

1.    要瞭解支援哪些平台。請注意並非所有支援的平台同等適合運行MySQL。在部分平台上會比其它平台更有效、穩定。詳情請參見2.1.1節,「MySQL支援的作業系統」

2.    確定您應該使用的分發的版本。可獲得MySQL的多個版本,大部分有多種分發版。您可以選擇包含二進制(預編譯)代碼或原始碼形式的預打包分發。如果不能確定,則使用二進制分發版。對於想看我們的最新開發並幫助我們測試新代碼的用戶,我們提供了公共訪問接口,可以訪問我們最新的原始碼樹。為了確定您應該使用的分發的版本和類型,請參見2.1.2節,「選擇要安裝的MySQL分發版」

3.    下載想安裝的分發版對於能從其獲得MySQL的站點列資料表,請參見2.1.3節,「怎樣獲得MySQL」。用來驗證分發版完整性的指令參見2.1.4節,「通過MD5校驗和或GnuPG驗證軟件包的完整性

4.    安裝分發版針對二進制代碼和原始碼分發版的安裝說明在2.2節,「使用二進制分發版的標準MySQL安裝」中講述。針對二進制代碼和原始碼分發版的安裝說明在2.8節,「使用原始碼分發版安裝MySQL」中講述。

釋:如果您想要將當前版本的MySQL升級到最新版本,而不是首次安裝MySQL,關於升級過程和升級前應考慮的問題請參見2.10節,「升級MySQL」

如果遇到安裝問題,2.12節,「具體作業系統相關的注意事項」中提供了解決平台相關問題的訊息。

5.    進行安裝後的設置。安裝MySQL後,請閱讀2.9節,「安裝後的設置和測試」。本節介紹了重要的訊息,可以確保MySQL伺服器正確工作。本節還描述了如何使尚未有密碼的初始MySQL用戶帳號的安全。不管您是用二進制代碼還是原始碼分發版來安裝MySQL,這些過程均適用。

如果要運行MySQL基準指令,必須使用支援MySQLPerl。請參見2.13節,「Perl安裝注意事項」

2.1. 一般安裝問題

在安裝MySQL前,您應該:

1.    確定是否MySQL將運行在您的平台上。

2.    選擇安裝的分發版。

3.    下載分發版並驗證其完整性。

本節包含執行上述步驟必需的訊息。之後,您可以按照本章中後面幾節的說明來安裝選擇的分發版。

2.1.1. MySQL支援的作業系統

本節列出了可以運行MySQL的作業系統。

我們使用GNU Autoconf,因此將MySQL移植到所有使用Posix線程和C++編譯器的現代系統是可能的。(要求伺服器支援線程。如果只是編譯客戶端代碼,則只需要C++編譯器)。我們主要在Linux(SuSERed Hat)FreeBSDSun Solaris(版本89)上使用並開發本軟件。

已經報告MySQL可以在下列作業系統/線程包的組合上成功地進行編譯。注意,對於很多作業系統,原生的線程僅支援最新的版本。

·         有原生線程的AIX 4.x5.x。請參見2.12.5.3節,「IBM-AIX注意事項」

·         Amiga

·         包括MIT-pthreads包的BSDI 2.x。請參見2.12.4.4節,「BSD/OS 2.x版注意事項」

·         有原生線程的BSDI3.0,3.14.x。請參見2.12.4.4節,「BSD/OS 2.x版注意事項」

·         有原生線程的Digital Unix 4.x。請參見2.12.5.5節,「Alpha-DEC-UNIX(Tru64)版注意事項」.。

·         包括MIT-pthreads包的FreeBSD 2.x。請參見2.12.4.1節,「FreeBSD注意事項」

·         有原生線程的FreeBSD 3.x4.x。請參見2.12.4.1節,「FreeBSD注意事項」

·         LinuxThreadsFreeBSD 4.x。請參見2.12.4.1節,「FreeBSD注意事項」

·         DCE線程或MIT-pthreads包的HP-UX 10.20。請參見2.12.5.1節,「HP-UX 10.20版注意事項」

·         有原生線程的HP-UX 11.x。請參見2.12.5.2節,「HP-UX 11.x版注意事項」

·         LinuxThreads 0.7.1+glibc 2.0.7+,適合各種CPULinux 2.0+。請參見2.12.1節,「Linux注意事項」

·         Mac OS X。請參見2.12.2節,「Mac OS X注意事項」

·         NetBSD 1.3/1.4 IntelNetBSD 1.3 Alpha(需要GNU make)。請參見2.12.4.2節,「NetBSD注意事項」

·         Novell NetWare 6.0。請參見2.6節,「在NetWare中安裝MySQL」

·         有原生線程的OpenBSD > 2.5。包括MIT-pthreads包的OpenBSD < 2.5。請參見2.12.4.3節,「OpenBSD 2.5版注意事項」

·         OS/2 Warp 3, FixPack 29OS/2 Warp 4, FixPack 4. 參見2.12.6節,「OS/2注意事項」

·         有最新FSU Pthreads移植包的SCO OpenServer 5.0.X。請參見2.12.5.8節,「SCO UNIX和OpenServer 5.0.x版注意事項」

·         SCO UnixWare 7.1.x。請參見2.12.5.9節,「SCO UnixWare 7.1.x和OpenUNIX 8.0.0版注意事項」

·         SCO Openserver 6.0.x。請參見2.12.5.10節,「SCO OpenServer 6.0.x版注意事項」

·         有原生線程的SGI Irix 6.x。請參見2.12.5.7節,「SGI Irix注意事項」

·         SPARCx86上有原生線程的Solaris 2.5和以上版本。請參見2.12.3節,「Solaris注意事項」

·         包括MIT-pthreads包的SunOS 4.x。請參見2.12.3節,「Solaris注意事項」

·         Tru64 Unix。請參見2.12.5.5節,「Alpha-DEC-UNIX(Tru64)版注意事項」

·         Windows 9xMeNT2000XP2003。請參見2.3節,「在Windows上安裝MySQL」

並非所有支援的平台同等適合運行MySQL。根據以下因素確定某個平台適合高負荷關鍵任務MySQL伺服器的程度:

·         線程庫的穩定性。可能某個平台的反應不錯,但MySQL的穩定性取決於它所使用的線程庫,不管其它部分是否完善。

·         內核和線程庫利用均衡多處理器(SMP)系統的能力。換句話說,當程序建立一個線程時,應允許線程運行原程序所運行CPU之外的其它處理器。

·         內核和線程庫運行在短範圍頻繁獲取和釋放互斥體而不需要過多地交換內容的多個線程的能力。如果執行pthread_mutex_lock()時產生的CPU時間太短,則會嚴重影響MySQL。如果不關注該問題,增加過多的CPU實際會降低MySQL的速度。

·         常規檔案系統的穩定性和性能。

·         如果資料庫資料表很大,檔案系統處理大檔案的能力和處理效率。

·         我們在該平台上使用MySQL AB的經驗水平。如果我們熟悉一個平台,我們可以對具體平台進行最佳化並固定編譯時間。我們還可以提供建議如何更好地為MySQL配置系統。

·         我們在類似配置下所完成的內部測試的數量。

·         在同一平台類似配置下成功運行MySQL的用戶數。如果該數字很高,則說明遇到具體平台問題的幾率要小得多。

根據前面的標準,允許MySQL的最好的平台是x86,安裝SuSE Linux,使用2.42.6內核,和ReiserFS(或類似Linux分發版)和安裝了 Solaris(2.7-9)SPARCFreeBSD排第三位,但我們真正希望一旦線程庫得到改進,它也可以提高排名。從某一觀點我們還希望提高其它MySQL目前正在上面編譯、允許的平台的排名,但穩定性和性能上可以要求不同等級。這需要我們與MySQL所依賴的作業系統和庫組件開發人員共同努力。如果您對改進某個組件感興趣,可能影響其開發,需要更多的關於MySQL如何能運行得更好的說明,請向我們的MySQL internals發送郵件。請參見1.7.1.1節,「The MySQL郵件列資料表」

請注意前面的對比並不是說一個作業系統總體上比另一個作業系統要好。我們只是討論選擇一個OS來專門運行MySQL。記住了這一點,如果考慮更多的因素,對比結果可能會不同。在某些情況下,一個OS比另一個OS好的原因只是我們已經為具體平台做出了更多的努力來進行測試和最佳化。我們只是陳述我們的觀點幫助您選擇運行MySQL的平台。

2.1.2. 選擇要安裝的MySQL分發版

準備安裝MySQL時,您應確定使用哪個版本。MySQL的開發有幾個發佈系列,可以選擇最適合您要求的一個版本。確定了安裝的版本後,便可以選擇分發版。有二進制或原始碼發佈格式。

2.1.2.1. 選擇要安裝的MySQL版本

首先要作出決策,您是否想要使用最新的開發版本或最終的穩定版本。在MySQL開發過程中,同時存在多個發佈系列,每個發佈處在成熟度的不同階段:

·         MySQL 5.2是最新開發的發佈系列,是將執行新功能的系列。不久的將來可以使用Alpha發行,以便感興趣的用戶進行廣泛的測試。

·         MySQL 5.1是當前穩定(產品質量)發佈系列。只針對漏洞修復重新發佈;沒有增加會影響穩定性的新功能。

·         MySQL 5.0是前一穩定(產品質量)發佈系列。只針對嚴重漏洞修復和安全修復重新發佈;沒有增加會影響該系列的重要功能。

·         MySQL 4.03.23是舊的穩定(產品質量)發佈系列。該版本不再使用,新的發佈只用來修復特別嚴重的漏洞(以前的安全問題)。

我們不認為有完全的凍結版,因為任何版本均需要對漏洞進行修復和其它修復。對於「某種程度的凍結」,我們是指我們可以在產品發佈中增加一些不會影響當前工作的小東西。自然,前一系列的相關漏洞修復會移植到後面的系列。

通常, 如果您是第一次開始使用MySQL或想要將它移植到一些還沒有二進制分發版的系統上,我們推薦使用最終的穩定版本。目前是MySQL 5.1。我們已經使用MySQL基準對所有MySQL發佈進行了檢查,包括來自開發系列的發佈,在發佈前還使用基準套件來測試它。

如果您正在運行一個老的系統並且想要升級,但是又不想冒險進行非無縫升級,應該升級到最新版本中您正使用的相同的發佈系列(只有版本號的最後部分比您使用的新)。我們已經試著僅修復致命問題,對那個版本進行了很小的相對安全的改動。

如果您想要使用產品發佈系列中所沒有的新功能,您可以使用開發系列的版本。請注意開發發佈不如產品發佈穩定。

如果您想要使用包含所有最新補丁和漏洞修復的最新原始碼,可以使用我們的BitKeeper庫。這些庫還沒有發佈,但可以預覽代碼,將來的發佈基於這些代碼。

MySQL的命名機制使用由3個數字和一個後綴組成的版本號。例如,像mysql-5.0.9-beta的版本號這樣解釋:

·         1個數字(5)是主版本號,描述了檔案格式。所有版本5的發行都有相同的檔案格式。

·         2個數字(0)是發行級別。主版本號和發行級別組合到一起便構成了發行序列號。

·         3個數字(9)是在此發行系列的版本號,隨每個新分發版遞增。通常您需要已經選擇的發行(release)的最新版本(版本)

每次更新後,版本字串的最後一個數字遞增。如果相對於前一個版本增加了新功能或有微小的不相容性,字串的第二個數字遞增。如果檔案格式改變,第一個數字遞增。

後綴顯示發行的穩定性級別。通過一系列後綴顯示如何改進穩定性。可能的後綴有:

·         alpha表明發行包含大量未被徹底測試的新代碼。已知的問題應該在新聞小節被記錄。請參見附錄D:MySQL變更史。在大多數alpha版本中也有新的命令和延伸。alpha版本也可能有主要代碼更改等開發。但我們在發佈前一定對其進行測試。

·         beta意味著該版本功能是完整的,並且所有的新代碼被測試了,沒有增加重要的新特徵,應該沒有已知的問題。當alpha版本至少一個月沒有出現報導的致命漏洞,並且沒有計劃增加導致已經實施的功能不穩定的新功能時,版本則從alpha版變為beta版。

在以後的beta版、發佈版或產品發佈中,所有API、外部可視結構和SQL命令列均不再更改。

·         rc發佈代資料表;是一個發行了一段時間的beta版本,看起來應該運行正常。只增加了很小的修復。(發佈代資料表即以前所稱的gamma )

·         如果沒有後綴,這意味著該版本已經在很多地方運行一段時間了,而且沒有非平台特定的問題報告。只增加了關鍵漏洞修復修復。這就是我們稱為一個產品(穩定)或「通用」版本的東西。

MySQL的命名機制於其它產品稍有不同。一般情況,我們可以很放心地使用已經投放市場兩周而沒有被相同發佈系列的新版本所代替的版本。

MySQL所有版本都經過我們的標準測試和基準測試運行,以保證它們可相當安全地使用。因為標準測試不斷擴充以檢測以前發現的問題,測試套件一直在改進之中。

所有版本都至少已經用下列套件進行了測試:

·         一個內部測試套件

mysql-test目錄包含一整套測試案例。我們針對每個二進制伺服器進行這些測試。關於該測試套件的詳細訊息參見27.1.2節,「MySQL測試套件」

·         MySQL基準套件

它運行一定範圍的普通查詢。它也是一個測試,檢測最新的最佳化處理是否真的使代碼更快。請參見7.1.4節,「MySQL基準套件」

·         crash-me測試

這嘗試決定資料庫支援什麼功能和它的能力與限制是什麼。請參見7.1.4節,「MySQL基準套件」

另一個測試是在內部生產環境中使用最新MySQL版本,至少在一台機器上。我們有超過100GB的數據可供使用。

2.1.2.2. 選擇分發格式

選擇了MySQL的安裝版本後,要做的第二項決策是您是使用原始碼分發版還是二進制分發版。大多數情況,如果您的平台上已經有了一個二進制分發版,您可能使用二進制分發版。大多數平台可以使用原格式二進制分發版,例如Linux使用RPM檔案,Mac OS X使用DMG安裝軟件包。也可以使用Zip檔案或壓縮tar檔案。

選擇二進制分發版的理由:

·         二進制分發版比原始碼分發版更容易安裝。

·         為了滿足不同用戶的需求,我們提供了兩種不同的二進製版本:一個是編譯過的帶非事務儲存引擎(小的快速庫),另一個配置了最重要的延伸選項,例如事務安全資料表。兩個版本均從相同的原始碼分發版編譯而來。所有本地MySQL客戶端均可以連接任一版本的MySQL伺服器。

延伸MySQL庫分發版標有-max後綴,配置了與mysqld-max相同的選項。請參見5.1.2節,「mysqld-max延伸MySQL伺服器」

如果想要使用MySQL-Max RPM,必須首先安裝標準MySQL-server RPM

在某些環境下,最好安裝原始碼分發版MySQL

·         您想要在某個明顯的位置安裝MySQL。標準二進制分發版可以安裝到任何地方,但您想更加靈活地將MySQL組件放到某個地方。

·         您想要將mysqld配置一些標準二進制分發版中未包括的一些特殊特徵。下面是一些您想要使用的最常用的選項:

o        --with-innodb(在所有MySQL 5.1庫版本中預設使用)

o        --with-berkeley-db(只適合部分平台)

o        --with-libwrap

o        --with-d-z-libs(適合部分二進制)

o        --with-debug[=full]

·         您想要將mysqld配置一些標準二進制分發版中已經包括的一些特殊特徵。例如,一般編譯過的分發版支援所有字元編碼。如果您想要一個更小的MySQL伺服器,可以重新編譯只支援您需要的字元編碼。

·         您有一個專用編譯器(例如pgcc)或想要使用更好地最佳化適用您的處理器的編譯器選項。二進制分發版編譯的選項適合同一處理器族的各種處理器。

·         您想要使用BitKeeper庫中的最新原始碼,以訪問所有最新漏洞修復。例如,如果您發現了漏洞並將它報告給MySQL開發小組,漏洞修復傳遞給原始碼庫,您便可以訪問它。發佈實際發行後才會出現漏洞修復。

·         如果您想要閱讀(或修改)構成MySQLCC++代碼,您應該拿到原始碼分發版。原始碼總是最終的手冊。

·         原始碼分發版也比二進制的分發版包含更多的測試和實例。

2.1.2.3. 如何發佈更新以及何時發佈更新

MySQL進展的相當快,我們想要與其它MySQL用戶分享它。當我們有一個看來其它人似乎需要的非常有用的功能時,我們就試著製作一個發行版本。

我們也嘗試幫助那些需要很容易實現的功能的用戶,我們也關注我們授權的用戶想要什麼,我們更特別關注我們支援的客戶想要什麼,並且盡力幫助他們。

沒有人一定要下載一個新版本,新聞小節中將告訴您新版本是否有一些您確實想要的東西。請參見附錄D:MySQL變更史

當更新MySQL時,我們使用下列策略:

·         將發佈每個系列。每次發佈時,版本的最後一個數字為同一系列前一版本的基礎上加1

·         穩定的測試過的產品版本每年準備出現1-2次,但是如果發現小問題,只有問題修復的一個版本將被發行。

·         工作版本/對舊版本的漏洞修復檔案每4-8周出現一次。

·         對一些平台的二進制分發版,主要版本由我們製作。其它人可以為其它系統製作二進制分發版,但是可能不多見。

·         我們一旦識別並修正了非緊急但煩人的問題,則立即將其發佈,可以從公共BitKeeper庫中立即得到修復代碼,並將包含到下一發佈版中。

  • 在任何情況下,如果在一個發行中有一個致命問題,我們將盡快製作一個新版本來修復。(我們希望其它公司也這樣做!)

2.1.2.4. 發佈原則:發行版本中沒有已知的問題

我們投入了大量的時間和工作來使我們的發佈沒有問題。我們從來沒有發佈過含有已知致命重複性問題的單一MySQL版本。(致命」問題指能在正常應用中導致MySQL癱瘓的問題,對於正常查詢產生錯誤答案,或有安全問題)

我們已經將所有公開問題、問題和由設計決策決定的事宜記入檔案。請參見A.8節,「MySQL中的已知事宜」

我們的目標是修復一切可以修復的東西,而不會使穩定的MySQL版本變得不穩定。在某些情況,這意味著我們可以在開發版本中修復問題,而不是在穩定的 (產品) 版本。自然,我們會將這些問題記入文檔,以便用戶能知道。

下面描述了我們如何操作:

·         我們通過我們的客戶支援列資料表、在http://bugs.mysql.com/ 問題資料庫和MySQL外部郵件列資料表來監控問題。

·         當前版本中所有被報導的問題被輸入問題資料庫。

·         當我們修復問題,我們總是為其設計一次測試案例,並將其包括進測試系統中,以確保不會漏檢使問題再現。(所有修復的問題中大約90%的具有測試案例)

·         為新增到MySQL中的所有新功能建立測試案例。

·         我們開始構建新的MySQL發佈前,我們確保修復了MySQL版本(3.23.x4.0.x4.1.x5.0.x等等)中所有被報導的重複性問題。如果某些內容不能修復(由於MySQL內部的一些設計決策),我們在本手冊中記錄下來。請參見A.8節,「MySQL中的已知事宜」

·         我們在所有支援二進制的平台(15+平台)上構建並運行我們的測試套件和基準套件。

·         如果在某個平台上測試或基準套件失敗,我們不會公佈二進制。如果問題是由於原始碼中的普通問題,我們將進行修復並在所有系統上構建並測試。

·         構建和測試過程需要2-3天。如果在該過程中我們收到致命問題相關報告(例如,會造成內核轉儲),我們將修復該問題並重新啟動構建過程。

·         http//dev.mysql.com/上公佈二進制後,我們則向mysql發出公告消並announce郵件列資料表。請參見1.7.1.1節,「The MySQL郵件列資料表」。公告消息包含所有發佈的更改列資料表和已知問題。只有部分發版不需要已知的問題部分。

·         為了讓我們的用戶快速訪問最新MySQL功能,我們每4-8周產生一個新的MySQL發佈。每天構建原始碼快照,可以從http://downloads.mysql.com/snapshots.php獲得。

·         如果,儘管經過我們最大的努力,我們在發佈後仍收到問題報告,即在某個具體平台上出現嚴重問題,我們將立即進行修復,並為該平台構建一個新的 'a'版本。由於我們的大用戶群,可以很快地查出並解決此類問題。

·         我們為保證穩定版本所做的跟蹤記錄不錯。在最近150個發佈中,我們只需要對其中不到10個重新構建。其中有3個案例,問題為我們的構建機器上的glibc 庫,花了很長時間來跟蹤。

2.1.2.5. MySQL AB編譯的MySQL二進製版本

作為MySQL AB的服務,我們提供了一套二進制MySQL分發版,已經在我們的站點上所列的系統或支援MySQL、友好地為我們提供訪問的機器上的系統上編譯過。

除了具體平台安裝軟件包格式提供的二進制分發版,我們還以壓縮tar檔案(.tar.gz檔案)為多種平台提供了二進制分發版。請參見2.2節,「使用二進制分發版的標準MySQL安裝」

對於Windows分發版,參見2.3節,「在Windows上安裝MySQL」

使用指令 Build-tools/Do-compile生成這些分發版,可以編譯原始碼並使用scripts/make_binary_distribution建立二進制tar.gz檔案。

通過下面的編譯器和選項來配置並構建二進制分發版。可以查看各個庫二進制tar檔案分發版的指令bin/mysqlbug內的變數COMP_ENV_INFOCONFIGURE_LINE來查看這些訊息。

  • MySQL AB開發系統上構建下面的二進制:

    ·         Linux 2.4.xx x86中的gcc 2.95.3

    CFLAGS="-O2 -mcpu=pentiumpro" CXX=gcc CXXFLAGS="-O2 -mcpu=pentiumpro -felide-constructors" ./configure --prefix=/usr/local/mysql --with-extra-charsets=complex --enable-thread-safe-client --enable-local-infile --enable-assembler --disable-shared --with-client-ldflags=-all-static --with-mysqld-ldflags=-all-static

    ·         Linux 2.4.x x86中的icc(Intel C++ Compiler 8.1或更高版本)

    CC=icc CXX=icpc CFLAGS="-O3 -unroll2 -ip -mp -no-gcc -restrict" CXXFLAGS="-O3 -unroll2 -ip -mp -no-gcc -restrict" ./configure --prefix=/usr/local/mysql --localstatedir=/usr/local/mysql/data --libexecdir=/usr/local/mysql/bin --with-extra-charsets=complex --enable-thread-safe-client --enable-local-infile --enable-assembler --disable-shared --with-client-ldflags=-all-static --with-mysqld-ldflags=-all-static --with-embedded-server --with-innodb

    請注意Intel 編譯器8.1版和更高版有不同的「純」C(icc)驅動程式和C++(icpc)驅動程式;如果您使用icc 8.0版本或較早的版本來構建MySQL,需要設置CXX=icc

    ·         Linux 2.4.xx Intel Itanium 2中的ecc (Intel C++ Itanium Compiler 7.0)

    CC=ecc CFLAGS="-O2 -tpp2 -ip -nolib_inline" CXX=ecc CXXFLAGS="-O2 -tpp2 -ip -nolib_inline" ./configure --prefix=/usr/local/mysql --with-extra-charsets=complex --enable-thread-safe-client --enable-local-infile

    ·         Linux 2.4.xx Intel Itanium中的ecc(Intel C++ Itanium Compiler 7.0)

    CC=ecc CFLAGS=-tpp1 CXX=ecc CXXFLAGS=-tpp1 ./configure --prefix=/usr/local/mysql --with-extra-charsets=complex --enable-thread-safe-client --enable-local-infile

    ·         Linux 2.4.xx alpha中的ccc(Compaq C V6.2-505 / Compaq C++ V6.3-006)

    CC=ccc CFLAGS="-fast -arch generic" CXX=cxx CXXFLAGS="-fast -arch generic -noexceptions -nortti" ./configure --prefix=/usr/local/mysql --with-extra-charsets=complex --enable-thread-safe-client --enable-local-infile --with-mysqld-ldflags=-non_shared --with-client-ldflags=-non_shared --disable-shared

    ·         Linux 2.x.xx ppc中的gcc 2.95.4

    CC=gcc CFLAGS="-O3 -fno-omit-frame-pointer" CXX=gcc CXXFLAGS="-O3 -fno-omit-frame-pointer -felide-constructors -fno-exceptions -fno-rtti" ./configure --prefix=/usr/local/mysql --localstatedir=/usr/local/mysql/data --libexecdir=/usr/local/mysql/bin --with-extra-charsets=complex --enable-thread-safe-client --enable-local-infile --disable-shared --with-embedded-server --with-innodb

    ·         Linux 2.4.xx s390中的gcc 2.95.3

    CFLAGS="-O2" CXX=gcc CXXFLAGS="-O2 -felide-constructors" ./configure --prefix=/usr/local/mysql --with-extra-charsets=complex --enable-thread-safe-client --enable-local-infile --disable-shared --with-client-ldflags=-all-static --with-mysqld-ldflags=-all-static

    ·         Linux 2.4.xx x86_64(AMD64)中的gcc 3.2.1

    CXX=gcc ./configure --prefix=/usr/local/mysql --with-extra-charsets=complex --enable-thread-safe-client --enable-local-infile --disable-shared

    ·         Sun Solaris 8 x86中的gcc 3.2.3

    CC=gcc CFLAGS="-O3 -fno-omit-frame-pointer" CXX=gcc CXXFLAGS="-O3 -fno-omit-frame-pointer -felide-constructors -fno-exceptions -fno-rtti" ./configure --prefix=/usr/local/mysql --localstatedir=/usr/local/mysql/data --libexecdir=/usr/local/mysql/bin --with-extra-charsets=complex --enable-thread-safe-client --enable-local-infile --disable-shared --with-inno

    ·         Sun Solaris 8 SPARC中的gcc 3.2

    CC=gcc CFLAGS="-O3 -fno-omit-frame-pointer" CXX=gcc CXXFLAGS="-O3 -fno-omit-frame-pointer -felide-constructors -fno-exceptions -fno-rtti" ./configure --prefix=/usr/local/mysql --with-extra-charsets=complex --enable-thread-safe-client --enable-local-infile --enable-assembler --with-named-z-libs=no --with-named-curses-libs=-lcurses --disable-shared

    ·         Sun Solaris 8 SPARC 64-bit中的gcc 3.2

    CC=gcc CFLAGS="-O3 -m64 -fno-omit-frame-pointer" CXX=gcc CXXFLAGS="-O3 -m64 -fno-omit-frame-pointer -felide-constructors -fno-exceptions -fno-rtti" ./configure --prefix=/usr/local/mysql --with-extra-charsets=complex --enable-thread-safe-client --enable-local-infile --with-named-z-libs=no --with-named-curses-libs=-lcurses --disable-shared

    ·         Sun Solaris 9 SPARC中的gcc 2.95.3

    CC=gcc CFLAGS="-O3 -fno-omit-frame-pointer" CXX=gcc CXXFLAGS="-O3 -fno-omit-frame-pointer -felide-constructors -fno-exceptions -fno-rtti" ./configure --prefix=/usr/local/mysql --with-extra-charsets=complex --enable-thread-safe-client --enable-local-infile --enable-assembler --with-named-curses-libs=-lcurses --disable-shared

    ·         Sun Solaris 9 SPARC中的cc-5.0(Sun Forte 5.0)

    CC=cc-5.0 CXX=CC ASFLAGS="-xarch=v9" CFLAGS="-Xa -xstrconst -mt -D_FORTEC_ -xarch=v9" CXXFLAGS="-noex -mt -D_FORTEC_ -xarch=v9" ./configure --prefix=/usr/local/mysql --with-extra-charsets=complex --enable-thread-safe-client --enable-local-infile --enable-assembler --with-named-z-libs=no --enable-thread-safe-client --disable-shared

    ·         IBM AIX 4.3.2 ppc中的gcc 3.2.3

    CFLAGS="-O2 -mcpu=powerpc -Wa,-many " CXX=gcc CXXFLAGS="-O2 -mcpu=powerpc -Wa,-many -felide-constructors -fno-exceptions -fno-rtti" ./configure --prefix=/usr/local/mysql --with-extra-charsets=complex --enable-thread-safe-client --enable-local-infile --with-named-z-libs=no --disable-shared

    ·         IBM AIX 4.3.3 ppc中的xlC_r(IBM Visual Age C/C++ 6.0)

    CC=xlc_r CFLAGS="-ma -O2 -qstrict -qoptimize=2 -qmaxmem=8192" CXX=xlC_r CXXFLAGS ="-ma -O2 -qstrict -qoptimize=2 -qmaxmem=8192" ./configure --prefix=/usr/local/mysql --localstatedir=/usr/local/mysql/data --libexecdir=/usr/local/mysql/bin --with-extra-charsets=complex --enable-thread-safe-client --enable-local-infile --with-named-z-libs=no --disable-shared --with-innodb

    ·         IBM AIX 5.1.0 ppc中的gcc 3.3

    CFLAGS="-O2 -mcpu=powerpc -Wa,-many" CXX=gcc CXXFLAGS="-O2 -mcpu=powerpc -Wa,-many -felide-constructors -fno-exceptions -fno-rtti" ./configure --prefix=/usr/local/mysql --with-extra-charsets=complex --enable-thread-safe-client --enable-local-infile --with-named-z-libs=no --disable-shared

    ·         IBM AIX 5.2.0 ppc中的xlC_r(IBM Visual Age C/C++ 6.0)

    CC=xlc_r CFLAGS="-ma -O2 -qstrict -qoptimize=2 -qmaxmem=8192" CXX=xlC_r CXXFLAGS="-ma -O2 -qstrict -qoptimize=2 -qmaxmem=8192" ./configure --prefix=/usr/local/mysql --localstatedir=/usr/local/mysql/data --libexecdir=/usr/local/mysql/bin --with-extra-charsets=complex --enable-thread-safe-client --enable-local-infile --with-named-z-libs=no --disable-shared --with-embedded-server --with-innodb

    ·         HP-UX 10.20 pa-risc1.1中的gcc 3.1

    CFLAGS="-DHPUX -I/opt/dce/include -O3 -fPIC" CXX=gcc CXXFLAGS="-DHPUX -I/opt/dce /include -felide-constructors -fno-exceptions -fno-rtti -O3 -fPIC" ./configure --prefix=/usr/local/mysql --with-extra-charsets=complex --enable-thread-safe-client --enable-local-infile --with-pthread --with-named-thread-libs=-ldce --with-lib-ccflags=-fPIC --disable-shared

    ·         HP-UX 11.00 pa-risc中的aCC(HP ANSI C++ B3910B A.03.50)

    CC=cc CXX=aCC CFLAGS=+DAportable CXXFLAGS=+DAportable ./configure --prefix=/usr/local/mysql --localstatedir=/usr/local/mysql/data --libexecdir=/usr/local/mysql/bin --with-extra-charsets=complex --enable-thread-safe-client --enable-local-infile --disable-shared --with-embedded-server --with-innodb

    ·         HP-UX 11.11 pa-risc2.0 64bit中的aCC(HP ANSI C++ B3910B A.03.33)

    CC=cc CXX=aCC CFLAGS=+DD64 CXXFLAGS=+DD64 ./configure --prefix=/usr/local/mysql --with-extra-charsets=complex --enable-thread-safe-client --enable-local-infile --disable-shared

    ·         HP-UX 11.11 pa-risc2.0 32bit中的aCC(HP ANSI C++ B3910B A.03.33)

    CC=cc CXX=aCC CFLAGS="+DAportable" CXXFLAGS="+DAportable" ./configure --prefix=/usr/local/mysql --localstatedir=/usr/local/mysql/data --libexecdir=/usr/local/mysql/bin --with-extra-charsets=complex --enable-thread-safe-client --enable-local-infile --disable-shared --with-innodb

    ·         HP-UX 11.22 ia64 64bit中的aCC(HP aC++/ANSI C B3910B A.05.50)

    CC=cc CXX=aCC CFLAGS="+DD64 +DSitanium2" CXXFLAGS="+DD64 +DSitanium2" ./configure --prefix=/usr/local/mysql --localstatedir=/usr/local/mysql/data --libexecdir=/usr/local/mysql/bin --with-extra-charsets=complex --enable-thread-safe-client --enable-local-infile --disable-shared --with-embedded-server --with-innodb

    ·         Apple Mac OS X 10.2 powerpc中的gcc 3.1

    CC=gcc CFLAGS="-O3 -fno-omit-frame-pointer" CXX=gcc CXXFLAGS="-O3 -fno-omit-frame-pointer -felide-constructors -fno-exceptions -fno-rtti" ./configure --prefix=/usr/local/mysql --with-extra-charsets=complex --enable-thread-safe-client --enable-local-infile --disable-shared

    ·         FreeBSD 4.7 i386中的gcc 2.95.4

    CFLAGS=-DHAVE_BROKEN_REALPATH ./configure --prefix=/usr/local/mysql --with-extra-charsets=complex --enable-thread-safe-client --enable-local-infile --enable-assembler --with-named-z-libs=not-used --disable-shared

    ·         使用LinuxThreadsFreeBSD 4.7 i386中的gcc 2.95.4

    CFLAGS="-DHAVE_BROKEN_REALPATH -D__USE_UNIX98 -D_REENTRANT -D_THREAD_SAFE -I/usr/local/include/pthread/linuxthreads" CXXFLAGS="-DHAVE_BROKEN_REALPATH -D__USE_UNIX98 -D_REENTRANT -D_THREAD_SAFE -I/usr/local/include/pthread/linuxthreads" ./configure --prefix=/usr/local/mysql --localstatedir=/usr/local/mysql/data --libexecdir=/usr/local/mysql/bin --enable-thread-safe-client --enable-local-infile --enable-assembler --with-named-thread-libs="-DHAVE_GLIBC2_STYLE_GETHOSTBYNAME_R -D_THREAD_SAFE -I /usr/local/include/pthread/linuxthreads -L/usr/local/lib -llthread -llgcc_r" --disable-shared --with-embedded-server --with-innodb

    ·         QNX Neutrino 6.2.1 i386中的gcc 2.95.3qnx-nto 20010315

    CC=gcc CFLAGS="-O3 -fno-omit-frame-pointer" CXX=gcc CXXFLAGS="-O3 -fno-omit-frame-pointer -felide-constructors -fno-exceptions -fno-rtti" ./configure --prefix=/usr/local/mysql --with-extra-charsets=complex --enable-thread-safe-client --enable-local-infile --disable-shared

    下面的二進制是在由其它用戶提供給MySQL AB的第三方系統上構建而成。這是免費贈送;MySQL AB沒有完全控制這些系統,因此我們只能對在這些系統上構建的二進制提供有限的支援。

    ·           SCO Unix 3.2v5.0.7 i386中的gcc 2.95.3:

    CFLAGS="-O3 -mpentium" LDFLAGS=-static CXX=gcc CXXFLAGS="-O3 -mpentium -felide-constructors" ./configure --prefix=/usr/local/mysql --with-extra-charsets=complex --enable-thread-safe-client --enable-local-infile --with-named-z-libs=no --enable-thread-safe-client --disable-shared

    ·         SCO UnixWare 7.1.4 i386中的CC 3.2:

    CC=cc CFLAGS="-O" CXX=CC ./configure --prefix=/usr/local/mysql --with-extra-charsets=complex --enable-thread-safe-client --enable-local-infile --with-named-z-libs=no --enable-thread-safe-client --disable-shared --with-readline

    ·         CO OpenServer 6.0.0 i386中的CC 3.2:

    CC=cc CFLAGS="-O" CXX=CC ./configure --prefix=/usr/local/mysql --with-extra-charsets=complex --enable-thread-safe-client --enable-local-infile --with-named-z-libs=no --enable-thread-safe-client --disable-shared --with-readline

    ·         Compaq Tru64 OSF/1 V5.1 732 alpha中的cc/cxx(Compaq C V6.3-029i / DIGITAL C++ V6.1-027):

    CC="cc -pthread" CFLAGS="-O4 -ansi_alias -ansi_args -fast -inline speed -speculate all" CXX="cxx -pthread" CXXFLAGS="-O4 -ansi_alias -fast -inline speed -speculate all -noexceptions -nortti" ./configure --prefix=/usr/local/mysql --with-extra-charsets=complex --enable-thread-safe-client --enable-local-infile --with-named-thread-libs="-lpthread -lmach -lexc -lc" --disable-shared --with-mysqld-ldflags=-all-static

    ·            SGI Irix 6.5 IP32中的gcc 3.0.1:

    CC=gcc CFLAGS="-O3 -fno-omit-frame-pointer" CXXFLAGS="-O3 -fno-omit-frame-pointer -felide-constructors -fno-exceptions -fno-rtti" ./configure --prefix=/usr/local/mysql --with-extra-charsets=complex --enable-thread-safe-client --enable-local-infile --disable-shared

    ·         FreeBSD/sparc64 5.0中的gcc 3.2.1:

    CFLAGS=-DHAVE_BROKEN_REALPATH ./configure --prefix=/usr/local/mysql --localstatedir=/usr/local/mysql/data --libexecdir=/usr/local/mysql/bin --with-extra-charsets=complex --enable-thread-safe-client --enable-local-infile --disable-shared --with-innodb

    MySQL AB過去提供的二進制軟件包中應用了下面的編譯選項。這些二進制不再進行更新,但是在這裡列出了這些編譯選項供參考。

    ·          Linux 2.2.xx SPARC中的egcs 1.1.2:

    CC=gcc CFLAGS="-O3 -fno-omit-frame-pointer" CXX=gcc CXXFLAGS="-O3 -fno-omit-frame-pointer -felide-constructors -fno-exceptions -fno-rtti" ./configure --prefix=/usr/local/mysql --with-extra-charsets=complex --enable-thread-safe-client --enable-local-infile --enable-assembler --disable-shared

    ·         Linux 2.2.x x686中的gcc 2.95.2:

    CFLAGS="-O3 -mpentiumpro" CXX=gcc CXXFLAGS="-O3 -mpentiumpro -felide-constructors -fno-exceptions -fno-rtti" ./configure --prefix=/usr/local/mysql --enable-assembler --with-mysqld-ldflags=-all-static --disable-shared --with-extra-charsets=complex

    ·         SunOS 4.1.4 2 sun4c中的gcc 2.7.2.1:

    CC=gcc CXX=gcc CXXFLAGS="-O3 -felide-constructors" ./configure --prefix=/usr/local/mysql --disable-shared --with-extra-charsets=complex --enable-assembler

    ·         SunOS 5.5.1(及以上版本)sun4u中的egcs 1.0.3a2.90.27gcc 2.95.2和更新版:

    ·         CC=gcc CFLAGS="-O3" CXX=gcc CXXFLAGS="-O3 -felide-constructors -fno-exceptions -fno-rtti" ./configure --prefix=/usr/local/mysql --with-low-memory --with-extra-charsets=complex --enable-assembler

    ·         SunOS 5.6 i86pc中的gcc 2.8.1:

    CC=gcc CXX=gcc CXXFLAGS=-O3 ./configure --prefix=/usr/local/mysql --with-low-memory --with-extra-charsets=complex

    ·         BSDI BSD/OS 3.1 i386中的gcc 2.7.2.1:

    CC=gcc CXX=gcc CXXFLAGS=-O ./configure --prefix=/usr/local/mysql --with-extra-charsets=complex

    ·         BSDI BSD/OS 2.1 i386中的gcc 2.7.2:

    CC=gcc CXX=gcc CXXFLAGS=-O3 ./configure --prefix=/usr/local/mysql --with-extra-charsets=complex

    ·         AIX 4.2中的gcc 2.7.2.2

    CC=gcc CXX=gcc CXXFLAGS=-O3 ./configure --prefix=/usr/local/mysql --with-extra-charsets=complex

    如果您有更好的上述配置選項,可以向MySQL internals郵件列資料表發送郵件。請參見1.7.1.1節,「The MySQL郵件列資料表」

    在我們的站點中列出的MySQL 5.1發佈的RPM分發版是由MySQL AB產生的。

    如果您想要編譯MySQL調試版本,應當在前面的configure命令中加上--with-debug--with-debug=full,並去掉-fomit-frame-pointer選項。

2.1.3. 怎樣獲得MySQL

檢查MySQL下載頁(http://dev.mysql.com/downloads/ )獲取當前版本和下載指令訊息。關於MySQL下載鏡像站點的完整的最新列資料表,參見 http://dev.mysql.com/downloads/mirrors.html。您可以在此發現MySQL鏡像站點和如何報告有問題的或過時的鏡像站點的訊息。

我們的主鏡像站點位於http://mirrors.sunsite.dk/mysql/

2.1.4. 通過MD5校驗和或GnuPG驗證軟件包的完整性

下載了適合您的需求的MySQL安裝軟件包並在安裝前,您應當確保它的完整性,沒有被篡改。MySQL AB提供了3種完整性檢查方法:

·         MD5校驗和

·         使用GnuPGGNU Privacy Guard對簽名進行加密

·         對於RPM軟件包,使用內嵌式RPM完整性驗證機制

下面的章節描述了如何使用這些方法。

如果您注意到MD5校驗和與GPG簽名不匹配,首先應嘗試多次下載相關安裝軟件包,可以從其它鏡像站點。如果您反覆嘗試仍不能成功驗證安裝軟件包的完整性,請將此類問題通知給我們,包括完整的安裝軟件包名和您使用的下載站點,在<webmaster@mysql.com><build@mysql.com>。不要使用問題-報告機制來報告下載問題。

2.1.4.1. 驗證MD5校驗和

下載MySQL安裝軟件包後,您應當確保它的MD5校驗和與提供的MySQL下載頁上的相匹配。每個安裝軟件包有唯一的校驗和,可以用下面的命令來驗證,其中package_name是您下載的安裝軟件包的名稱:

shell> md5sum package_name

示範:

  shell> md5sum mysql-stard-5.1.2-alpha-linux-i686.tar.gz
  aaab65abbec64d5e907dcd41b8699945  mysql-stard-5.1.2-alpha-linux-i686.tar.gz

您應當驗證結果校驗和(十六進制數字字串)與下載頁上相關安裝軟件包下面顯示的校驗和相匹配。

註釋:一定要驗證歸檔檔案(例如,.zip.tar.gz檔案)的校驗和,而不是其中包括的檔案。

請注意並非所有作業系統支援md5sum命令。在一些作業系統上,只是稱為md5另一些根本不裝載它。在Linux中,它是GNU Text Utilities安裝軟件包的一部分,適合各種平台。可以從http//www.gnu.org/software/textutils/下載原始碼。如果您已經安裝了OpenSSL,還可以使用命令openssl md5 package_namehttp//www.fourmilab.ch/md5/提供了DOS/Windows使用的md5命令行實用工具。winMd5Sum是一個圖形MD5檢查工具,可以從http//www.nullriver.com/index/products/winmd5sum獲得。

2.1.4.2. 通過GnuPG進行簽名檢查

驗證安裝軟件包完整性和真實性的另一個方法是使用加密簽名。這比使用MD5校驗和更可靠,但是需要更多的工作。

MySQL ABGnuPG(GNU Privacy Guard)對下載MySQ軟件包進行簽名。GnuPG是開放原始碼,不同於Phil Zimmermann的聞名的Pretty Good Privacy (PGP)。關於GnuPG和如何獲得並安裝到您的系統的詳細訊息,請參見http//www.gnupg.org/。大多數Linux分發版裝有預設安裝的GnuPG。關於GnuPG的詳細訊息,參見 http//www.openpgp.org/

要想驗證具體安裝軟件包的簽名,您首先需要獲得MySQL AB公共GPG構建密鑰的拷貝。可以從http//www.keyserver.net/下載密鑰。您想要獲得的密鑰名為build@mysql.com。另外,可以從下面的文本直接剪切並粘貼密鑰:

Key ID:
pub  1024D/5072E1F5 2003-02-03
     MySQL Package signing key (www.mysql.com) <build@mysql.com>
Fingerprint: A4A9 4068 76FC BD3C 4567  70C8 8C71 8D3B 5072 E1F5
 
Public Key (ASCII-armored):
 
-----BEGIN PGP PUBLIC KEY BLOCK-----
Version: GnuPG v1.0.6 (GNU/Linux)
Comment: For info see http://www.gnupg.org
 
mQGiBD4+owwRBAC14GIfUfCyEDSIePvEW3SAFUdJBtoQHH/nJKZyQT7h9bPlUWC3
RODjQReyCITRrdwyrKUGku2FmeVGwn2u2WmDMNABLnpprWPkBdCk96+OmSLN9brZ
fw2vOUgCmYv2hW0hyDHuvYlQA/BThQoADgj8AW6/0Lo7V1W9/8VuHP0gQwCgvzV3
BqOxRznNCRCRxAuAuVztHRcEAJooQK1+iSiunZMYD1WufeXfshc57S/+yeJkegNW
hxwR9pRWVArNYJdDRT+rf2RUe3vpquKNQU/hnEIUHJRQqYHo8gTxvxXNQc7fJYLV
K2HtkrPbP72vwsEKMYhhr0eKCbtLGfls9krjJ6sBgACyP/Vb7hiPwxh6rDZ7ITnE
kYpXBACmWpP8NJTkamEnPCia2ZoOHODANwpUkP43I7jsDmgtobZX9qnrAXw+uNDI
QJEXM6FSbi0LLtZciNlYsafwAPEOMDKpMqAK6IyisNtPvaLd8lH0bPAnWqcyefep
rv0sxxqUEMcM3o7wwgfN83POkDasDbs3pjwPhxvhz6//62zQJ7Q7TXlTUUwgUGFj
a2FnZSBzaWduaW5nIGtleSAod3d3Lm15c3FsLmNvbSkgPGJ1aWxkQG15c3FsLmNv
bT6IXQQTEQIAHQUCPj6jDAUJCWYBgAULBwoDBAMVAwIDFgIBAheAAAoJEIxxjTtQ
cuH1cY4AnilUwTXn8MatQOiG0a/bPxrvK/gCAJ4oinSNZRYTnblChwFaazt7PF3q
zIhMBBMRAgAMBQI+PqPRBYMJZgC7AAoJEElQ4SqycpHyJOEAn1mxHijft00bKXvu
cSo/pECUmppiAJ41M9MRVj5VcdH/KN/KjRtW6tHFPYhMBBMRAgAMBQI+QoIDBYMJ
YiKJAAoJELb1zU3GuiQ/lpEAoIhpp6BozKI8p6eaabzF5MlJH58pAKCu/ROofK8J
Eg2aLos+5zEYrB/LsrkCDQQ+PqMdEAgA7+GJfxbMdY4wslPnjH9rF4N2qfWsEN/l
xaZoJYc3a6M02WCnHl6ahT2/tBK2w1QI4YFteR47gCvtgb6O1JHffOo2HfLmRDRi
Rjd1DTCHqeyX7CHhcghj/dNRlW2Z0l5QFEcmV9U0Vhp3aFfWC4Ujfs3LU+hkAWzE
7zaD5cH9J7yv/6xuZVw411x0h4UqsTcWMu0iM1BzELqX1DY7LwoPEb/O9Rkbf4fm
Le11EzIaCa4PqARXQZc4dhSinMt6K3X4BrRsKTfozBu74F47D8Ilbf5vSYHbuE5p
/1oIDznkg/p8kW+3FxuWrycciqFTcNz215yyX39LXFnlLzKUb/F5GwADBQf+Lwqq
a8CGrRfsOAJxim63CHfty5mUc5rUSnTslGYEIOCR1BeQauyPZbPDsDD9MZ1ZaSaf
anFvwFG6Llx9xkU7tzq+vKLoWkm4u5xf3vn55VjnSd1aQ9eQnUcXiL4cnBGoTbOW
I39EcyzgslzBdC++MPjcQTcA7p6JUVsP6oAB3FQWg54tuUo0Ec8bsM8b3Ev42Lmu
QT5NdKHGwHsXTPtl0klk4bQk4OajHsiy1BMahpT27jWjJlMiJc+IWJ0mghkKHt92
6s/ymfdf5HkdQ1cyvsz5tryVI3Fx78XeSYfQvuuwqp2H139pXGEkg0n6KdUOetdZ
Whe70YGNPw1yjWJT1IhMBBgRAgAMBQI+PqMdBQkJZgGAAAoJEIxxjTtQcuH17p4A
n3r1QpVC9yhnW2cSAjq+kr72GX0eAJ4295kl6NxYEuFApmr1+0uUq/SlsQ==
=YJkx
-----END PGP PUBLIC KEY BLOCK-----

您可以使用gpg --import將構建密鑰導入您的個人公共GPG鑰匙圈keyring。例如,如果您把密鑰保存到mysql_pubkey.asc檔案中,導入命令應為:

shell> gpg --import mysql_pubkey.asc

關於公共密鑰如何工作的詳細訊息,請參閱GPG文檔。

下載並導入公共構建密鑰後,下載期望的MySQL安裝軟件包和相應的簽名,也可以從下載頁上獲得。簽名檔案名與分發版檔案相同,有 an .asc延伸名。例如:

分發檔案

mysql-stard-5.1.2-alpha-linux-i686.tar.gz

簽名檔案

mysql-stard-5.1.2-alpha-linux-i686.tar.gz.asc

確保兩個檔案保存在同一目錄下,運行下面的命令來驗證分發檔案的簽名:

shell> gpg --verify package_name.asc

示範:

  shell> gpg --verify mysql-standard-5.1.2-alpha-linux-i686.tar.gz.asc
  gpg: Signature made Tue 12 Jul 2005 23:35:41 EST using DSA key ID 5072E1F5
  gpg: Good signature from "MySQL Package signing key (www.mysql.com) <build@mysql.com>"

Good signature消息資料表示所有內容都很正確。您可以忽略任何insecure memory警告。

2.1.4.3. 使用RPM進行簽名檢查

RPM軟件包沒有單獨的簽名。RPM軟件包內置GPG簽名和MD5校驗和。可以運行下面的命令來驗證安裝軟件包:

shell> rpm --checksig package_name.rpm

示範:

shell> rpm --checksig MySQL-server-5.1.2-alpha-0.i386.rpm
MySQL-server-5.1.2-alpha-0.i386.rpm md5 gpg OK

註釋:如果您正使用RPM 4.1,並且出現關於(GPG) NOT OK (MISSING KEYS: GPG#5072e1f5)的抱怨,儘管您已經將MySQL公共構建密鑰導入到您自己的GPG鑰匙圈,您必須首先將密鑰導入到RPM鑰匙圈中。RPM 4.1不再使用您的個人GPG鑰匙圈(GPG本身)RPM 4.1維護自己的鑰匙圈,因為它是系統範圍的應用程式,而用戶GPG公共鑰匙圈是具體的用戶檔案。要想將MySQL公共密鑰導入RPM鑰匙圈,要首先獲得前面章節描述的密鑰。然後使用rpm --import導入密鑰。例如,如果您的公共密鑰保存在mysql_pubkey.asc檔案中,應使用下述命令導入公共密鑰:

shell> rpm --import mysql_pubkey.asc

如果您需要獲得MySQL公共密鑰,參見2.1.4.2節,「通過GnuPG進行簽名檢查

2.1.5. 安裝佈局

這節描述安裝MySQL AB提供的二進制代碼和原始碼分發時建立的預設目錄佈局。如果您安裝其它供應商提供的分發,應使用其它佈局。

Windows中,MySQL 5.1的預設安裝目錄是C:\Program Files\MySQL\MySQL Server 5.1(一些Windows用戶寧願安裝到原來的預設安裝目錄 C\mysql。然而,子目錄佈局仍然相同)安裝目錄包括以下子目錄:

目錄

目錄內容

bin

客戶端程式和mysqld伺服器

data

日誌檔案,資料庫

Docs

文檔

examples

示範程式和指令

include

包含()檔案

lib

scripts

實用工具指令

share

錯誤消息檔案

使用MySQL AB's Linux RPM分發進行安裝後,將在以下系統目錄產生檔案:

目錄

目錄內容

/usr/bin

客戶端程式和指令

/usr/sbin

mysqld伺服器

/var/lib/mysql

日誌檔案,資料庫

/usr/share/doc/packages

文檔

/usr/include/mysql

包含()檔案

/usr/lib/mysql

/usr/share/mysql

錯誤消息和字元編碼檔案

/usr/share/sql-bench

基準程式

Unix中,可以在您選擇的安裝位置解壓並安裝tar檔案二進制分發(typically /usr/local/mysql)並在該位置建立以下目錄:

目錄

目錄內容

bin

客戶端程式和mysqld伺服器

data

日誌檔案,資料庫

docs

文檔,ChangeLog

include

包含()檔案

lib

scripts

mysql_install_db

share/mysql

錯誤消息檔案

sql-bench

基準程式

配置並編譯完原始碼分發後,便開始安裝。預設情況下,可以將檔案安裝到/usr/local,即在下面的子目錄中:

目錄

目錄內容

bin

客戶端程式和指令

include/mysql

包含()檔案

info

Info格式的文檔

lib/mysql

libexec

mysqld伺服器

share/mysql

錯誤消息檔案

sql-bench

基準程式和crash-me測試

var

資料庫和日誌檔案

在一個安裝目錄內,原始碼安裝的佈局在下列方面不同於二進制安裝:

·         mysqld伺服器被安裝在libexec目錄而不是bin目錄內。

·         數據目錄是var而非data

·         mysql_install_db被安裝在bin目錄而非scripts內。

·         頭檔案和庫目錄是include/mysqllib/mysql而非includelib

執行原始碼分髮根目錄下的scripts/make_binary_distribution指令,您可以用編譯過的原始碼分發版建立您自己的二進制安裝。

2.2. 使用二進制分發版的標準MySQL安裝

後面幾章包括如何在安裝軟件包格式適合的平台上平台安裝MySQL(即執行「二進制安裝」)也可以在多種平台上安裝MySQL二進制分發版。關於適合所有平台的軟件包的通用安裝指令參見2.7節,「在其它類Unix系統中安裝MySQL」

關於二進制分發版的使用和如何獲得的詳細訊息請參見2.1節,「一般安裝問題」

2.3. 在Windows上安裝MySQL

MySQL AB已經提供了Windows中安裝的MySQL 3.21以上版本,並提供了每天下載MySQL的比率。本節描述在Windows中安裝MySQL的過程。

使用Windows版本MySQL安裝器,結合GUI配置嚮導,可以自動安裝MySQL,建立選項檔案,啟動伺服器並使預設用戶帳號安全。

如果您要升級已有的4.1.5版以前的MySQL,您必須執行以下步驟:

1.    獲得並安裝分發版。

2.    根據需要設置選項檔案。

3.    選擇想要使用的伺服器。

4.    啟動伺服器。

5.    為初始MySQL帳號指定密碼。

該過程還適合安裝軟件包內不包括安裝器的MySQL安裝。

WindowsMySQL 5.13種分發格式:

·          二進制分發版包含一個設置程式,可以安裝您需要的任何內容,因此可以立即啟動伺服器。

·          原始碼分發版包含所有使用Visual Studio 2003編譯器來構建可執行程式的代碼和支援檔案。

一般來講,您應當使用二進制分發版。它比其它的分發版使用起來要簡單,不再需要其它工具來啟動並運行MySQL

本節描述了如何使用二進制分發版在Windows中安裝MySQL。要想使用原始碼分發版安裝,參見2.8.6節,「在Windows下從原始碼安裝MySQL」

2.3.1. Windows系統要求

要想在Windows中運行MySQL,您需要:

·         32Windows作業系統,例如9xMeNT2000XPWindows Server 2003

基於Windows NT的作業系統(NT2000,XP2003),將MySQL伺服器做為服務來運行。強烈建議使用基於Windows NT的作業系統。請參見2.3.12節,「以Windows服務方式啟動MySQL」

·         TCP/IP協議支援。

·         Windows版本MySQL二進制分發版,可以從http//dev.mysql.com/下載/下載。請參見2.1.3節,「怎樣獲得MySQL」

註釋:如果您從FTP下載分發版,我們建議使用充分的FTP客戶端以保證續傳,避免下載過程中檔案被破壞。

·         可以讀取 .zip檔案的工具,以解壓分發檔案。

·         硬盤上有足夠的空間保證根據您的需求來解包、安裝和建立資料庫(一般建議至少有200兆字節)

您還可以有以下可選需求:

·         如果您計劃通過ODBC連接MySQL伺服器,您還需要一個連接器/ODBC驅動程式。請參見26.1節,「MySQL Connector/ODBC」

·         如果資料表需要佔用的空間大於4GB,則在NTFS或更新的檔案系統上安裝MySQL。當建立資料表時不要忘記使用MAX_ROWSAVG_ROW_LENGTH。請參見13.1.5節,「CREATE TABLE語法」

2.3.2. 選擇安裝軟件包

Windows中安裝MySQL時,有3MySQL 5.1安裝軟件包可供選擇:

·         基本安裝:該安裝軟件包的檔案名類似於mysql-essential-5.1.2-alpha-win32.msi,包含在Windows中安裝MySQL所需要的最少的檔案,包括配置嚮導。該安裝軟件包不包括可選組件,例如嵌入式伺服器和基準套件。

·         完全安裝:該安裝軟件包的檔案名類似於mysql-5.1.2-alpha-win32.zip,包含在Windows中安裝MySQL所需要的全部檔案,包括配置嚮導。該安裝軟件包包括可選組件,例如嵌入式伺服器和基準套件。

·         非自動安裝檔案:該安裝軟件包的檔案名類似於mysql-noinstall-5.1.2-alpha-win32.zip,包含完整安裝包中的全部檔案,只是不包括配置嚮導。該安裝軟件包不包括自動安裝器,必須手動安裝和配置。

對於大多數用戶,建議選擇基本安裝。

您的選擇會影響您後面必須遵從的安裝過程。如果您選擇基本安裝或完全安裝,參見2.3.3節,「用自動安裝器安裝MySQL」。如果您選擇非自動安裝MySQL,參見2.3.6節,「通過非安裝Zip檔案安裝MySQL」

2.3.3. 用自動安裝器安裝MySQL

Windows中安裝MySQL時,新用戶可以使用MySQL安裝幫助和MySQL Configuration Wizard(配置嚮導)。MySQL安裝和配置的方式是使新用戶可以立即開始使用MySQL

基本安裝和完全安裝中均包括MySQL安裝幫助和配置嚮導,建議在大多數標準MySQL安裝中選擇。例外情況包括想在單個伺服器上安裝多個實例的用戶和想完全控制伺服器配置的高級用戶。

2.3.4. 使用MySQL安裝嚮導

2.3.4.1. 前言

MySQL安裝幫助是MySQL伺服器的安裝器,使用最新的Microsoft Window安裝器技術。結合使用MySQL安裝幫助和配置嚮導,用戶安裝並 配置完MySQL伺服器後便可以直接使用。

MySQL安裝幫助是MySQL 5.1伺服器分發的標準安裝器。使用MySQL安裝幫助安裝MySQL之前,用戶需要手動關閉並卸載已經安裝的以前版本的MySQL。關於對以前版本進行升級的詳細訊息請參見 2.3.4.7節,「升級MySQL」

最近版本的Windows包含了改進版本的Microsoft Windows安裝器(MSI)MSI已經成為Windows 2000Windows XPWindows Server 2003應用程式安裝的事實標準。MySQL安裝幫助中使用了該技術,使安裝過程更加靈活、順利。

Microsoft Windows安裝器引擎隨著Windows XP的更新而更新;使用以前Windows版本的用戶可以參考Microsoft 知識庫文章查閱關於升級到最新版Windows安裝器引擎的資料。

此外,Microsoft最近已經引入了WiX(Windows 安裝器 XML)工具包。這是Microsoft公認的開放原始碼項目。我們轉換到WiX是因為它是一個開放原始碼項目,可以使用指令更加靈活地處理整個Windows安裝過程。

MySQL裝幫助的改進依賴於各用戶的支援和反饋。如果您發現MySQL安裝幫助缺少對您很重要的某些功能,或如果您發現某個問題,請使用我們的MySQL問題系統來索取功能或報告問題。

2.3.4.2. 下載並啟動MySQL安裝嚮導

可以從http://dev.mysql.com/downloads/下載MySQL伺服器安裝軟件包。如果您下載的安裝軟件包在Zip檔案中,您需要先提取檔案。

啟動幫助的過程取決於下載的安裝軟件包的內容。如果有setup.exe檔案,雙擊啟動安裝過程。如果有.msi檔案,雙擊啟動安裝過程。

2.3.4.3. 選擇安裝類型

3種安裝類型:Typical(典型安裝)Complete(完全安裝)Custom(定制安裝)

Typical(典型安裝)安裝只安裝MySQL伺服器、mysql命令行客戶端和命令行實用程式。命令行客戶端和實用程式包括mysqldumpmyisamchk和其它幾個工具來幫助您管理MySQL伺服器。

Complete(完全安裝)安裝將安裝軟件包內包含的所有組件。完全安裝軟件包包括的組件包括嵌入式伺服器庫、基準套件、支援指令和文檔。

Custom(定制安裝)安裝允許您完全控制您想要安裝的軟件包和安裝路徑。關於定制安裝的詳細訊息請參見2.3.4.4節,「定制安裝對話框」

如果您選擇Typical(典型安裝)Complete(完全安裝)安裝並點擊Next按鈕,您將進入確認窗口確認選擇並開始安裝。如果您選擇定制安裝並點擊Next按鈕,您將進入定制安裝對話框,參見2.3.4.4節,「定制安裝對話框」

2.3.4.4. 定制安裝對話框

如果您想要更改MySQL安裝幫助安裝的安裝路徑或具體組件,應當選擇Custom(定制安裝)安裝。

所有可用組件列入定制安裝對話框左側的樹狀視圖內。未安裝的組件用紅色 X 圖標資料表示;已經安裝的組件有灰色圖標。要想更改組件,點擊該組件的圖標並從下拉列資料表中選擇新的選項。

可以點擊安裝路徑右側的Change...按鈕來更改預設安裝路徑。

選擇了安裝組件和安裝路徑後,點擊Next按鈕進入確認對話框。

2.3.4.5. 配置對話框

選擇了安裝類型和可選安裝組件後,則進入確認對話框。該對話框中將顯示安裝類型和安裝路徑供檢查。

如果您滿意設定值要想安裝MySQL,點擊Install(安裝)按鈕。要想更改設定值,點擊Back按鈕。要想退出MySQL安裝幫助不再安裝 MySQL,點擊Cancel按鈕。

完成安裝後,將出現註冊選項和MySQL網址。註冊後便可以訪問forums.mysql.com處的MySQL論壇,可以在bugs.mysql.com報告問題,並可以註冊為時事新聞訂戶。在安裝器的最後一個窗口內,提供了安裝摘要,並提供選項以啟動MySQL Configuration Wizard(配置嚮導),可以用來建立配置檔案,安裝MySQL服務並進行安全配置。

2.3.4.6. MySQL安裝嚮導所作的更改

點擊Install(安裝)按鈕後,MySQL安裝幫助開始安裝過程,並對系統進行下面章節描述的更改。

更改註冊資料表

在典型安裝中,MySQL安裝幫助在HKEY_LOCAL_MACHINE\SOFTWARE\MySQL AB建立Windows註冊鍵值。

MySQL安裝幫助根據正安裝的伺服器的主要版本建立一個鍵值,例如 MySQL伺服器5.1它包含兩個字串值,LocationVersionLocation字串包含安裝目錄。在預設安裝中,它包含C:\Program Files\MySQL\MySQL Server 5.1\Version字串包含發佈號。例如,安裝MySQL Server 5.1.2-alpha,鍵值包含一個5.1.2-alpha值。

這些註冊鍵值用來幫助外部工具識別MySQL伺服器的安裝位置,不需要掃瞄整個硬盤來確定MySQL伺服器的安裝路徑。運行伺服器時不需要註冊鍵值,使用noinstall Zip檔案時不建立註冊鍵值。

更改啟動菜單

MySQL安裝幫助在Windows 啟動菜單中建立一條新的條目,使用MySQL菜單,根據安裝的MySQL的主版本來命名。例如,如果安裝了MySQL 5.1, MySQL安裝幫助在啟動菜單中建立MySQL Server 5.1部分。

將在新啟動菜單部分建立下面的條目:

·         MySQL命令行客戶端:這是mysql命令行客戶端的快捷方式,對其進行配置以連接為root用戶。當連接時快捷方式提示輸入root用戶密碼。

·         MySQL伺服器實例配置嚮導:這是MySQL Configuration Wizard(配置嚮導)的快捷方式。使用該快捷方式來配置新安裝的伺服器,或重新配置已有的伺服器。

·         MySQL文檔:可以連接到保存在MySQL伺服器安裝目錄下的文檔。採用基本安裝方式安裝MySQL伺服器時,該選項不可用。

更改檔案系統

預設情況下,MySQL安裝幫助將MySQL 5.1伺服器安裝到C:\Program Files\MySQL\MySQL Server 5.1,其中Program Files是系統應用程式的預設位置,5.1MySQL伺服器的主要版本。這是建議的MySQL伺服器的新安裝位置,替換了前面的預設位置c\mysql

預設情況下,所有MySQL應用程式保存到目錄C:\Program Files\MySQL下,其中Program Files是應用程式在Windows中的預設安裝位置。開發機器上的典型MySQL安裝應為:

C:\Program Files\MySQL\MySQL Server 5.1
C:\Program Files\MySQL\MySQL Administrator 1.0
C:\Program Files\MySQL\MySQL Query Browser 1.0

該方法使管理和維護具體系統上安裝的MySQL應用程式更加容易。

2.3.4.7. 升級MySQL

使用MSI的升級功能,MySQL安裝幫助可以自動執行伺服器升級。這意味著安裝新版本前,不需要手動卸載前面安裝的程式。安裝新版本前,安裝器自動關閉並卸載前面安裝的MySQL服務。

只有在主版本號和次要版本號相同的安裝之間進行升級時,才能自動進行升級。例如,可以自動從MySQL 4.1.5升級到MySQL 4.1.6,但是不能從MySQL 5.0升級到MySQL 5.1

參見2.3.15節,「在Windows下升級MySQL」

2.3.5. 使用配置嚮導

2.3.5.1. 前言

MySQL Configuration Wizard(配置嚮導)可以幫助自動配置Windows中的伺服器。MySQL Configuration Wizard(配置嚮導)問您一系列問題,然後將回答放到模板中生成一個my.ini檔案,該檔案與您的安裝一致。

MySQL Configuration Wizard(配置嚮導)包含在MySQL 5.1伺服器中,目前只適用於Windows用戶。

MySQL Configuration Wizard(配置嚮導)在很大程度上是MySQL AB經過多年從許多用戶收到的反饋的結果。然而,如果您發現它缺少某些對您很重要的功能,或如果您發現一個問題,請使用我們的MySQL 問題系統來索取功能或報告問題。

2.3.5.2. 啟動MySQL配置嚮導

一般情況當MySQL安裝幫助退出時,從MySQL安裝幫助啟動MySQL Configuration Wizard(配置嚮導)。還可以點擊Windows啟動菜單中MySQL伺服器實例配置嚮導條目中的MySQL部分來啟動MySQL Configuration Wizard(配置嚮導)。

並且,還可以進入MySQL安裝bin目錄直接啟動MySQLInstanceConfig.exe檔案。

2.3.5.3. 選擇維護選項

如果MySQL Configuration Wizard(配置嚮導)檢查到my.ini檔案,您可以選擇重新配置已有的伺服器,或通過刪除my.ini檔案並停止、卸載MySQL服務來卸載伺服器實例。

要想重新配置已有的伺服器,選擇Re-configure Instance選項並點擊Next按鈕。已有的my.ini檔案重新命名為mytimestamp.ini.bak,其中timestampmy.ini檔案建立是的日期和時間。要想卸載已有的伺服器實例,選擇Remove Instance選項並點擊Next按鈕。

如果選擇了Remove Instance選項,則進入確認窗口。點擊Execute按鈕:MySQL Configuration Wizard(配置嚮導)停止並卸載MySQL服務,然後刪除my.ini檔案。伺服器安裝和自己的data檔案夾不刪除。

如果選擇了Re-configure Instance選項,則進入配置類型對話框,可以選擇您想要配置的安裝類型。

2.3.5.4. 選擇配置類型

當啟動MySQL Configuration Wizard(配置嚮導)重新安裝MySQL,或為已有安裝選擇Re-configure Instance選項,則進入配置類型對話框。

可以選擇兩種配置類型:Detailed Configuration(詳細配置)Standard Configuration(標準配置)Standard Configuration(標準配置)選項適合想要快速啟動MySQL而不必考慮伺服器配置的新用戶。詳細配置選項適合想要更加細粒度控制伺服器配置的高級用戶。

如果您是MySQL的新手,需要配置為單用戶開發機的伺服器,Standard Configuration(標準配置)應當適合您的需求。選擇Standard Configuration(標準配置)選項,則 MySQL Configuration Wizard(配置嚮導)自動設置所有配置選項,但不包括服務選項和安全選項

Standard Configuration(標準配置)設置選項可能與安裝MySQL的系統不兼容。如果系統上已經安裝了MySQL和您想要配置的安裝,建議選擇詳細配置

要想Standard Configuration(標準配置),請分別參閱2.3.5.11節,「服務選項對話框」2.3.5.12節,「安全選項對話框」的服務選項和安全選項

2.3.5.5. 伺服器類型對話框

可以選擇3種伺服器類型,選擇哪種伺服器將影響到MySQL Configuration Wizard(配置嚮導)對內存、硬盤和過程或使用的決策。

·         Developer Machine(開發機器):該選項代資料表典型個人用桌面工作站。假定機器上運行著多個桌面應用程式。將MySQL伺服器配置成使用最少的系統資源。

·         Server Machine(伺服器):該選項代資料表伺服器,MySQL伺服器可以同其它應用程式一起運行,例如FTPemailweb伺服器。MySQL伺服器配置成使用適當比例的系統資源。

·         Dedicated MySQL Server Machine(專用MySQL伺服器):該選項代資料表只運行MySQL服務的伺服器。假定運行沒有運行其它應用程式。MySQL伺服器配置成使用所有可用系統資源。

2.3.5.6. 資料庫使用情況對話框

通過Database Usage(資料庫使用)對話框,您可以指出建立MySQL資料表時使用的資料表處理器。通過該選項,您可以選擇是否使用InnoDB儲存引擎,以及InnoDB佔用多大比例的伺服器資源。

·         Multifunctional Database(多功能資料庫):選擇該選項,則同時使用InnoDBMyISAM儲存引擎,並在兩個引擎之間平均分配資源。建議經常使用兩個儲存引擎的用戶選擇該選項。

·         Transactional Database Only(只是事務處理資料庫):該選項同時使用InnoDBMyISAM 儲存引擎,但是將大多數伺服器資源指派給InnoDB儲存引擎。建議主要使用InnoDB只偶爾使用MyISAM的用戶選擇該選項。

·         Non-Transactional Database Only(只是非事務處理資料庫):該選項完全禁用InnoDB儲存引擎,將所有伺服器資源指派給MyISAM儲存引擎。建議不使用InnoDB的用戶選擇該選項。

2.3.5.7. InnoDB資料表空間對話框

有些用戶可能想要將InnoDB資料表空間檔案放到不同的位置,而不放到MySQL伺服器數據目錄。如果您的系統有較大的空間或較高性能的儲存設備(例如RAID儲存系統),則最好將資料表空間檔案單獨放到一個位置。

要想更改InnoDB資料表空間檔案的預設位置,從驅動器下拉列資料表選擇一個新的驅動器,並從路徑下拉列資料表選擇新的路徑。要想建立路徑,點擊 ...按鈕。

如果您要更改已有伺服器的配置,更改路徑前您必須點擊Modify按鈕。此時啟動伺服器之前,您必須將已有資料表空間檔案移到新位置。

2.3.5.8. 並發連接對話框

限制所建立的與MySQL伺服器之間的並行連接數量很重要,以便防止伺服器耗盡資源。在Concurrent Connections(並行連接)對話框中,可以選擇伺服器的使用方法,並根據情況限制並行連接的數量。還可以手動設置並行連接的限制。

·         Decision Support(決策支援)(DSS)/OLAP:如果伺服器不需要大量的並行連接可以選擇該選項。假定最大連接數目設置為100,平均並行連接數為20

·         Online Transaction Processing(聯機事務處理)(OLTP):如果您的伺服器需要大量的並行連接則選擇該選項。最大連接數設置為500

·         Manual Setting(人工設置):選擇該選項可以手動設置伺服器並行連接的最大數目。從前面的下拉框中選擇並行連接的數目,如果您期望的數目不在列資料表中,則在下拉框中輸入最大連接數。

2.3.5.9. 聯網選項對話框

Networking Options網絡選項)對話框中可以啟用或禁用TCP/IP網絡,並配置用來連接MySQL伺服器的端口號。

預設情況啟用TCP/IP網絡。要想禁用TCP/IP網絡,取消選擇Enable TCP/IP Networking選項旁邊的檢查框。

預設使用3306端口。要想更訪問MySQL使用的端口,從下拉框選擇一個新端口號或直接向下拉框輸入新的端口號。如果您選擇的端口號已經被佔用,將提示確認選擇的端口號。

2.3.5.10. 字元編碼對話框

MySQL伺服器支援多種字元編碼,可以設置適用於所有資料表、列和資料庫的預設伺服器字元編碼。使用Character Set字元編碼對話框)來更改 MySQL伺服器的預設字元編碼。

·         Standard Character Set(標準字元編碼):如果想要使用Latin1做為預設伺服器字元編碼,則選擇該選項。Latin1用於英語和許多西歐語言。

·         Best Support For Multilingualism(支援多種語言):如果想要使用UTF8做為預設伺服器字元編碼,則選擇該選項。UTF8可以 將不同語言的字元儲存為單一的字元編碼。

·         Manual Selected Default Character Set/Collation人工選擇的預設字元編碼/校對規則):如果想要手動選擇伺服器的預設字元編碼,請選擇該項。從下拉列資料表中選擇期望的字元編碼。

2.3.5.11. 服務選項對話框

在基於Windows NT的平台上,可以將MySQL伺服器安裝成服務。安裝成服務,系統啟動時可以自動啟動MySQL伺服器,甚至出現服務故障時可以隨Windows自動啟動。

預設情況,MySQL Configuration Wizard(配置嚮導)將MySQL伺服器安裝為服務,服務名為MySQL。如果您不想安裝服務,取消Install As Windows Service選項旁邊的選擇框。可以從下拉框選擇新的服務名或在下拉框輸入新的服務名來更改服務名。

要想將MySQL伺服器安裝為服務,但是不自動啟動,不選中Launch the MySQL Server Automatically選項旁邊的檢查框。

2.3.5.12. 安全選項對話框

強烈建議為您的MySQL伺服器設置一個root密碼,預設情況MySQL Configuration Wizard(配置嚮導)要求您設置一個root密碼。如果您不想設置root密碼,不選中Modify Security Settings(修改安全設定值)選項旁邊的選擇框。

要想設置root密碼,在New root password(輸入新密碼)Confirm(確認)兩個框內輸入期望的密碼。如果重新配置已有的伺服器,您還需要Current root password(當前root密碼)框內輸入已有的root密碼。

要想防止通過網絡以root登錄,選中Root may only connect from localhost(只允許從本機登陸連接root選項旁邊的框。這樣可以提高root帳號的安全。

要想建立一個匿名用戶帳號,選中Create An Anonymous Account(建立匿名帳號)選項旁邊的框。建立匿名帳號會降低伺服器的安全,並造成登錄和授權困難。因此不建議。

2.3.5.13. 配置對話框

MySQL Configuration Wizard(配置嚮導)的最後一個對話框是Confirmation(確認)對話框。要想啟動配置過程,點擊Execute。要想返回要想到前面的對話框,點擊Back按鈕。要想不配置伺服器即退出MySQL Configuration Wizard(配置嚮導),點擊Cancel按鈕。

點擊Execute按鈕後,MySQL Configuration Wizard(配置嚮導)執行一系列的任務,執行過程將顯示在屏幕上。

MySQL Configuration Wizard(配置嚮導)首先使用MySQL AB開發人員和工程師準備的模板根據您的選擇確定配置檔案選項。該模板的名稱為my-template.ini,位於伺服器安裝目錄中。

MySQL Configuration Wizard(配置嚮導)將這些選項寫入到一個my.ini檔案中。my.ini檔案的最終位置顯示在寫配置檔案任務的旁邊。

如果選擇為MySQL伺服器建立一個服務,MySQL Configuration Wizard(配置嚮導)則建立並啟動服務。如果您重新配置已有的服務,MySQL Configuration Wizard(配置嚮導)則根據您的配置更改重新啟動服務。

如果選擇設置root密碼,MySQL Configuration Wizard(配置嚮導)則連接伺服器,設置新root密碼並應用您選擇的其它安全設定值。

MySQL Configuration Wizard(配置嚮導)完成任務後,則顯示一個概要。點擊Finish按鈕退出MySQL Configuration Wizard(配置嚮導)。

2.3.5.14. my.ini檔案的位置

MySQL Configuration Wizard(配置嚮導)將my.ini檔案放到MySQL伺服器的安裝目錄中。這樣可以幫助將配置檔案與具體伺服器實例關聯起來。

要想確保MySQL伺服器知道從哪裡搜尋my.ini檔案,即做為服務安裝的一部分傳遞給MySQL伺服器的部分:--defaults-file="C:\Program Files\MySQL\MySQL Server 5.1\my.ini",其中C:\Program Files\MySQL\MySQL Server 5.1 MySQL伺服器的安裝路徑替代。

--defaults-file指導MySQL伺服器讀取具體的配置檔案。

2.3.5.15. 編輯my.ini檔案

要想修改my.ini檔案,用文本編輯器打開並進行必要的修改。您還可以用MySQL Administrator實用工具修改伺服器配置。

MySQL客戶端和實用程式,例如mysql命令行客戶端和mysqldump不能將my.ini檔案放到伺服器安裝目錄中。要想配置客戶端和實用工具,根據Windows 版本,在C\WindowsC\WINNT目錄下建立一個新的my.ini檔案。

2.3.6. 通過非安裝Zip檔案安裝MySQL

想使用非自動安裝包的用戶可以使用本節的指令手動安裝MySQL。從Zip文檔安裝MySQL的過程為:

1.    將文檔提取到期望的安裝目錄中。

2.    建立一個選項檔案。

3.    選擇MySQL伺服器類型。

4.    啟動MySQL伺服器。

5.    使預設用戶帳號安全。

下面一節描述了該過程。

2.3.7. 提取安裝檔案檔案

要想手動安裝MySQL,其步驟為:

1.    如果您從以前的版本升級,開始升級過程前請參閱2.3.15節,「在Windows下升級MySQL」

2.    如果您使用基於Windows NT的作業系統,例如Windows NTWindows 2000Windows XPWindows Server 2003,確保登錄的帳號具有管理員權限。

3.    選擇安裝位置。傳統安裝中MySQL伺服器安裝到C\mysqlMySQL Installation Wizard(安裝幫助)將MySQL安裝到C:\Program Files\MySQL。如果您不想將MySQL安裝到C\mysql,您必須在啟動過程或在選項檔案中指定安裝目錄的路徑。請參見2.3.8節,「建立選項檔案」

4.    使用zip檔案工具,將安裝檔案提取到選定的安裝位置。使用某些工具,可以將文檔提取到選擇的安裝位置的檔案夾中。在這種情況下,您可以將子檔案夾中的內容移動到選擇的安裝位置。

2.3.8. 建立選項檔案

如果想要指定運行伺服器的啟動選項,可以在命令行中指出或放到一個選項檔案中。對於伺服器每次啟動都用到的選項,您會發現使用選項檔案來指定MySQL配置非常方便。特別是在以下環境中:

·         安裝或數據目錄位置不是預設位置(C:\Program Files\MySQL\MySQL Server 5.1C:\Program Files\MySQL\MySQL Server 5.1\data)

·         需要調節伺服器設定值。

MySQL伺服器在Windows中啟動時,它從兩個檔案中尋找選項:Windows目錄中的my.ini檔案和C\my.cnf 檔案。Windows目錄典型名稱為C\WINDOWSC\WINNT。可以使用下面的命令從WINDIR環境變數值確定自己的確切位置:

C\> echo %WINDIR%

MySQL首先從my.ini檔案中尋找選項,然後從my.cnf檔案中尋找。為了避免混淆,最好只使用一個檔案。如果您的PC使用了一個引導加載器,其中C不是引導盤,唯一的選則是使用my.ini檔案。不管您使用哪個選項檔案,必須為純文本檔案。

還可以使用MySQL分發中的示範選項檔案。在安裝目錄中搜尋以下檔案:my-small.cnfmy-medium.cnfmy-large.cnfmy-huge.cnf,您可以重新命名並複製到相應位置用作基本配置檔案。

可以用任何文本編輯器來建立並修改選項檔案,例如記事本。例如,如果MySQL安裝在E\mysql數據目錄安裝在E:\mydata\data,您可以 建立含有[mysqld]部分的選項檔案,指定basedirdatadir參數的值:

[mysqld]
# set basedir to your installation path
basedir=E:/mysql
# set datadir to the location of your data directory
datadir=E:/mydata/data

請注意在選項檔案中使用正斜線兒不是反斜線指定Windows路徑名。如果使用反斜線,必須用雙反斜線:

[mysqld]
# set basedir to your installation path
basedir=E:\\mysql
# set datadir to the location of your data directory
datadir=E:\\mydata\\data

Windows下,MySQL安裝器將數據目錄直接放到安裝MySQL的目錄下。如果您想要使用其它位置的數據目錄,應當將data目錄中的全部內容複製到新的目錄下。例如,如果MySQL安裝到C:\Program Files\MySQL\MySQL Server 5.1中,數據目錄預設在C:\Program Files\MySQL\MySQL Server 5.1\data。如果想要使用E:\mydata做為數據目錄,您必須做兩件事情:

1.    將整個data目錄和全部內容從C:\Program Files\MySQL\MySQL Server 5.1\data移動到E:\mydata

2.    每次啟動伺服器時,使用--datadir選項來指定新的數據目錄。

2.3.9. 選擇MySQL伺服器類型

下面的資料表顯示了Windows下可用的MySQL 5.1伺服器:

二進制

描述

mysqld- debug

已經編譯過,可以進行完全調試和自動內存分配檢查,用於資料表InnoDBBDB

mysqld

最佳化的二進制,支援InnoDB

mysqld-nt

最佳化的二進制,支援Windows NT2000 XP,有命名管道。

mysqld-max

最佳化的二進制,支援InnoDBBDB資料表。

mysqld-max-nt

mysqld-max,但是已經編譯過,支援命名管道。

已經對所有前面的二進制進行了最佳化以適用現代Intel處理器,但是應當工作在Intel i386-類或更高的處理器上。

所有Windows MySQL 5.1伺服器支援資料庫目錄符號連結。

MySQL支援所有Windows平台的TCP/IPmysqld-ntmysql-max-nt伺服器支援Windows NT2000XP2003的命名管道。然而,在所有平台下預設使用TCP/IP(在許多Windows配置中,命名管道比TCP/IP慢)

命名管道在以下條件下使用:

·         如果使用--enable-named-pipe選項啟動伺服器,則啟用了命名管道。需要明確使用該選項,因為當使用命名管道關閉MySQL伺服器時,某些用戶會遇到問題。

·         只有mysqld-ntmysqld-max-nt伺服器,並且伺服器運行在支援命名管道的Windows版本(NT2000XP2003),才能夠使用命名管道連接。

·         這些伺服器可以運行在Windows 98 Me中,但是必須安裝TCP/IP協議;此時不可以使用命名管道連接。

·         這些伺服器不能在Windows 95中運行。

註釋:參考手冊中的大多數例子使用mysqld做為伺服器名。如果您選擇使用不同的伺服器,例如mysqld-nt,則在相應例子中的命令中進行相應的替換。

2.3.10. 首次啟動伺服器

本節中的訊息主要適用選擇NoinstallMySQL安裝版本,或想要手動配置和測試MySQL而不用GUI工具的情況。

Windows 95,98,Me中,MySQL客戶端總使用TCP/IP連接伺服器。(這樣允許網絡中的所有機器連接MySQL伺服器)因此,在啟動MySQL之前,您必須確保機器支援TCP/IP。可以從Windows CD-ROM中找到TCP/IP

請注意如果使用舊版本的Windows 95(例如,OSR2),很可能您使用了舊的Winsock包;MySQL需要Winsock 2。可以從http://www.microsoft.com/獲得最新的WinsockWindows 98包含新的Winsock 2庫,因此不需要更新庫。

在基於NT的系統中,例如 Windows NT2000XP2003,客戶端可以有兩個選擇。可以使用TCP/IP,如果伺服器支援命名管道連接,也可以使用命名管道。要想使MySQL使用Windows NT 4中的TCP/IP,您必須安裝服務pack 3(或更新的補丁)

如果用--shared-memory選項啟動,WindowsMySQL還支援共享內存連接。客戶端可以通過--protocol=memory選項通過共享內存進行連接。

關於運行哪個伺服器二進制的訊息,參見2.3.9節,「選擇MySQL伺服器類型」

本節對MySQL伺服器啟動進行了概述。下面章節詳細說明了從命令行或Windows 服務啟動MySQL伺服器的具體訊息。

這些章節的例子假定MySQL安裝到預設位置C:\Program Files\MySQL\MySQL Server 5.1如果您將MySQL安裝到了其它位置,則要更改例子中的路徑名。

在控制台窗口(或「DOS window)中,最好根據命令提示進行測試。這樣可以讓伺服器在window中容易看見的地方顯示狀態消息。如果配置出現錯誤,通過這些消息,可以更容易地識別並修復問題。

要想啟動伺服器,輸入命令:

C\> C:\Program Files\MySQL\MySQL Server 5.1\bin\mysqld --console

支援InnoDB的伺服器啟動時,您應當能看見下面的消息:

InnoDB: The first specified datafile c:\ibdata\ibdata1 did not exist:
InnoDB: a new database to be created
InnoDB: Setting file c:\ibdata\ibdata1 size to 209715200
InnoDB: Database physically writes the file full: wait...
InnoDB: Log file c:\iblogs\ib_logfile0 did not exist: new to be created
InnoDB: Setting log file c:\iblogs\ib_logfile0 size to 31457280
InnoDB: Log file c:\iblogs\ib_logfile1 did not exist: new to be created
InnoDB: Setting log file c:\iblogs\ib_logfile1 size to 31457280
InnoDB: Log file c:\iblogs\ib_logfile2 did not exist: new to be created
InnoDB: Setting log file c:\iblogs\ib_logfile2 size to 31457280
InnoDB: Doublewrite buffer not found: creating new
InnoDB: Doublewrite buffer created
InnoDB: creating foreign key constraint system tables
InnoDB: foreign key constraint system tables created
011024 10:58:25  InnoDB: Started

伺服器完成啟動序列後,您應當能看見下述內容,資料表示伺服器準備好,可以進行客戶端連接:

mysqld: ready for connections
Version: '5.1.2-alpha'  socket: ''  port: 3306

伺服器繼續向控制台寫入診斷輸出。您可以打開新的控制台窗口運行客戶端程式。

如果省略--console選項,伺服器向數據目錄(預設為C:\Program Files\MySQL\MySQL Server 5.1\data)中的錯誤日誌寫入診斷輸出。錯誤日誌檔案的延伸名為.err

註釋:MySQL授權資料表中的帳號一開始沒有密碼。伺服器啟動後,您應當根據2.9節,「安裝後的設置和測試」中的說明設置密碼。

2.3.11. 從Windows命令行啟動MySQL

可以從命令行手動啟動MySQL伺服器。可以在任何版本的Windows中實現。

要想從命令行啟動mysqld伺服器,您應當啟動控制台窗口(或「DOS window)並輸入命令:

C\> C:\Program Files\MySQL\MySQL Server 5.0\bin\mysqld

根據系統中MySQL安裝位置的不同,前面的例子中使用的路徑也不同。

在非NT版本的Windows中,在後台啟動mysqld。也就是,伺服器啟動後,您應當可以看見後面的命令提示。如果您用該方法在Windows NT2000XP2003中啟動伺服器,伺服器則在前台運行,在伺服器退出前,不會出現命令提示。因此,當伺服器運行時,應當打開另一個控制台窗口來運行客戶端程式。

下述命令可以停止MySQL伺服器:

C\> C:\Program Files\MySQL\MySQL Server 5.0\bin\mysqladmin -u root shutdown

該命令使用MySQL管理工具mysqladmin連接伺服器並告知它關閉服務。該命令使用MySQL root用戶連接,這是MySQL權限系統中的預設管理帳號。請注意MySQL權限系統中的用戶完全獨立於Windows下的登錄用戶。

如果mysqld不能啟動,檢查錯誤日誌看看伺服器是否寫入了顯示問題原因的任何消息。錯誤日誌位於C:\Program Files\MySQL\MySQL Server 5.1\data目錄中。是帶後綴.err的檔案。還可以嘗試將伺服器啟動為mysqld --console;此時,可以從窗口中獲得一些有用的訊息,可以幫助解決問題。

最後選項是用--standalone --debug啟動mysqld。此時,mysqld 寫入日誌檔案C\mysqld.trace應當包含mysqld不啟動的原因。請參見E.1.2節,「建立跟蹤檔案」

使用mysqld --verbose --help顯示mysqld的所有選項。

2.3.12. 以Windows服務方式啟動MySQL

NT家族 (Windows NT2000,XP2003)中,建議將MySQL安裝為Windows服務,當Windows啟動、停止時,MySQL也自動啟動、停止。還可以從命令行使用NET命令,或使用圖形Services工具來控制AMySQL伺服器。

Windows控制面板(Windows 2000,XPServer 2003管理工具下面)中可以看見Services工具(Windows Service Control Manager)建議從命令行安裝活卸載伺服器時關閉Services工具。這樣可以防止許多錯誤。

安裝MySQL Windows服務之前,應當使用下面的命令先停止當前正運行的伺服器:

C\> C:\Program Files\MySQL\MySQL Server 5.1\bin\mysqladmin -u root shutdown

註釋:如果MySQL root用戶帳號有密碼,您需要使用命令 C:\Program Files\MySQL\MySQL Server 5.1\bin\mysqladmin -u root -p shutdown並根據提示輸入密碼。

該命令使用MySQL管理工具mysqladmin,連接伺服器並告知它關閉服務。該命令使用MySQL root用戶連接,這是MySQL權限系統中的預設管理帳號。請注意MySQL權限系統中的用戶完全獨立於Windows下的登錄用戶。

使用該命令安裝伺服器

C\> mysqld --install

如果只使用伺服器名安裝mysqld時有問題,嘗試使用全路徑名來安裝。例如:

C\> C:\Program Files\MySQL\MySQL Server 5.1\bin\mysqld --install

您還可以將MySQL bin目錄的路徑加到Windows系統PATH環境變數中:

·         右擊Windows桌面上的My Computer(我的計算機)圖標,選擇Properties(屬性)。

·         然後從出現的System Properties菜單中選擇Advanced(高級)標籤,然後點擊Environment Variables環境變數)按鈕。

·         選擇System Variables系統變數)下面的Path(路徑),然後點擊Edit編輯)按鈕。將彈出Edit System Variable(編輯系統變數)對話框。

·         將光標放到標記Variable Value變數值)處的文本的後面。(使用End鍵確保光標位於文本的最後)。然後輸入MySQL bin目錄   的完整路徑(例如,C:\Program Files\MySQL\MySQL Server 5.1\bin),請注意應使用分號將該路徑與該域內的其它值隔離開。一次關閉該對話框和各個對話框,點擊OK直到打開的所有對話框被關閉。您現在可以在DOS提示符下從系統的任何目錄輸入MySQL可執行程式名來使用MySQL可執行程式,而不必提供路徑名。包括伺服器、MySQL客戶端和所有MySQL命令行實用程式,例如mysqladminmysqldump

·         請注意在同一個機器上運行多個MySQL伺服器時,不需要在Windows PATH中加入MySQL bin目錄。

警告:編輯系統PATH時必須特別注意;意外刪除或修改已有路徑值會造成系統故障甚至癱瘓。

服務安裝命令不會啟動伺服器。在本節後面將給出相關指令。

安裝服務時,可以使用MySQL 5.1中的下面的參數:

·         可以直接在--install選項後面指定服務名。預設服務名是MySQL

·         如果給出了服務名,後面可以跟一個選項。一般情況,應當為defaults-file=file_name,指定選項檔案的名稱,伺服器啟動時應當從中讀取選項。

可以使用單個選項代替--defaults-file,但是不提倡這樣做。--defaults-file更加靈活一些,因為您可以將多個伺服器啟動選項放入命名的選項檔案中。

·         可以在服務名後面指定一個--local-service選項。這樣伺服器運行時使用LocalService Windows帳號,只具有有限的系統權限。該帳號只適用於Windows XP或更新版本。如果服務名後面同時跟有--defaults-file--local-service,二者可以按任何順序排放。

對於Windows MySQL伺服器,根據下面規則確定伺服器使用的服務名和選項檔案:

·         如果在服務安裝命令中,沒有在--install選項後面指定了服務名或使用預設服務名(MySQL),伺服器則使用MySQL服務名並從標準選項檔案的[mysqld]組讀取選項。

·         如果在服務安裝命令中,在--install選項後面指定的服務名不是預設服務名(MySQL)。則從具有相同服務名的組中讀取選項,並從標準選項檔案讀取選項。

伺服器還從標準選項檔案的[mysqld]組讀取選項。您可以使用[mysqld]組中的選項用於所有MySQL 服務,還可以使用具有相同服務名的組,用於該服務名所對應的伺服器。

·         如果在服務安裝命令中,在服務名後面指定了--defaults-file選項,伺服器只從命名檔案的[mysqld]組中讀取選項,忽略標準選項檔案。

對於更複雜的例子可以考慮使用命令:

C\> C:\Program Files\MySQL\MySQL Server 5.1\bin\mysqld --install MySQL --defaults-file=C:\my-opts.cnf

該命令中,--install選項後面給出了預設服務名(MySQL)。如果未給出--defaults-file選項,該命令可以讓伺服器從標準選項檔案的[mysqld]組中讀數。由於提供了--defaults-file選項,伺服器只從命名檔案的[mysqld]組讀取選項。

還可以在啟動MySQL服務之前,在Windows Services工具中指定啟動參數選項。

MySQL伺服器安裝為服務後,Windows啟動時自動啟動服務。還可以從Services工具直接啟動服務,或使用命令NET START MySQLNET命令忽略大小寫。

做為服務運行時,mysqld不能訪問控制台窗口,因此看不見任何消息。如果mysqld未啟動,檢查錯誤日誌看看伺服器是否寫入了顯示問題原因的任何消息。錯誤日誌位於MySQL數據目錄中(例如,C:\Program Files\MySQL\MySQL Server 5.1\data),是帶後綴.err的檔案。

如果MySQL伺服器安裝為服務,並且服務正運行,Windows關閉時自動停止服務。還可以通過Services工具、NET STOP MySQL命令或 mysqladmin shutdown命令手動停止伺服器。

如果不想在引導過程中自動啟動服務,還可以將服務設置為手動啟動模式。實現的方法是使用--install-manual選項而非--install選項:

C\> C:\Program Files\MySQL\MySQL Server 5.1\bin\mysqld --install-manual

要想卸載伺服器,如果服務正運行則應首先使用命令NET STOP MYSQL停止服務。然後使用--remove選項卸載服務:

C\> C:\Program Files\MySQL\MySQL Server 5.1\bin\mysqld --remove

如果mysqld不是服務,可以從命令行啟動它。詳細說明參見2.3.11節,「從Windows命令行啟動MySQL」

如果在安裝過程中遇到問題,請參閱2.3.14節,「在Windows環境下對MySQL安裝的故障診斷與排除」

2.3.13. 測試MySQL安裝

可以通過以下命令測試MySQL伺服器是否工作:
C:\> C:\Program Files\MySQL\MySQL Server 5.1\bin\mysqlshow
C:\> C:\Program Files\MySQL\MySQL Server 5.1\bin\mysqlshow -u root mysql
C:\> C:\Program Files\MySQL\MySQL Server 5.1\bin\mysqladmin version status proc
C:\> C:\Program Files\MySQL\MySQL Server 5.1\bin\mysql test

如果mysqld對客戶端程式TCP/IP連接的響應較慢,可能是DNS問題。此時,使用--skip-name-resolve選項啟動mysqld,在MySQL授權資料表的Host列只使用localhostIP號。

可以通過--pipe--protocol=PIPE選項強制MySQL客戶端使用命名管道連接代替TCP/IP連接,或指定.(階段)做為主機名。使用--socket選項指定管道名。

2.3.14. 在Windows環境下對MySQL安裝的故障診斷與排除

首次安裝、運行MySQL時,您可能會遇到一些錯誤,使MySQL伺服器不能啟動。本節的目的是幫助您診斷並糾正這些錯誤。

解決伺服器問題時您的第一資料是錯誤日誌。MySQL伺服器使用錯誤日誌來記錄伺服器不能啟動的訊息。錯誤日誌位於my.ini檔案指定的數據目錄中。預設數據目錄位於C:\Program Files\MySQL\MySQL Server 5.1\dat。請參見5.11.1節,「錯誤日誌」

另一個錯誤相關資訊來源是MySQL服務啟動時控制台上顯示的消息。將mysqld安裝為服務後,從命令行通過NET START mysql命令來查看MySQL服務啟動相關的錯誤消息。請參見2.3.12節,「以Windows服務方式啟動MySQL」

下面距離說明了首次安裝並啟動MySQL服務時會遇到的最常見的錯誤消息:

·                System error 1067 has occurred.
·                Fatal error: Can't open privilege tables: Table 'mysql.host' doesn't exist

·         MySQL伺服器找不到MySQL權限資料庫或關鍵檔案時會出現這些消息。當MySQL基或數據目錄沒有安裝在預設位置(C\mysqlC:\Program Files\MySQL\MySQL Server 5.1\data),而是安裝到其它位置時通常會遇到該問題。

發生該問題的一種情況是對MySQL進行升級或安裝到了新位置,但是沒有對配置檔案進行更新以對應新的安裝位置。此外還可能是新舊配置檔案衝突,當升級MySQL時,一定要刪除或重新命名舊的配置檔案。

如果您沒有將MySQL安裝到C:\Program Files\MySQL\MySQL Server 5.1目錄下,而是安裝到了其它目錄下,您需要通過使用配置(my.ini)檔案讓MySQL伺服器知道安裝目錄。my.ini檔案應位於Windows目錄下,典型為C\WINNTC\WINDOWS。可以在命令提示符下輸入下面的命令從WINDIR環境變數值中確定確切位置:

C\> echo %WINDIR%

可以通過文本編輯器(例如記事本)來建立並修改選項檔案。例如,如果MySQL安裝在E\mysql數據目錄在D:\MySQLdata,您可以建立選項檔案並設置[mysqld]來指定basedirdatadir參數的值:

[mysqld]
# set basedir to your installation path
basedir=E:/mysql
# set datadir to the location of your data directory
datadir=D:/MySQLdata

請注意應使用()斜線而不是反斜線在選項檔案中指定Windows路徑名。如果使用反斜線,則必須使用雙斜線:

[mysqld]
# set basedir to your installation path
basedir=C:\\Program Files\\MySQL\\MySQL Server 5.1
# set datadir to the location of your data directory
datadir=D:\\MySQLdata

如果在MySQL配置檔案中更改datadir值,在重新啟動MySQL伺服器之前,必須移動已有MySQL數據目錄中的內容。

參見2.3.8節,「建立選項檔案」

·                Error: Cannot create Windows service for MySql. Error: 0

·         當您沒有事先停止並卸載已有MySQL服務,並且使用MySQL Configuration Wizard(配置嚮導)重新安裝或升級MySQL時,會遇到該問題。發生的原因是,當配置嚮導試圖安裝服務時,它發現已經有一個同名的服務。

解決該問題的一個方案是使用配置嚮導時選擇mysql之外的其它服務名。這樣可以正確安裝新服務,但保留了原來的服務。但是這樣不好,最好是卸掉不再使用的舊服務。

要想永遠卸掉舊的MySQL服務,通過管理權限用戶在命令行執行下面的命令:

C:\>sc delete mysql
[SC] DeleteService SUCCESS

如果Windows版本中沒有sc工具,可以從 http://www.microsoft.com/windows2000/techinfo/reskit/tools/existing/delsrv-o.asp 下載delsrv工具並使用delsrvMySQL語法。

2.3.15. 在Windows下升級MySQL

本節列出了在Windows中升級MySQL應採取的步驟。

1.    進行升級前您應先備份當前的MySQL安裝。請參見5.9.1節,「資料庫備份」

2.    http://dev.mysql.com/downloads/下載最新WindowsMySQL

3.    升級MySQL前,必須停止伺服器。

如果伺服器安裝為服務,必須在命令提示符下在命令行中用下面的命令停止服務:

C\> NET STOP MYSQL

如果MySQL伺服器不是服務,使用下面的命令停止伺服器:

C\> C:\Program Files\MySQL\MySQL Server 5.1\bin\mysqladmin -u root shutdown

4.    當從以前至的4.1.5版本升級到MySQL 5.1,或從Zip檔案安裝的MySQL升級到MySQL Installation Wizard安裝幫助)安裝的MySQL時,您必須手動卸載前面安裝的MySQL服務。

要想卸載MySQL服務,使用下面的命令:

C\> C:\mysql\bin\mysqld --remove

如果您不想卸載已有的服務,MySQL Installation Wizard(安裝幫助)則不會正確安裝新的MySQL服務。

5.    如果您使用MySQL Installation Wizard(安裝幫助),按照2.3.4節,「使用MySQL安裝嚮導」的描述來啟動幫助。

6.    如果用Zip檔案安裝MySQL,應提取檔案。您可以覆蓋已有的MySQL安裝(通常位於C\mysql),或將它安裝到其它目錄,例如 C\mysql4。建議覆蓋原有的安裝。

7.    重新啟動伺服器。如果您運行MySQL服務,則使用NET START MySQL,還可以直接使用mysqld

8.    關於在Windows之外的作業系統升級MySQL的詳細訊息,請參閱2.10節,「升級MySQL」

9.    如果遇到錯誤,參見 2.3.14節,「在Windows環境下對MySQL安裝的故障診斷與排除」

2.3.16. Windows版MySQL同Unix版MySQL對比

已經證明,WindowsMySQL很穩定。WindowsMySQL的功能與相應的Unix版相同,只有以下例外:

·         Windows 95和線程

Windows 95建立一個線程時大約需要200字節的主內存。MySQL的每個連接都會建立一個新線程,因此如果您的伺服器正處理許多連接,您不應當在Windows 95中運行mysqld

·         有限的端口數目

Windows系統有大約4,000個端口供客戶端連接,某個端口的連接關閉後,在能夠重新利用該端口前,需要24分鐘。在客戶端頻繁連接並從伺服器上中斷時,在可以重新使用關閉的端口前,有可能用完了所有可用的端口。如果發生這種情況,MySQL伺服器不會響應,即使它仍在運行。請注意機器上運行的其它應用程式也可以使用端口,此時可供MySQL使用的端口數要少。

詳細訊息參見http://support.microsoft.com/default.aspx?scid=kb;en-us;196271

·         並行讀

MySQL依靠pread()pwrite()系統使用來同時使用INSERTSELECT。目前我們使用互斥來競爭pread()pwrite()。我們將來想用虛擬接口替換檔案級接口,因此要想更快,我們可以在NT2000XP上使用readfile()/writefile()接口。目前MySQL 5.1可以打開的檔案的限制數目為2,048,意味著在Windows NT2000,XP2003上可以運行的並行線程不如Unix上多。

·         阻塞讀

MySQL為每個連接使用阻塞讀取,如果啟用了命名管道連接,其含義如下:

o        連接不會在8小時後自動中斷,而在UnixMySQL中會發生。

o        如果連接被掛起,不殺掉MySQL則不會將其中斷。

o        mysqladmin kill不會殺掉睡眠中的連接。

o        只要有睡眠連接,mysqladmin shutdown不會中斷。

我們計劃在將來修復該問題。

·         ALTER TABLE

執行ALTER TABLE語句時,將該資料表鎖定不讓其它線程使用。在Windows中,您不能刪除正被另一個線程使用的檔案。在將來,我們會找出辦法解決該問題。

·         DROP TABLE

Windows中對一個被MERGE資料表應用的資料表執行DROP TABLE不會實現,因為MERGE處理器將資料表從MySQL上層映射隱藏起來。由於Windows不允許刪除打開的檔案,必須在刪除資料表之前首先清空所有MERGE資料表(使用FLUSH TABLES)或刪掉MERGE資料表。

·         DATA DIRECTORY and INDEX DIRECTORY

Windows中將忽略DATA DIRECTORYINDEX DIRECTORY選項,因為Windows不支援符號連接。在具有非功能realpath()使用的系統中,這些選項也被忽略。

·         DROP DATABASE

您不能刪掉正被線程使用的資料庫。

·         Task Manager(任務管理器)殺掉MySQL

您不能從Task Manager(任務管理求)或使用Windows 95shutdown工具來殺掉MySQL。您必須通過mysqladmin shutdown停止它。

·         大小寫名

由於Windows對檔案名大小寫不敏感。因此在WindowsMySQL資料庫名和資料表名對大小寫也不敏感。唯一的限制是在同一個語句中,必須同時使用大寫或小寫指定資料庫名和資料表名。請參見9.2.2節,「識別符大小寫敏感性」

·         \』路徑名間隔符

Windows中的路徑名用『\』符間隔開,在MySQL中還是轉義字元。如果您使用LOAD DATA INFILESELECT ... INTO OUTFILE,用『/』符使用Unix-類檔案名:

mysql> LOAD DATA INFILE 'C:/tmp/skr.txt' INTO TABLE skr;
mysql> SELECT * INTO OUTFILE 'C:/tmp/skr.txt' FROM skr;

您還可以使用雙『\』符:

mysql> LOAD DATA INFILE 'C:\\tmp\\skr.txt' INTO TABLE skr;
mysql> SELECT * INTO OUTFILE 'C:\\tmp\\skr.txt' FROM skr;

·         管道問題。

管道不能在Windows命令行提示符下可靠地工作。如果管道包括字元^Z/CHAR(24)Windows認為遇到了檔案末尾並中斷程式。

這主要是按照如下所示使用二進制日誌的主要問題:

C\>mysqlbinlog binary-log-name | mysql --user=root

如果使用日誌時出現問題,懷疑是由於^Z / CHAR(24)字元,您可以使用下面的程式:

C:\> mysqlbinlog binary-log-file --result-file=/tmp/bin.sql
C:\> mysql --user=root --execute "source /tmp/bin.sql"

後面的命令還可以用來可靠讀取任何包含二進制數據的SQL檔案。

·         Access denied for user錯誤

如果您試圖運行MySQL客戶端程式來連接同一機器上運行的伺服器,但是遇到錯誤Access denied for user 'some-user'@'unknown' to database 'mysql',這意味著MySQL不能正確識別您的主機名。

要解決該問題,您應當建立一個名為\windows\hosts包含下面訊息的檔案:

127.0.0.1       localhost

這兒有一些公開問題,提供給想要幫助我們改進Windows中的MySQL的人們:

·         增加宏來使用Windows提供的更快的線程安全增/減方法。

2.4. 在Linux下安裝MySQL

建議在Linux中使用RPM包來安裝MySQLMySQL RPM目前已經嵌入到SuSE Linux 7.3系統中,但是應當能在大多數支援rpm和使用glibcLinux版本中工作。要想獲得RPM軟件包,參見2.1.3節,「怎樣獲得MySQL」

MySQL AB不提供與具體平台相關的RPM;具體平台相關的RPM和通用RPM之間的區別是具體平台相關RPM為目標平台而構建,為動態連接。而通用RPMLinux線程之間是靜態連接。

註釋:通常由其它供應商提供MySQLRPM分發版。其特徵和功能與MySQL AB所構建的不同,該手冊中的指令不一定適合安裝其它供應商提供的MySQLRPM分發版。此時應咨詢供應商的說明。

如果RPM檔案有問題(例如,如果您收到錯誤「Sorry, the host 'xxxx' could not be looked up),參見2.12.1.2節,「Linux二進制分發版說明」

在大多數情況,您只需要安裝MySQL-serverMySQL-client軟件包來安裝MySQL。在標準安裝中不需要其它的包。如果您想要運行含更多功能的MySQL-Max伺服器,還應當安裝MySQL-Max RPM。必須先安裝M MySQL-server RPM再安裝該模塊。請參見5.1.2節,「mysqld-max延伸MySQL伺服器」

如果安裝MySQL軟件包時出現從屬錯誤(例如,「error: removing these packages would break dependencies: libmysqlclient.so.10 is needed by ..),您還應當安裝包MySQL-shared-compat,其中包括兩個向後兼容的共享庫(MySQL 4.0libmysqlclient.so.12MySQL 3.23libmysqlclient.so.10)

許多Linux分發版包含了MySQL 3.23,通常動態連接應用程式以節省硬盤空間。如果這些共享庫在單獨的包內(例如,MySQL-shared),只需要安裝這些包並升級MySQL伺服器和客戶端軟件包(為靜態連接,不依賴共享庫)對於包含與MySQL伺服器相同軟件包中的共享庫的分發版(例如,Red Hat Linux),您可以安裝3.23 MySQL-shared RPM,或使用MySQL-shared-compat包。

可以使用以下RPM包:

·         MySQL-server-VERSION.i386.rpm

MySQL伺服器。您需要該選項,除非您只想連接運行在另一台機器上的MySQL伺服器。 註釋:在MySQL 4.0.10之前,伺服器RPM檔案被稱為MySQL-VERSION.i386.rpm。也就是說,名稱中不含有-server

·         MySQL-Max-VERSION.i386.rpm

MySQL-Max伺服器。該伺服器具有其它功能,這是MySQL-server RPM不具備的。您必須首先安裝MySQL-server RPM,因為MySQL-Max RPM依賴於它。

·         MySQL-client-VERSION.i386.rpm

標準MySQL客戶端程式。您可能總是要安裝該軟件包。

·         MySQL-bench-VERSION.i386.rpm

測試和基準。需要PerlDBD::mysql模塊。

·         MySQL-devel-VERSION.i386.rpm

庫和包含檔案,如果您想要編譯其它MySQL客戶端,例如Perl模塊,則需要。

·         MySQL-shared-VERSION.i386.rpm

該軟件包包含某些語言和應用程式需要動態裝載的共享庫(libmysqlclient.so*),使用MySQL

·         MySQL-shared-compat-VERSION.i386.rpm

該軟件包包括MySQL 3.23MySQL 4.0的共享庫。如果您安裝了應用程式動態連接MySQL 3.23,但是您想要升級到MySQL 4.0而不想打破庫的從屬關係,則安裝該軟件包而不要安裝MySQL-shared。從MySQL 4.0.13起包含該安裝軟件包。

·         MySQL-embedded-VERSION.i386.rpm

嵌入式MySQL伺服器庫(MySQL 4.0)

·         MySQL-VERSION.src.rpm

包含以前所有軟件包的原始碼。可用來在其它架構上重建RPM(例如,AlphaSPARC)

要想看到RPM軟件包內的所有檔案(例如,MySQL-server RPM),運行:

shell> rpm -qpl MySQL-server-VERSION.i386.rpm

要想執行標準最小安裝,運行:

shell> rpm -i MySQL-server-VERSION.i386.rpm
shell> rpm -i MySQL-client-VERSION.i386.rpm

要想只安裝客戶端軟件包,運行:

shell> rpm -i MySQL-client-VERSION.i386.rpm

RPM提供在安裝軟件包前驗證其完整性和真實性的功能。如果您要想瞭解關於該功能的更多訊息,參見2.1.4節,「通過MD5校驗和或GnuPG驗證軟件包的完整性

伺服器RPM將數據放入/var/lib/mysql目錄。RPM還為mysql用戶建立登錄帳號(如果還沒有),用來運行MySQL伺服器,並在/etc/init.d/建立相應條目,以便在引導時自動啟動伺服器。(這意味著如果您已經安裝並且已經更改啟動指令,您可能要複製指令,以便您安裝新RPM時 不會丟掉指令)。關於系統啟動時如何自動啟動MySQL的詳細訊息,參見 2.9.2.2節,「自動啟動和停止MySQL」

如果想要在舊的不支援/etc/init.d(直接或通過符號連接)初始化指令的Linux分發版中安裝MySQL RPM,您應當建立一個指向初始化指令實際安裝的位置的符號連接。例如,如果安裝位置為/etc/rc.d/init.d,安裝RPM前使用這些命令建立/etc/init.d,作為指向該位置的符號連接:

shell> cd /etc
shell> ln -s rc.d/init.d

目前主要Linux分發版應當支援使用/etc/init.d的新目錄佈局,因為需要LSB(Linux標準基)相容性。

如果您安裝的RPM檔案包括MySQL-server,安裝後MySQLd伺服器應當能啟動並運行。您應當能使用MySQL啟動。

如果出現問題,可以從二進制安裝部分找到詳細訊息。2.7節,「在其它類Unix系統中安裝MySQL」

註釋:MySQL授權資料表中的帳號開始沒有密碼。啟動伺服器後,應當按照2.9節,「安裝後的設置和測試」中的說明為它們設置密碼。

2.5.在Mac OS X中安裝MySQL

可以在Mac OS X 10.2.x(Jaguar)和以上版本上Mac OS X使用二進制安裝軟件包的PKG格式代替二進制分發版來安裝MySQL。請注意該軟件包不支援舊版本的Mac OS X(例如,10.1.x)

安裝軟件包位於硬盤映像(.dmg)檔案中,必須首先雙擊搜索起中的圖標來安裝該檔案。應當安裝圖像並顯示其內容。

要想獲得MySQL,參見2.1.3節,「怎樣獲得MySQL」

註釋:在繼續安裝前,一定要使用MySQL管理器應用程式(Mac OS X伺服器上)或通過命令行的mysqladmin shutdown關閉所有運行MySQL伺服器實例。

要想安裝MySQL PKG檔案,雙擊軟件包圖標。將啟動Mac OS X安裝軟件包安裝器,將指導您完成MySQL安裝。

Mac OS X安裝軟件包的安裝器中有一個問題,您會在目標盤選擇對話框中發現該錯誤消息:

You cannot install this software on this disk. (null)

如果出現該錯誤,只需要點擊Go Back按鈕返回前面的窗口。然後點擊Continue再次選擇目標盤,此時應當可以正確地選擇目標盤。我們已經向Apple報告了該問題,它正在調查該問題。

MySQLMac OS X PKG安裝到/usr/local/mysql-VERSION,並且還會安裝一個符號連接,/usr/local/mysql,指向新的位置。如果有/usr/local/mysql目錄,首先將它改名為/usr/local/mysql.bak。安裝完後,安裝器執行mysql_install_dbMySQL資料庫中建立授權資料表。

安裝佈局與tar檔案二進制分發版類似;所有MySQL二進制代碼位於目錄/usr/local/mysql/bin中。預設情況,MySQL套接字檔案建立為/tmp/mysql.sock。請參見2.1.5節,「安裝佈局」

MySQL安裝需要Mac OS Xmysql用戶帳號。在Mac OS X 10.2及以上版本中,預設情況應存在mysql用戶帳號。

如果正運行Mac OS X伺服器,需要安裝MySQL。隨Mac OS X伺服器版本安裝的MySQL版本如下資料表所示:

Mac OS X伺服器版本

MySQL版本

10.2-10.2.2

3.23.51

10.2.3-10.2.6

3.23.53

10.3

4.0.14

10.3.2

4.0.16

10.4.0

4.1.10a

本節只覆蓋官方MySQL Mac OS X PKG版本。一定要閱讀Apple關於MySQL安裝的幫助訊息:運行「幫助視圖」應用程式,選擇「Mac OS X伺服器」幫助,搜索「MySQL」,閱讀標題為「安裝MySQL」的內容。

對於Mac OS X伺服器上已經安裝的MySQL版本,如果早於4.0,應特別注意應當使用mysqld_safe而不是safe_mysqld來啟動mysqld

如果您前面在Mac OS X上安裝了從http://www.entropy.ch下載的Marc LiyanageMySQL軟件包,您可以只使用該頁給出的二進制安裝佈局按照更新說明來安裝。

如果您從Marc3.23.xx 版本或從Mac OS XMySQL伺服器版本升級到官方MySQL PKG,您還需要將已有MySQL授權資料表轉換為當前格式,因為已經加了許多新的安全權限。請參見2.10.2節,「升級授權資料表」

如果您想在系統啟動過程中自動啟動MySQL,您還需要安裝MySQL Startup Item。在MySQL 5.1,它是Mac OS X安裝盤映像的一部分,是一個獨立的安裝軟件包。只需要雙擊MySQLStartupItem.圖標並按照說明來安裝。

請注意Startup Item只需要安裝一次!不需要在以後每次升級MySQL軟件包時都安裝它。

MySQL 5.1Startup Item安裝在/Library/StartupItems/MySQLCOM(MySQL 4.1.2以前的版本,安裝位置為/Library/StartupItems/MySQL,但與Mac OS X伺服器安裝的MySQL Startup Item衝突)Startup Item安裝時在系統配置檔案/etc/hostconfig中加入變數MySQLCOM=-YES-。如果您想要disable自動啟動MySQL,只需要將該變數更改為MySQLCOM=-NO-

Mac OS X伺服器上,預設MySQL安裝使用/etc/hostconfig檔案中的變數MySQLMySQL AB Startup Item安裝器將其設置為MySQL=-NO-禁用該變數。這樣可以避免啟動時間與MySQL AB Startup Item使用的MySQLCOM變數衝突。但是,不會關閉運行的MySQL伺服器。您應當自己關閉。

安裝完後,可以在終端窗口運行下面的命令來啟動MySQL。您必須具有管理員權限來執行該任務。

如果您已經安裝的Startup Item

shell> sudo /Library/StartupItems/MySQLCOM/MySQLCOM start

(Enter your password, if necessary)

(Press Control-D or enter "exit" to exit the shell)

如果不使用Startup Item,輸入下面的命令序列:

shell> cd /usr/local/mysql

shell> sudo ./bin/mysqld_safe

(Enter your password, if necessary)

(Press Control-Z)

shell> bg

(Press Control-D or enter "exit" to exit the shell)

您應當能夠連接MySQL伺服器,例如,通過運行/usr/local/mysql/bin/mysql來連接。

註釋:MySQL授權資料表中的帳號開始沒有密碼。啟動伺服器後,應當按照2.9節,「安裝後的設置和測試」中的說明來設置密碼。

您可以為外殼源檔案起一個別名,使它更容易訪問常用的程式,例如從命令行運行mysqlmysqladmintcsh語法為:

aliasMySQL /usr/local/mysql/bin/mysql
aliasMySQLadmin /usr/local/mysql/bin/mysqladmin

對於bash,使用:

aliasMySQL=/usr/local/mysql/bin/mysql
aliasMySQLadmin=/usr/local/mysql/bin/mysqladmin

最好是在PATH環境變數中加入/usr/local/mysql/bin。例如,如果外殼命令是tcsh,在$HOME/.tcshrc檔案中加入下面一行:

setenv PATH ${PATH}:/usr/local/mysql/bin

如果根目錄中沒有.tcshrc檔案,則用文本編輯器建立該檔案。

如果您對已有的安裝進行升級,請注意安裝新MySQL PKG時不會卸載舊的安裝目錄。遺憾的是,Mac OS X安裝器尚未提供功能來正確升級前面安裝的軟件包。

要想在新安裝中使用已有的資料庫,您需要將舊數據目錄中的內容複製到新的數據目錄。執行該操作時,確保關閉新、舊伺服器。將以前安裝的MySQL資料庫檔案拷貝過來並成功啟動新的伺服器後,應當卸載舊的檔案以節省硬盤空間。並且,還應當卸掉位於/Library/Receipts/mysql-VERSION.pkg的舊版本Package Receipt目錄。

2.6. 在NetWare中安裝MySQL

MySQL裝入到NetWare首先由Novell實現。Novell客戶應當滿意,NetWare 6.5中捆綁了SQL二進制,並具有自動商業使用授權,用於運行該版本NetWare的所有伺服器。

NetWareMySQL使用NetWareMetrowerks CodeWarrior和專用跨編譯版GNU自動工具編譯而成。

可以從http://dev.mysql.com/downloads/獲得最新的二進制軟件包NetWare。請參見2.1.3節,「怎樣獲得MySQL」

為了使MySQL駐留在主機上,NetWare伺服器必須滿足以下要求:

·         安裝的NetWare 6.5 NetWare 6.0Latest Support Pack(最新支援補丁)。

·         系統必須滿足Novell的最低要求以運行相關版本的NetWare

·         MySQL數據及其二進制,必須安裝到NSS卷內;不支援傳統卷。

要想在NetWare下安裝MySQL,遵從下面的步驟:

1.    如果您對前面的安裝進行升級,停止MySQL伺服器。應使用下面的命令從伺服器控制台完成:

2.            SERVER:  mysqladmin -u root shutdown

3.    從客戶端登錄到目標伺服器上,訪問安裝MySQL的位置。

4.    將二進制軟件包Zip檔案提取到伺服器上。一定要使用Zip檔案中的路徑。簡單地將檔案提取到SYS\是很安全的。

如果您從前面的安裝升級,您可能需要複製數據目錄(例如,SYS:MYSQL\DATA)my.cnf(如果您已經定制)。然後您可以刪除舊版本的MySQL

5.    您可以將目錄重新命名為更加一致和易於使用的名稱。在本手冊的例子中使用SYSMYSQL來指向安裝目錄。

請注意在NetWare上安裝MySQL不會檢測到是否已經安裝了NetWare發佈之外的MySQL版本。因此,如果您已經在SYS\MYSQL安裝了從網站上下載的最新MySQL版本(例如,MySQL 4.1或更新版本),在升級NetWare伺服器之前,必須重新命名檔案夾;否則,SYS\MySQL中的檔案會被NetWare Support Pack中的版本所覆蓋。

6.    在伺服器控制台中,加入含有 MySQL NLM的目錄的搜索路徑。例如:

7.            SERVER:  SEARCH ADD SYS:MYSQL\BIN

8.    初始化數據目錄和授權資料表,如果需要,應在伺服器控制台執行mysql_install_db

9.    在伺服器控制台使用mysqld_safe啟動MySQL伺服器。

10.要完成安裝,還應當在autoexec.ncf中加入以下命令。例如,如果MySQL安裝在SYSMYSQL中,您想讓MySQL自動啟動,可以加入以下行:

11.         #Starts the MySQL 5.1.x database server
12.        SEARCH ADD SYS:MYSQL\BIN
13.        MYSQLD_SAFE

如果MySQL運行在NetWare 6.0,我們強烈建議您在命令行中使用--skip-external-locking選項:

#Starts the MySQL 5.1.x database server
SEARCH ADD SYS:MYSQL\BIN
MYSQLD_SAFE --skip-external-locking

還需要使用CHECK TABLEREPAIR TABLE來替代myisamchk,因為myisamchk使用外部鎖。已經知道外部鎖在NetWare 6.0中有問題;在NetWare 6.5中已經解決了該問題。

NetWare中的mysqld_safe提供了窗口保留功能。當卸載(關閉)mysqld_safe NLM時,預設情況窗口不會消失。相反,會提示用戶輸入:

*<NLM has terminated; Press any key to close the screen>*

如果您想讓NetWare自動關閉窗口,在mysqld_safe使用--autoclose選項。例如:

#Starts the MySQL 5.1.x database server
SEARCH ADD SYS:MYSQL\BIN
MYSQLD_SAFE --autoclose

14.當首次安裝或從前面的版本升級MySQL 5.1版時,應下載並安裝最新的相應Perl模塊和PHP延伸名:

·         Perl for NetWare: http://forge.novell.com/modules/xfcontent/downloads.php/perl/Modules/

·         PHP for NetWare: http://forge.novell.com/modules/xfcontent/downloads.php/php/Modules/

 (MySQL 4.1PHP 5延伸名適用於MySQL 5.1)

5.1.3節,「mysqld_safe:MySQL伺服器啟動指令」中詳細描述了NetWare中的mysqld_safe的行為。

如果伺服器上已經安裝了MySQL,一定要檢查autoexec.ncf中已有的MySQL啟動命令,如果需要則編輯或刪除這些命令。

註釋:MySQL授權資料表中的初始帳號沒有密碼。啟動伺服器後,您應當使用2.9節,「安裝後的設置和測試」中的說明來設置密碼。

2.7. 在其它類Unix系統中安裝MySQL

本節介紹在各種平台上安裝tar壓縮檔案格式的MySQL二進制分發版(檔案有.tar.gz 延伸名)。詳細目錄參見2.1.2.5節,「MySQL AB編譯的MySQL二進製版本」

要想獲得MySQL,參見2.1.3節,「怎樣獲得MySQL」

MySQLtar檔案二進制分發版的檔案名格式為mysql-VERSION-OS.tar.gz,其中VERSION是版本號(例如,5.1.2-alpha)OS資料表示分發版安裝的作業系統類型(例如,pc-linux-i686)

除了這些通用軟件包,我們還為各平台提供了具體的二進制安裝軟件包。關於如何安裝的詳細訊息參見2.2節,「使用二進制分發版的標準MySQL安裝」

您需要下面的工具來安裝MySQL tar檔案二進制分發版:

·         GNU gunzip解壓縮分發版。

·         一個適當的tar解包分發版。 GNU tar已知可以。一些作業系統中含有預安裝的tar,已知有問題。例如,已知Mac OS X tarSun tar對於長檔案名有問題。在Mac OS X中,您可以使用預安裝的gnutar程式。在其它系統中若tar不完善,您應當首先安裝GNU tar

如果您遇到問題,在把問題寄到MySQL郵件目錄時,請一定使用mysqlbug,就算問題不是一個問題,mysqlbug也會收集系統訊息,將有助於其它人解決您的問題。不使用mysqlbug,您將減少得到您問題的一個解決方案的可能性!在您解包分發版後,您會在「bin目錄下找到mysqlbug。請參見1.7.1.3節,「如何通報問題和問題」

必須執行以便安裝並使用MySQL二進制分發版的基本命令是:

shell> groupadd mysql

shell> useradd -g mysql mysql

shell> cd /usr/local

shell> gunzip < /path/to/mysql-VERSION-OS.tar.gz | tar xvf -

shell> ln -s full-path-to-mysql-VERSION-OS mysql

shell> cd mysql

shell> scripts/mysql_install_db --user=mysql

shell> chown -R root  .

shell> chown -R mysql data

shell> chgrp -R mysql .

shell> bin/mysqld_safe --user=mysql &

註釋:該過程未設置MySQL帳號的密碼。完成下面的過程後,繼續執行想2.9節,「安裝後的設置和測試」

下面為安裝二進制分發版的更詳細的描述:

1.    mysqld增加一個登錄用戶和組:

2.            shell> groupadd mysql

3.            shell> useradd -g mysql mysql

這些命令將增加MySQL組和MySQL用戶。不同版本的Unix中,useraddgroupadd的語法可能會稍有不同。還可以稱為adduseraddgroup

您可能會將這些用戶和組命名為mysql之外的名稱。如果是這樣,在下面的步驟中替換為相應的名稱。

4.    挑選一個您想解開分發包的目錄,進入該目錄。在下面的例子中,我們將分發解包在「/usr/local」下(因此,下列說明假設您有權限在「/usr/local」中建立檔案和目錄,如果該目錄被保護,您需要以root實施安裝)

5.            shell> cd /usr/local

6.    2.1.3節,「怎樣獲得MySQL」中列出的站點之一獲得一個分發檔案。對於一個給定的版本,所有平台的二進制分發版均從相同的MySQL原始碼分發版構建。

7.    解包分發版,將建立安裝目錄。然後生成到該目錄的一個符號連結:

8.            shell> gunzip < /path/to/mysql-VERSION-OS.tar.gz | tar xvf -

9.            shell> ln -s full-path-to-mysql-VERSION-OS mysql

tar命令建立mysql-VERSION-OS目錄。ln命令生成到該目錄的一個符號連結。這讓您更容易地把安裝目錄指定為/usr/local/mysql

使用GNU tar,則不再需要gunzip。可以用下面的命令替換第一行來解包和提取分發版:

shell> tar zxvf /path/to/mysql-VERSION-OS.tar.gz

10.進入安裝目錄:

11.       shell> cd mysql

您會在mysql目錄下發現幾個檔案和子目錄,對安裝目的最重要的是「bin」和「scripts」子目錄。

·         bin

這個目錄包含客戶端程式和伺服器,您應該把這個目錄的完整路徑加到PATH環境變數,以便shell能正確的找到MySQL程式。請參見附錄F:環境變數

·         scripts

這個目錄包含mysql_install_db指令,用來初始化mysql資料庫的 授權資料表,其中貯存了伺服器訪問允許。

12.如果還沒有安裝MySQL,必須建立MySQL授權資料表:

13.        shell> scripts/mysql_install_db --user=mysql

如果您用root運行命令,應當使用--user選項。選項的值應與您在第一步為運行伺服器所建立的登錄帳號相同。如果您用該用戶登錄來運行命令,可以省略--user選項。

建立或升級授權資料表後,需要手動重新啟動伺服器。

14.將程式二進制的所有權改為root數據目錄的所有權改為運行mysqld 的用戶。如果位於安裝目錄(/usr/local/mysql)下,命令應為:

15.        shell> chown -R root  .

16.        shell> chown -R mysql data

17.        shell> chgrp -R mysql .

第一個命令將檔案的所有屬性改為root用戶。第二個命令將數據目錄的所有屬性改為mysql用戶。第三個命令將組屬性改為mysql組。

18.如果您喜歡在引導機器時自動啟動MySQL,可以拷貝support-files/mysql.server檔案到系統有啟動檔案的地方。更多的訊息可以在support-files/mysql.server指令中和2.9.2.2節,「自動啟動和停止MySQL」中找到。

19.如果安裝了DBIDBD::mysql Perl模塊,可以使用bin/mysql_setpermission指令增加新帳號。關於說明,參見 2.13節,「Perl安裝注意事項」

20.如果您想使用mysqlaccess而在某個非標準的地點有MySQL分發版,您必須改變地點,在那兒mysqlaccess期望找到mysql客戶端。編輯「bin/mysqlaccess」指令,大約在第18行,尋找類似下面的行:

21.          $MYSQL     = '/usr/local/bin/mysql';    # path to mysql executable

改變路徑以反映出mysql實際儲存在您系統上的地點。如果不這樣做,當運行mysqlaccess時,您將遇到一個broken pipe的錯誤。

在所有東西被解包並且安裝以後,您應該初始化並且測試您的分發版。

可以用下列命令啟動MySQL伺服器:

shell> bin/mysqld_safe --user=mysql &

關於mysqld_safe的詳細訊息參見5.1.3節,「mysqld_safe:MySQL伺服器啟動指令」

註釋:MySQL授權資料表中的帳號開始沒有密碼。啟動伺服器後,應當使用2.9節,「安裝後的設置和測試」中的說明來設置密碼。

2.8. 使用原始碼分發版安裝MySQL

安裝原始碼之前,首先檢查我們的二進制是否適合您的平台,是否可以工作。我們做了大量的工作確保我們的二進制用最合適的選項來構建。

要獲得MySQLa 原始碼分發版,參見2.1.3節,「怎樣獲得MySQL」

MySQL原始碼分發版為tar壓縮檔案,檔案名格式為mysql-VERSION.tar.gz,其中 VERSION是版本號,例如5.1.2-alpha

您需要下列工具構造並安裝MySQL原始碼:

·         GNU gunzip解壓縮該分發版。

·         一個適當的tar解包分發版。GNU tar已知可以。一些作業系統中含有預安裝的tar,已知有問題。例如,已知Mac OS X tarSun tar對於長檔案名有問題。在Mac OS X中,您可以使用預安裝的gnutar程式。在其它系統中若tar不完善,您應當首先安裝GNU tar

·         一個能工作的ANSI C++編譯器。gcc> = 2.95.2egcs> = 1.0.2egcs 2.91.66SGI C++SunPro C++是一些已知能工作的編譯器。當使用gcc時,不需要libg++gcc2.7.x有一個問題,使得它可能不能編譯一些完全合法的C++檔案,例如「sql/sql_base.cc」。如果您僅有gcc2.7.x,您必須升級gcc才能編譯MySQL。已知gcc 2.8.1在某些平台上有一些問題,因此如果平台上有新的編譯器,則不要使用gcc 2.8.1

編譯MySQL 3.23.x時,建議使用gcc 2.95.2或更新版。

·         一個優秀的make程式。總是推薦GNU make且有時必須使用。如果您有問題我們推薦試一試GNU make3.75或更新版

如果您使用的gcc版本足夠新,可以識別-fno-exceptions選項,則使用該選項非常重要。否則,您編譯二進制時出現問題。我們建議您同時使用-felide-constructors-fno-rtti選項。當有疑問時,執行下面操作:

CFLAGS="-O3" CXX=gcc CXXFLAGS="-O3 -felide-constructors \
       -fno-exceptions -fno-rtti" ./configure \
       --prefix=/usr/local/mysql --enable-assembler \
       --with-mysqld-ldflags=-all-static

在大多數系統中,可以得到快速、穩定的二進制。

如果您遇到問題,在把問題郵寄到MySQL郵件目錄時,請總是使用mysqlbug,就算問題不是一個問題,mysqlbug收集系統訊息,將有助於其它人解決您的問題。不使用mysqlbug,您將減少得到問題的解決方案的可能性!在解包分發版後,您會在「bin目錄下找到mysqlbug。請參見1.7.1.3節,「如何通報問題和問題」

2.8.1. 原始碼安裝概述

您必須執行的安裝MySQL原始碼分發版的基本命令是:

shell> groupadd mysql
shell> useradd -g mysql mysql
shell> gunzip < mysql-VERSION.tar.gz | tar -xvf -
shell> cd mysql-VERSION
shell> ./configure --prefix=/usr/local/mysql
shell> make
shell> make install
shell> cp support-files/my-medium.cnf /etc/my.cnf
shell> cd /usr/local/mysql
shell> bin/mysql_install_db --user=mysql
shell> chown -R root  .
shell> chown -R mysql var
shell> chgrp -R mysql .
shell> bin/mysqld_safe --user=mysql &

如果從一個原始碼RPM開始,那麼執行如下命令:

shell> rpmbuild --rebuild --clean MySQL-VERSION.src.rpm

這樣您製作一個可以安裝的二進制RPM。對於舊版本的RPM,您可能需要替換用rpm替換命令rpmbuild

註釋:該過程不為任何MySQL帳號設置密碼。完成下面的過程後,根據2.9節,「安裝後的設置和測試」進行安裝後的設置和測試。

以下是安裝MySQL原始碼分發版的更詳細的描述:

1.    mysqld增加一個登錄用戶和組:

2.            shell> groupadd mysql
3.            shell> useradd -g mysql mysql

這些命令將增加MySQL組和 MySQL用戶。不同版本的Unix中,useradd groupadd的語法可能會稍有不同。還可以稱為adduseraddgroup

您可能會將這些用戶和組命名為mysql之外的名稱。如果是這樣,在下面的步驟中替換為相應的名稱。

4.    挑選一個您想解開分發包的目錄,進入該目錄。

5.    2.1.3節,「怎樣獲得MySQL」中列出的站點之一獲得一個分發檔案。

6.    在當前目錄下解包分發版:

7.            shell> gunzip < /path/to/mysql-VERSION.tar.gz | tar xvf -

該命令建立mysql-VERSION 目錄。

使用GNU tar,則不再需要gunzip。您可以用下面的命令來解包和提取分發:

shell> tar zxvf /path/to/mysql-VERSION-OS.tar.gz

8.    進入解包分發版的頂級目錄:

9.            shell> cd  mysql-VERSION

請注意目前必須從頂級目錄配置和構建MySQL。您不能在其它目錄中構建。

10.配置發佈版並且編譯:

11.        shell> ./configure --prefix=/usr/local/mysql
12.        shell> make

當您運行configure時,您可能想要指定一些選項,運行./configure --help得到一個選項列資料表。2.8.2節,「典型配置選項討論一些很有用的選項。

如果configure失敗,您將向MySQL郵件目錄發送包含您認為能幫您解決該問題的包含「config.log」中所有行的郵件,也要包括configure的最後幾行輸出。用mysqlbug指令郵寄錯誤報告。請參見1.7.1.3節,「如何通報問題和問題」

如果編譯失敗,參見2.8.4節,「處理MySQL編譯問題」尋求幫助。

13.安裝分發版:

14.        shell> make install

如果您想要設置一個選項檔案,使用support-files目錄中的一個作為模板。例如:

shell> cp support-files/my-medium.cnf /etc/my.cnf

可能您需要用root用戶運行這些命令。

如果想要配置為支援InnoDB資料表,應當編輯/etc/my.cnf檔案,去掉innodb_...開始選項行前面的#符,並將選項值改為您想要的。請參見4.3.2節,「使用選項檔案」15.2.3節,「InnoDB配置」

15.進入安裝目錄:

16.        shell> cd /usr/local/mysql

17.如果還沒有安裝的MySQL,必須建立MySQL授權資料表:

18.        shell> bin/mysql_install_db --user=mysql

如果用root運行命令,應當使用--user選項。選項的值應與您在第一步為運行伺服器所建立的登錄帳號相同。如果用該用戶登錄來運行命令,可以省略--user選項。

mysql_install_db建立MySQL授權資料表後,需要手動重新啟動伺服器

19.將程式二進制的所有權改為root數據目錄的所有權改為您運行mysqld的用戶。如果位於安裝目錄(/usr/local/mysql)下,命令應為:

20.        shell> chown -R root  .
21.        shell> chown -R mysql var
22.        shell> chgrp -R mysql .

第一個命令將檔案的所有屬性改為root用戶。第二個命令將數據目錄的所有屬性改為mysql用戶。第三個命令將組屬性改為mysql組。

23.如果您喜歡在引導機器時自動啟動MySQL,您可以拷貝support-files/mysql.server檔案到您系統有啟動檔案的地方。更多的訊息可以在support-files/mysql.server指令中和2.9.2.2節,「自動啟動和停止MySQL」中找到。

24.如果安裝了DBIDBD::mysql Perl模塊,可以使用bin/mysql_setpermission指令增加新帳號。關於說明,參見2.13節,「Perl安裝注意事項」

在所有東西被安裝以後,您應當使用該命令初始化並且測試您的分發版:

shell> /usr/local/mysql/bin/mysqld_safe --user=mysql &

如果這個命令提示mysqld daemon ended並馬上失敗,那麼您能在數據目錄中的檔案「hostname'.err」找到一些訊息。

關於mysqld_safe的詳細訊息參見5.1.3節,「mysqld_safe:MySQL伺服器啟動指令」

註釋:MySQL授權資料表中的帳號開始沒有密碼。啟動伺服器後,您應當使用2.9節,「安裝後的設置和測試」中的說明來設置密碼。

2.8.2. 典型配置選項

configure指令給您一個很大的控制權來控制如何配置MySQL原始碼分發版。一般使用configure命令行的選項來進行。您也可以用某些環境變數作用於configure。請參見附錄F:環境變數。要查看configure支援的選擇列資料表,可以運行命令:

shell> ./configure --help
  • 如果只編譯MySQL客戶端庫和客戶端程式而不是伺服器,使用--without-server選項:
  • shell> ./configure --without-server

如果您沒有C++編譯器,則不能編譯mysql(有一個客戶端程式需要C++)。在這種情況下,您可以去掉configure裡面測試C++編譯器的代碼,然後運行帶有 --without-server選項的./configure。編譯步驟步將仍然嘗試構造mysql,但是您可以忽略任何關於「mysql.cc」的警告。(如果make停止,試試make -k告訴它即使出錯繼續剩下的構造步驟)。

·         如果您想要構建嵌入式MySQL (libmysqld.a),您應當使用--with-embedded-server選項。

  • 如果您不想要位於「/usr/local/var」目錄下面的日誌(log)檔案和資料庫,使用類似於下列configure命令的一個:
  • shell>./configure--prefix=/usr/local/mysql
  • shell>./configure--prefix=/usr/local
  •        localstatedir=/usr/local/mysql/data

第一個命令改變安裝前綴以便將所有內容安裝到「/usr/local/mysql」下面而非 預設的「/usr/local」。第二個命令保留預設安裝前綴,但是覆蓋了資料庫目錄預設目錄(通常是「/usr/local/var)並且把它改為/usr/local/mysql/data。編譯完MySQL後,可以通過選項檔案更改這些選項。請參見4.3.2節,「使用選項檔案」

  • 如果您正在使用Unix並且您想要MySQL的套接字位於 預設位置以外的某個地方(通常在目錄「/tmp」或「/var/run」,使用像這樣的configure的命令:
  • shell> ./configure\-- with-unix-socket-
  • path=/usr/local/mysql/tmp/mysql.sock

注意給出的檔案名必須是一個絕對路徑。您還可以在以後使用MySQL選項檔案更改mysql.sock的位置。請參見A.4.5節,「如何保護或更改MySQL套接字檔案/tmp/mysql.sock

  • 如果您想編譯靜態連結程式(例如,製作二進制分發版、獲得更快的速度或與解決與RedHat分發版的一些問題),像這樣運行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

當您使用gcc作為C++編譯器用時,它將不試圖連結libg++libstdc++。即使您安裝了這些庫,這樣也很好,因為過去使用MySQL時,它們的部分版本會出現一些奇怪的問題。

下面列出了一些經常使用的編譯器和環境變數設定值。

o        gcc 2.7.2

o                     CC=gcc CXX=gcc CXXFLAGS="-O3 -felide-constructors"

o        egcs 1.0.3a

o                     CC=gcc CXX=gcc CXXFLAGS="-O3 -felide-constructors \
o                     -fno-exceptions -fno-rtti"

o        gcc 2.95.2

o                     CFLAGS="-O3 -mpentiumpro" CXX=gcc CXXFLAGS="-O3 -mpentiumpro \
o                     -felide-constructors -fno-exceptions -fno-rtti"

o        pgcc 2.90.29 或更新版:

o                     CFLAGS="-O3 -mpentiumpro -mstack-align-double" CXX=gcc \
o                     CXXFLAGS="-O3 -mpentiumpro -mstack-align-double \
o                     -felide-constructors -fno- exceptions -fno-rtti"

在大多數情況,在configure行使用前面列出的選項並加入下面的選項,可以得到合理的最佳化的MySQL二進制:

--prefix=/usr/local/mysql --enable-assembler \
--with-mysqld-ldflags=-all-static

換句話說,對於所有最近的gcc版,整個configure行應為:

CFLAGS="-O3 -mpentiumpro" CXX=gcc CXXFLAGS="-O3 -mpentiumpro \
-felide-constructors -fno- exceptions -fno-rtti" ./ configure \
--prefix=/usr/local/mysql --enable-assembler \
--with-mysqld-ldflags=-all-static

我們在MySQL網址http://www.mysql.com/提供的二進制均已經編譯過並進行了最佳化,對於大多數用戶應當比較完善。請參見2.1.2.5節,「MySQL AB編譯的MySQL二進製版本」。其中有一些配置設定值,可以選用來構建更快的二進制,但是只適用高級用戶。請參見7.5.4節,「編譯和連結怎樣影響MySQL的速度」

如果構造失敗並且產生有關編譯器或連結器的錯誤,不能建立共享庫「libmysqlclient.so.#(#」是一個版本號), 您可以通過為configure指定--disable-shared選項來解決此問題。在這種情況下,configure將不構造一個共享libmysqlclient.so.#庫。

  • 預設地,MySQL使用latin1(cp1252)字元編碼。為了改變 預設設置,使用--with-charset選項:
  • shell> ./configure -- with-charset=CHARSET

CHARSET可以是big5cp1251cp1257czechdanishdec8doseuc_krgb2312gbkgerman1hebrewhp8hungariankoi8_rukoi8_ukrlatin1latin2sjisswe7tis620ujisusa7win1251ukr。請參見5.10.1節,「數據和排序用字元編碼」

可以指定預設校對規則。MySQL預設使用latin1_swedish_ci校對規則。要想更改,使用--with-collation選項:

shell> ./configure --with-collation=COLLATION

要想更改字元編碼和校對規則,要同時使用--with-charset--with-collation選項。 校對規則必須是字元編碼的合法校對規則。(使用SHOW COLLATION語句來確定每個字元編碼使用哪個校對規則)

如果想在伺服器和客戶端之間變換字元,您應該看一下SET OPTION CHARACTER SET命令。請參見13.5.3節,「SET語法」

警告:如果您在建立了任何資料庫資料表之後改變字元編碼,您將必須對每個資料表運行myisamchk -r -q --set-character-set=charset,否則索引可能不正確地排序。(如果安裝了MySQL,建立一些資料表,然後重新配置MySQL使用一個不同的字元編碼並且重新安裝它,這時就可能發生這種情況。)

通過configure選項--with-extra-charsets=LIST,您可以定義在伺服器中再定義哪些字元編碼。LIST 指下面任何一項:

o        空格間隔的一系列字元編碼名

o        complex -,以包括不能動態裝載的所有字元編碼

o        all –,以將所有字元編碼包括進二進制

  • 為了配置MySQL帶有調試代碼,使用--with-debug選項:
  • shell> ./configure --with-debug

這導致包含一個安全的內存分配器,能發現一些錯誤和並提供關於正在發生的事情的輸出。請參見E.1節,「調試MySQL伺服器」

·         如果客戶端程式使用線程,還必須使用--enable-thread-safe-client配置選項來編譯線程安全版的MySQL客戶端庫。將建立一個libmysqlclient_r庫,可以用來連接應用程式線程。請參見25.2.15節,「如何生成線程式客戶端」

·         可以使用--with-big-tables選項構建支援大資料庫資料表的MySQL

該選項使變數用來將資料表行數保存到unsigned long long中而不是unsigned long。結果是允許資料表有大約1.844E+19 ((232)2)行而不是232 (~4.295E+09) 行。在以前,要完成該功能必須手動將-DBIG_TABLES傳遞給編譯器。

屬於特定系統的選項可在本章特定系統的小節裡找到。請參見2.12節,「具體作業系統相關的注意事項」

2.8.3. 從開發原始碼樹安裝

注意:如果您想幫助我們測試新代碼,應當閱讀本節。如果您只想在系統上安裝並運行MySQL,應當使用標準發佈分發版(二進制或原始碼分發版)

要想獲得我們的最新開發原始碼樹,應使用說明:

1.    http://www.bitmover.com/bk-client.shar下載BitKeeper免費客戶端。

2.    Unix上安裝免費客戶端:

3.            shell> sh bk-client.shar
4.            shell> cd bk_client-1.1
5.            shell> make all
6.            shell> PATH=$PWD:$PATH

Windows上的安裝方法:

·         http://cygwin.com下載並安裝Cygwin

·         確保gccmake已經安裝到Cygwin。可以用which gcc which make命令進行測試。如果任何一個沒有安裝,運行 Cygwin安裝包管理器,選擇gccmake安裝。

·         Cygwin中,運行:

·                      shell> sh bk-client.shar
·                      shell> cd bk_client-1.1

然後編輯Makefile並將行s $(CC) $(CFLAGS) -o sfio -lz sfio.c更改為:

$(CC) $(CFLAGS) -o sfio sfio.c -lz

現在運行make命令並設置路徑:

shell> make all
shell> PATH=$PWD:$PATH

7.    安裝BitKeeper免費客戶端後,首先進入工作目錄,然後使用以下命令在本地複製MySQL 5.1

8.            shell> sfioball -r+ bk://mysql.bkbits.net/mysql-5.1 mysql-5.1

一般情況,您不需要自己構建文檔,因為我們已經在http://dev.mysql.com/doc/提供了許多格式。我們每天更新您可以下載的格式(HTMLPDF),因此您沒有必要從MySQLdoc樹中的DocBook XML基本格式來建立。如果您想要複製文檔庫,使用下面的命令:

shell> sfioball -r+ bk://mysql.bkbits.net/mysqldoc mysqldoc

在前面的例子中,在當前目錄的MySQL-5.1/子目錄中設置原始碼樹。

如果您位於防火牆後面,只能初始化HTTP連接,還可以通過HTTP使用BitKeeper

如果需要使用代理伺服器,設置環境變數http_proxy指向代理:

shell> export http_proxy="http://your.proxy.server:8080/"

當複製庫時用http://替換bk//。例如:

shell> sfioball -r+ http://mysql.bkbits.net/mysql-5.1 mysql-5.1

下載原始碼樹可能需要一段時間,取決於連接速度。請耐心等待。

9.    要想更新本地MySQL 5.1庫複製,使用命令:

10.        shell> update bk://mysql.bkbits.net/mysql-5.1

11.您需要GNU makeautoconf 2.58 (或更新版)automake 1.8libtool 1.5m4來運行後面的命令。儘管許多作業系統安裝了make,很可能編譯失敗,出現許多奇怪的問題消息。因此,強烈建議您使用GNU make(有時名為gmake)

幸運的是,大量的作業系統預裝了GNU工具鏈或提供了可安裝軟件包。您可以隨時從下面的地址下載:

·         http://www.gnu.org/software/autoconf/

·         http://www.gnu.org/software/automake/

·         http://www.gnu.org/software/libtool/

·         http://www.gnu.org/software/m4/

·         http://www.gnu.org/software/make/

要想配置MySQL 5.1,您還需要GNU bison 1.75或更新版。舊版本的bison會報告錯誤:

sql_yacc.yy:#####: fatal error: maximum table size (32767) exceeded

註釋:實際上並沒有超出最大資料表空間;這是由舊版本的bison問題造成的該問題。

下面的例子顯示了配置原始碼樹需要的典型命令。第一個cd命令將位置改為樹的頂級目錄;用相應目錄名替換MySQL-5.1

shell> cd mysql-5.1
shell> bk -r edit
shell> aclocal; autoheader
shell> libtoolize --automake --force
shell> automake --force --add-missing; autoconf
shell> (cd innobase; aclocal; autoheader; autoconf; automake)
shell> (cd bdb/dist; sh s_all)
shell> ./configure  # Add your favorite options here
shell> make

對於下面的命令,可以使用BUILD/autorun.sh作為快捷方式:

shell> aclocal; autoheader
shell> libtoolize --automake --force
shell> automake --force --add-missing; autoconf
shell> (cd innobase; aclocal; autoheader; autoconf; automake)
shell> (cd bdb/dist; sh s_all)

使用將目錄改為innobasebdb/dist目錄的命令行來配置InnoDB Berkeley DB (BDB)儲存引擎。如果您不需要InnoDBBDB支援,您可以省略這些命令行。

如果在該階段您遇到一些奇怪的錯誤,請確認您是否已經安裝了 libtool

標準配置指令位於BUILD/子目錄。您會發現使用BUILD/compile-pentium-debug指令比使用前面的外殼命令要方便得多。要想在不同的架構上編譯,可以修改指令,即去掉Pentium相關標誌。

12.構建完成後,運行make install。在產品機器上運行時應注意;該命令會覆蓋您正使用的版本。如果您安裝了另一個MySQL,我們建議您使用 與您的產品伺服器上不同的--prefix--with-tcp-port--unix-socket-path選項值來運行./configure

13.強制運行新安裝和嘗試會破壞新功能。應先運行make test。請參見27.1.2節,「MySQL測試套件」

14.如果您已經進入make階段而分發版不編譯,請報告給我們的http://bugs.mysql.com/中的問題資料庫。如果您已經安裝了GNU工具的最新版本,如果視圖處理配置檔案時出錯,請報告給我們。但是,如果您執行aclocal並且遇到command not found error或類似問題,不要報告給我們。而是應確保安裝了所有必要的工具,並且PATH變數設置正確,保證外殼命令可以找到它們。

15.複製完庫(sfioball)獲得原始碼樹後,您應當定期更新庫(update)

16.您可以檢查樹的更改史,瀏覽原始碼樹中的BK/ ChangeLog檔案並查看ChangeSet描述找到所有不同點。要想檢查特殊的更改集,必須使用sfioball命令提取原始碼樹的兩次不同的修訂,然後使用外部diff命令來比較。如果您看到有疑問的奇怪的不同之處或代碼,一定要向MySQL internals郵件列資料表發送郵件。請參見1.7.1.1節,「The MySQL郵件列資料表」。並且,如果您有更好的思想,請向上述地址發送郵件。

17.BitKeeper免費客戶端預裝了原始碼。免費客戶端可用的唯一文檔是原始碼本身。

您還可以線上瀏覽更改集、註釋和原始碼。要想瀏覽MySQL 5.1的相關訊息,請到http://mysql.bkbits.net:8080/mysql-5.1

2.8.4. 處理MySQL編譯問題

所有MySQL程式在SolarisLinux上使用gcc編譯並且沒有任何警告。在其它系統上,由於系統包含檔案的差別可能會發生警告。對於使用MIT-pthreads時發生的警告。請參見2.8.5節,「MIT-pthreads注意事項」。其它問題,檢查下面的資料表。

許多問題的解決方案涉及重新配置。如果您確實需要重新配置,注意下列事項:

  • 如果configure在它已經被運行了以後運行,它可以使用先前收集的訊息。這個訊息儲存在「config.cache」裡面。當configure啟動時,它尋找該檔案而且如果它存在,假定訊息仍然是正確的,讀入它的內容。當您重新配置時,該假設無效。
  • 每次運行configure的時候,必須運行make再重新編譯。然而, 您可能想要把先前構造的老的目標檔案刪除,因為它們使用不同的配置選項編譯而成。

為了防止使用舊的配置訊息或目標檔案,重新運行configure前運行這些命令:

shell> rm  config.cache

shell> make clean

另外,您可以運行make distclean

下資料表描述了一些最常發生的編譯MySQL的問題:

  • 如果在編譯「sql_yacc.cc」時,遇到如下錯誤,可能是儲存器或交換空間溢出:
·                Internal compiler error: program cc1plus got fatal signal 11
·                Out of virtual memory
·                Virtual memory exhausted

該問題是gcc要求大量的內存編譯帶有嵌入函數(inline function)的「sql_yacc.cc」。試試以--with-low-memory選項運行configure

shell> ./configure -- with-low-memory

如果您正在使用gcc,該選項使得將-fno-inline加到編譯行,如果您正使用其它的編譯器,則加入-O0。您應該試一試--with-low-memory選項,即使您有特別多的儲存器和交換空間,而您認為不可能運行得溢出。這個問題甚至會在很慷慨的硬件配置的系統上出現,通常用--with-low-memory選項修正它。

  • 預設情況,configure選則c++作為編譯器並用-lg++選項的GNU c++連結。如果您正在使用gcc,這個特性在配置期間導致如下問題:

·                configure: error: installation or configuration problem:

·                C++ compiler cannot create executables.

也可能在編譯期間看到g++libg++libstdc++相關的問題。

這些問題的一個原因是您可能沒有g++,或可能有g++但無libg++libstdc++。看一下「config.log」檔案。它應該包含c++編譯器不能工作的準確原因!為了解決這些問題,可以使用gcc作為C++編譯器。試試設置環境變數CXX"gcc -O3"。例如:

shell> CXX="gcc -O3" ./configure

可以工作,因為gccg++一樣編譯C++原始碼,但 預設地它不連結libg++libstdc++

解決這些問題的其它方法當然是安裝g++libg++libstdc++。然而,我們建議不要在MySQL中使用libg++libstdc++因為只會增加mysqld二進制空間而不會帶來任何好處。部分版本的庫在過去曾經給用戶帶來一些奇怪的問題。

·         如果您的編譯以下面任何錯誤而失敗,必須升級make版本到GNUmake

·                making all in mit-pthreads
·                make: Fatal error in reader: Makefile, line 18:
·                Badly formed macro assignment

或:

make: file `Makefile' line 18: Must be a separator (:

或:

pthread.h: No such file or directory

已知SolarisFreeBSDmake程式有問題。

已知GNU make 3.75能工作。

·         如果您想要定義CC++編譯器所使用的標誌,把標誌加到CFLAGSCXXFLAGS環境變數中即可。也可以使用CCCXX來指定編譯器名字。例如:

·                shell> CC=gcc
·                shell> CFLAGS=-O3
·                shell> CXX=gcc
·                shell> CXXFLAGS=-O3
·                shell> export CC CFLAGS CXX CXXFLAGS

對於已經知道在不同系統上有用的標誌定義列資料表,參見2.1.2.5節,「MySQL AB編譯的MySQL二進製版本」

·         如果您遇到象如下的一條錯誤消息,則需要升級gcc編譯器:

·                client/libmysql.c:273: parse error before `__attribute__'

gcc2.8.1已知可以工作,但是我們推薦使用gcc 2.95.2egcs 1.0.3a

·         如果編譯mysqld時顯示範如下面的那些錯誤, configure沒有正確地檢測傳到accept()getsockname()getpeername()最後參數的類型:

·                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
  • 更改XXXsize_tint,取決於您的作業系統。(注意:每次運行configure都必須這樣做,因為configure重新生成「config.h」)
  • sql_yacc.cc」檔案由「sql_yacc.yy」生成。通常構造過程不需要創造「sql_yacc.cc」,因為MySQL有一個已經生成的拷貝,然而,如果您確實需要再建立它,可能會碰到這個錯誤:

·                "sql_yacc.yy", line xxx fatal: default action causes potential...

這是一個yacc版本不完善的跡象。您可能需要安裝bisonGNUyacc)並使用它。

·         Debian Linux 3.0, 如果您編譯的MySQL 5.1要支援Berkeley DB,需要安裝gawk代替預設的mawk

·         如果您需要調試mysqldMySQL客戶端,運行configure,使用--with-debug選項,然後重新編譯並且將客戶端程式連結到新的客戶端庫。請參見E.2節,「調試MySQL客戶端」

·         如果您在Linux(例如,SuSE Linux 8.1Red Hat Linux 7.3)下遇到類似下面的編譯錯誤:

·                libmysql.c:1329: warning: passing arg 5 of `gethostbyname_r' from
·                incompatible pointer type
·                libmysql.c:1329: too few arguments to function `gethostbyname_r'
·                libmysql.c:1329: warning: assignment makes pointer from integer
·                without a cast
·                make[2]: *** [libmysql.lo] Error 1

預設情況,configure指令試圖使用g++ GNU C++編譯器來確定正確的參數。如果未安裝g++將會產生錯誤的結果。有兩種方法可以解決該問題:

o        確保安裝了GNU C++ g++。在某些Linux分發版上,需要安裝的軟件包叫做gpp;在其它分發版上名為gcc-c++

o        使用gcc作為C++ 編譯器,將CXX環境變數設置為gcc

o                     export CXX="gcc"

請注意之後需要再次運行configure

2.8.5. MIT-pthreads注意事項

這節描述使用MIT-pthreads時所涉及的一些問題。

Linux上,應該不使用MIT-pthreads而是安裝LinuxThreads!參見2.12.1節,「Linux注意事項」

如果您的系統不提供原生的線程支援,將需要使用MIT-pthreads包構造MySQL。這包括大多數FreeBSD系統、SunOS 4.xSolaris 2.4和更早版本及其它,參見2.1.1節,「MySQL支援的作業系統」

MIT-pthreads不是MySQL 5.1原始碼分發版的一部分。如果您需要該安裝包,需要單獨從http://www.mysql.com/Downloads/Contrib/pthreads-1_60_beta6-mysql.tar.gz下載。

下載後,將源檔案提取到MySQL原始碼目錄的頂級目錄。將建立新的mit-pthreads子目錄。

  • 在大多數系統上,您能通過使用configure並用--with-mit-threads選項來強迫運行MIT-pthreads
  • shell> ./configure -- with-mit-threads

當使用MIT-pthreads時,不支援在一個非原始碼目錄構造,因為我們想要使我們對代碼的改變減到最小。

·         決定是否使用MIT-pthreads的檢查僅在處理伺服器代碼的配置過程期間發生。如果已經用--without-server配置了分發版並只構造客戶端代碼,客戶端將不知道MIT-pthreads是否正在被使用並且是否使用 預設的Unix套接字連接。因為在某些平台上Unix套接字檔案不能在MIT-pthreads下面工作,這意味著當您運行客戶端程式時,您需要使用-h--host

·         當使用MIT-pthreads編譯MySQL時,因為性能原因,系統鎖定 預設為禁止使用。您可以用--external-locking選項告訴伺服器使用系統鎖定。只是在相同數據檔案上運行兩個MySQL伺服器時采需要,因此不推薦。

  • 有時pthreadbind()命令不能綁定一個套接字但沒有任何錯誤消息(至少在Solaris),結果是所有到伺服器的連接均失敗。例如:
  • shell> mysqladmin version
  • mysqladmin: connect to server at '' failed;
  • error: 'Can't connect to mysql server on localhost (146)'

解決它的方法是殺死mysqld伺服器並且重啟它。這只有當我們強迫伺服器停止並馬上進行重啟時在發生。

  • 使用MIT-pthreads,不能用SIGINTbreak)中斷sleep()系統使用。這只有在運行mysqladmin --sleep時才能注意到。在中斷起作用並且程序停止之前必須等待sleep()終止。
  • 當連結時,您可能會收到這樣的警告消息(至少在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(...)'
  • 我們還沒有讓readlineMIT-pthreads上工作。(這不需要,但是可能某些人會感興趣。)

2.8.6. 在Windows下從原始碼安裝MySQL

下面的說明描述了如何在Windows下從5.1版原始碼構建MySQL二進制。說明用於從包含最新開發原始碼的標準原始碼分發版或從BitKeeper樹來構建二進制。

註釋:本文檔中的說明嚴格限於在Windows下從最新原始碼分發版或從BitKeeper樹來測試MySQL的用戶。作為產品使用時,MySQL AB不建議使用您自己從原始碼構建的MySQL伺服器。一般情況,最好使用MySQL AB預編譯的對性能進行最佳化的適用WindowsMySQL二進制分發版。安裝二進制分發版的說明參見2.3節,「在Windows上安裝MySQL」

要想在Windows中從原始碼構建MySQLWindows系統中應有下面的編譯器和資源:

·         Visual Studio 2003編譯器系統(VC++ 7.0)

·         35GB的硬盤空間。

·         Windows 2000或更高版本。

確切的系統需求見:http://msdn.microsoft.com/vstudio/productinfo/sysreqs/default.aspx

還需要適用WindowsMySQL原始碼分發版。有兩種方法可以獲得MySQL 5.1 原始碼分發版:

1.    獲得MySQL AB打包的原始碼分發版軟件包。預打包的原始碼分發版可從 http://dev.mysql.com/downloads/獲得。

2.    您可以用最新BitKeeper開發原始碼樹構建原始碼分發版。如果您計劃構建,必須在Unix系統中建立安裝軟件包,並將它轉移到Windows系統。(這樣操作的理由是部分配置和構建步驟需要只能在Unix中工作的工具)。BitKeeper方法需要:

·         運行Unix或類似Unix的系統,例如Linux

·         該系統上安裝的BitKeeper 3.0。關於如何下載和安裝BitKeeper的說明參見2.8.3節,「從開發原始碼樹安裝」

如果您使用Windows原始碼分發版,您可以直接跳到2.8.6.1節,「使用VC++構建MySQL」。要想從BitKeeper樹構建,繼續2.8.6.2節,「從最新的開發原始碼建立Windows原始碼安裝包」

如果您發現某些組件不能按預料的工作,或者您有好的建議可以改進目前的在Windows中的構建過程,請向win32郵件列資料表發送消息。請參見1.7.1.1節,「The MySQL郵件列資料表」

2.8.6.1. 使用VC++構建MySQL

註釋:MySQL 4.1和以上版本的VC++工作區檔案與Microsoft Visual Studio 2003版本兼容,MySQL AB人員已經在每個版本之前進行了測試。

按照以下步驟構建MySQL

1.    建立工作目錄(例如,C\ workdir)

2.    使用WinZip或其它可以讀取.zip檔案的Windows工具將原始碼分發版解壓縮到上述目錄。

3.    啟動Visual Studio

4.    File菜單,選擇Open Workspace

5.    打開工作目錄中的MySQL.dsw工作區。

6.    Build 菜單,選擇Set Active Configuration菜單。

7.    點擊窗口選擇mysqld - Win32 Debug並點擊OK

8.    F7開始構建調試伺服器、庫和客戶端應用程式。

9.    按同樣方法編譯發佈版本。

10.程式和庫的調試版本位於client_debuglib_debug目錄。程式和庫的發佈版本位於client_releaselib_release目錄。請注意如果您想要構建調試版本和發佈版本,可以從Build菜單選擇Build All選項。

11.測試伺服器。使用前面的說明構建伺服器時,預設MySQL基本目錄和數據目錄位於C:\mysqlC:\mysql\data。如果您想要使用原始碼樹根目錄和數據目錄作為基本目錄和數據目錄來測試伺服器,需要告訴伺服器其路徑名。可以在命令行用--basedir--datadir選項來完成,或將相應選項放入選項檔案(Windows目錄或C\my.cnf中的my.ini檔案)。如果想要使用的數據目錄在其它地方,可以指定其路徑名。

12.根據您想要使用的伺服器,從client_releaseclient_debug目錄啟動伺服器。常用伺服器啟動說明見2.3節,「在Windows上安裝MySQL」。如果想要使用其它基本目錄或數據目錄,需要相應地更改指令。

13.當伺服器根據您的配置獨立運行或作為服務時,嘗試從client_releaseclient_debug目錄中的MySQL交互式命令行實用工具連接它。

如果構建的程式工作正常,停止伺服器。按照以下步驟安裝MySQL

1.    建立安裝MySQL的目錄。例如,要安裝到C\mysql,使用命令:

2.            C:\> mkdir C:\mysql
3.            C:\> mkdir C:\mysql\bin
4.            C:\> mkdir C:\mysql\data
5.            C:\> mkdir C:\mysql\share
6.            C:\> mkdir C:\mysql\scripts

如果想要編譯其它客戶端程式並連接到MySQL,您還需要建立幾個目錄:

C\> mkdir C\mysql\include
C\> mkdir C\mysql\lib
C\> mkdir C\mysql\lib\debug
C\> mkdir C\mysql\lib\opt

如果想要對MySQL進行基準檢查,建立目錄:

C\> mkdir C\mysql\sql-bench

基準檢查需要Perl支援。請參見2.13節,「Perl安裝注意事項」

7.    將下面的目錄從workdir目錄複製到C\mysql目錄:

8.            C:\> cd \workdir
9.            C:\workdir> copy client_release\*.exe C:\mysql\bin
10.        C:\workdir> copy client_debug\mysqld.exe C:\mysql\bin\mysqld-debug.exe
11.        C:\workdir> xcopy scripts\*.* C:\mysql\scripts /E
12.        C:\workdir> xcopy share\*.* C:\mysql\share /E

如果想要編譯其它客戶端程式並連接到MySQL,還應當複製幾個庫和頭檔案:

C:\workdir> copy lib_debug\mysqlclient.lib C:\mysql\lib\debug
C:\workdir> copy lib_debug\libmysql.* C:\mysql\lib\debug
C:\workdir> copy lib_debug\zlib.* C:\mysql\lib\debug
C:\workdir> copy lib_release\mysqlclient.lib C:\mysql\lib\opt
C:\workdir> copy lib_release\libmysql.* C:\mysql\lib\opt
C:\workdir> copy lib_release\zlib.* C:\mysql\lib\opt
C:\workdir> copy include\*.h C:\mysql\include
C:\workdir> copy libmysql\libmysql.def C:\mysql\include

如果您想要對MySQL進行基準測試,您還應當:

C:\workdir> xcopy sql-bench\*.* C:\mysql\bench /E

按照二進制Windows分發版相同的方法設置並啟動伺服器。請參見2.3節,「在Windows上安裝MySQL」

2.8.6.2. 從最新的開發原始碼建立Windows原始碼安裝包

要想從當前的BitKeeper原始碼樹建立Windows原始碼安裝包,使用下面的說明。請注意必須在運行Unix或類Unix作業系統的系統上執行該過程。例如,已知該過程在Linux上工作得很好。

1.    複製MySQL 5.1BitKeeper原始碼樹。關於如何複製原始碼樹的詳細訊息,相關說明參見2.8.3節,「從開發原始碼樹安裝」

2.    配置和構建分發版,得到可工作的伺服器二進制。實現的一個方法是在原始碼樹頂級目錄運行下面的命令:

3.            shell> ./BUILD/compile-pentium-max

4.    確保構建過程成功完成後,從原始碼樹頂級目錄運行下面的實用工具指令:

5.            shell> ./scripts/make_win_src_distribution

該指令建立在Windows 系統中使用的原始碼安裝包。可以根據您的需求為指令提供不同的選項。它接受下面的選項:

·         --help

顯示幫助消息。

·         --debug

打印關於指令操作的訊息,不建立包。

·         --tmp

指定臨時位置。

·         --suffix

安裝軟件包後綴名。

·         --dirname

複製檔案的目錄名(媒介之間)

·         --silent

不打印正處理檔案的詳細列資料表。

·         --tar

建立tar.gz安裝軟件包而不是.zip安裝軟件包。

預設情況,make_win_src_distribution建立Zip-格式的檔案,檔案名為mysql-VERSION-win-src.zip,其中VERSION代資料表MySQL原始碼樹的版本。

6.    將建立的Windows原始碼安裝包複製或上載到Windows機器上。要想編譯,使用2.8.6.1節,「使用VC++構建MySQL」中的說明。

2.8.7. 在Windows下編譯MySQL客戶端

在原始碼檔案中,應當在MySQL.h之前包括my_global.h

#include <my_global.h>
#include <mysql.h>

my_global.h包括您在Windows中編譯程式所需要的Windows兼容檔案(例如 windows.h)

可以將代碼連接到動態libmysql.lib庫,它只是一個包裝器以便根據需要裝載libmysql.dll,或連接靜態mysqlclient.lib庫。

MySQL客戶端庫編譯為線程庫,因此您應當將代碼編譯為多線程。

2.9. 安裝後的設置和測試

安裝完MySQL後,有一些問題您應當處理。例如,在Unix中,您應當初始化數據目錄並建立MySQL授權資料表。對於所有平台,一個重要安全問題是 授權資料表中的初始帳號沒有密碼。您應當指定密碼以防止未授權訪問MySQL伺服器。您可以建立時區資料表以識別命名的時區。(目前,只在Unix上裝了這些資料表。不久將在Windows中解決該問題)

下面章節包括適用Windows系統和Unix系統的安裝後的過程。另一節,2.9.2.3節,「啟動MySQL伺服器以及其故障診斷和排除」,適用所有平台;它描述了啟動伺服器時遇到問題時如何解決。2.9.3節,「使初始MySQL帳號安全」也適用所有平台。您應當按照說明確保您已經正確地為您的MySQL帳號指定密碼來保護其安全。

如果您準備建立其它用戶帳號,您可以在5.7節,「MySQL訪問權限系統」5.8節,「MySQL用戶帳號管理」找到關於MySQL訪問控制系統和帳號管理的訊息。

2.9.1. Windows下安裝後的過程

Windows中,不需要建立數據目錄和授權資料表。MySQL Windows分發版包括在數據目錄下的MySQL資料庫中的一套預初始化的帳號的 授權資料表。不要運行Unix中使用的mysql_install_db指令。但是,如果您沒有使用Windows Installation Wizard(安裝幫助)來安裝MySQL,應當為帳號指定密碼。請參見2.3.4.1節,「前言」。在2.9.3節,「使初始MySQL帳號安全」

設置密碼前,您可能想要運行一些客戶端程式來確保您能夠連接伺服器,並且操作正確。確保伺服器在運行(參見2.3.10節,「首次啟動伺服器」),然後發出下面的命令來驗證您可以從伺服器獲取訊息。輸出應當類似於:

C:\> C:\mysql\bin\mysqlshow
+-----------+
| Databases |
+-----------+
| mysql     |
| test      |
+-----------+
 
C:\> C:\mysql\bin\mysqlshow mysql
Database: mysql
+--------------+
|    Tables    |
+--------------+
| columns_priv |
| db           |
| func         |
| host         |
| tables_priv  |
| user         |
+--------------+
 
C:\> C:\mysql\bin\mysql -e "SELECT Host,Db,User FROM db" mysql
+------+-------+------+
| host | db    | user |
+------+-------+------+
| %    | test% |      |
+------+-------+------+

如果您正運行支援服務的Windows版本,您想讓MySQL伺服器在Windows啟動時自動運行,參見2.3.12節,「以Windows服務方式啟動MySQL」

2.9.2. Unix下安裝後的過程

Unix上安裝MySQL後,需要初始化 授權資料表、啟動伺服器,並確保伺服器工作正常。您還要讓伺服器隨系統的啟動和停止自動啟動和停止。應當為授權資料表中的帳號指定密碼。

Unix中,由mysql_install_db設置 授權資料表。在某些安裝中,該程式自動運行:

·         如果您使用RPM分發版在Linux上安裝MySQL,伺服器RPM運行mysql_install_db

·         如果您使用PKG分發版在Mac OS X上安裝MySQL,安裝器運行mysql_install_db

否則,您需要自己運行mysql_install_db

下面的過程描述了如何初始化授權資料表 (如果還沒有初始化)並啟動伺服器。還推薦了一些您可以用來測試伺服器是否可以訪問以及是否工作正確的命令。關於自動啟動和停止伺服器的訊息,參見2.9.2.2節,「自動啟動和停止MySQL」

您完成過程並讓伺服器運行後,您應當為mysql_install_db建立的帳號指定密碼。2.9.3節,「使初始MySQL帳號安全」中列出了相關說明。

在本節的例子中,伺服器用MySQL登錄帳號的用戶ID運行。假定存在這樣的帳號。如果不存在,要麼建立帳號,或用其它已有的用來運行伺服器的登錄帳號來替代。

1.    進入MySQL的頂級安裝目錄,此處為BASEDIR

2.            shell> cd BASEDIR

BASEDIR可能為/usr/local/mysql /usr/local。以下步驟假定您位於該目錄。

3.    根據需要,運行mysql_install_db 程式設置含有確定如何讓用戶連接伺服器的權限的初始MySQL授權資料表。如果您使用的分發版類型不能運行程式,您需要執行該步驟。

典型,只有首次安裝MySQL時,才需要運行mysql_install_db,因此如果您升級已有的安裝您可以跳過該步驟,但mysql_install_db不會覆蓋已有的 授權資料表,因此可以在任何環境下安全運行。

要想初始化授權資料表,根據mysql_install_db是位於bin還是scripts目錄下,使用下面的一個命令:

shell> bin/mysql_install_db --user=mysql
shell> scripts/mysql_install_db --user=mysql

mysql_install_db指令建立數據目錄、擁有所有資料庫權限的mysql資料庫和可以用來測試MySQLtest資料庫。指令為root帳號和匿名用戶帳號建立 授權資料表條目。帳號一開始沒有密碼。2.9.3節,「使初始MySQL帳號安全」中描述了初始權限。簡單說,這些權限允許MySQL root用戶執行任何操作,允許任何人使用test名建立或使用資料庫或用test_啟動。

一定要確保由mysql登錄帳號擁有資料庫目錄和檔案,以便在以後運行時 伺服器具有讀、寫訪問權限。為此,如果您用root用戶運行mysql_install_db,應當使用--user選項。否則,當以mysql登錄時,應當執行指令,您可以省略命令中的--user選項。

mysql_install_dbmysql資料庫中建立幾個資料表,包括userdbhosttables_privcolumns_privfunc以及其它。5.7節,「MySQL訪問權限系統」中有完整的列資料表和描述。

如果您不想要test資料庫,啟動伺服器後,可以用mysqladmin -u root drop test卸掉。

如果有mysql_install_db相關問題,參見2.9.2.1節,「與運行mysql_install_db有關的問題

有一些選擇運行mysql_install_db指令,正如MySQL分發版中所提供的:

·         如果想讓初始權限與標準預設值不同,您可以在運行前修改mysql_install_db。然而,最好是在設置 授權資料表後使用GRANTREVOKE來更改權限。換句話說,您可以運行mysql_install_db,然後通過MySQL root用戶使用mysql -u rootMySQL來連接伺服器,以便發出GRANTREVOKE命令。

如果您想要在幾個機器上用相同的權限安裝MySQL,可以將GRANTREVOKE語句放入一個檔案中,以指令方式執行檔案,運行mysql_install_db之後使用mysql。例如:

shell> bin/ mysql_install_db --user=mysql
shell> bin/mysql -u root < your_script_file
 

這樣,您就可以避免在每台機器上手動發出命令。

·         完全可以重新建立授權資料表。如果您剛剛知道如何使用GRANTREVOKE並且運行mysql_install_db 之後進行了許多修改,想要關閉資料表重新啟動,您可能想要這樣操作。

要想重新建立授權資料表,從含有MySQL資料庫的目錄中移走所有 .frm.MYI.MYD檔案。(這是數據目錄下面的mysql目錄,當您運行mysqld --help 時,列為datadir)。然後再次運行mysql_install_db 指令。

·         可以使用--skip-grant-tables選項手動啟動mysqld,並使用mysql自己增加權限訊息:

·                      shell> bin/mysqld_safe --user=mysql --skip-grant-tables &
·                      shell> bin/mysql mysql

手動從mysql執行mysql_install_db中的SQL命令。確保後面鑰運行mysqladmin flush-privilegesmysqladmin reload,讓伺服器重載授權資料表。

請注意不使用mysql_install_db,不僅需要手動安裝授權資料表,還需要先建立。

4.    啟動MySQL伺服器:

5.                     shell> bin/mysqld_safe --user=mysql &

一定要讓MySQL伺服器使用非權限(non-root) 登錄帳號運行。為此,如果您以系統root運行mysql_safe,應當使用--user選項。否則,您應當用mysql登錄到系統來執行指令,這樣可以省略命令中的--user選項。

A.3.2節,「如何以普通用戶身份運行MySQL」中給出了非特權用戶運行MySQL的說明。

如果在執行該步前您忘記了建立授權資料表,當您啟動伺服器時,在錯誤日誌檔案中將出現下面的消息:

mysqld: Can't find file: 'host.frm'

如果啟動伺服器時遇到其它問題,查閱2.9.2.3節,「啟動MySQL伺服器以及其故障診斷和排除」

6.    使用mysqladmin驗證伺服器在運行中。以下命令提供了簡單的測試,可檢查伺服器是否已經啟動並能響應連接:

7.            shell> bin/mysqladmin version
8.            shell> bin/mysqladmin variables

 mysqladmin version的輸出根據平台和MySQL版本的不同而稍有變化,但是應當類似於:

shell> bin/mysqladmin version
mysqladmin  Ver 8.41 Distrib 5.1.2-alpha, for pc-linux-gnu on i686
Copyright (C) 2000 MySQL AB & MySQL Finland AB & TCX DataKonsult AB
This software comes with ABSOLUTELY NO WARRANTY. This is free software,
and you are welcome to modify and redistribute it under the GPL license
 
Server version          5.1.2-alpha-Max
Protocol version        10
Connection              Localhost via UNIX socket
UNIX socket             /var/lib/mysql/mysql.sock
Uptime:                 14 days 5 hours 5 min 21 sec
 
Threads: 1  Questions: 366  Slow queries: 0  
Opens: 0  Flush tables: 1  Open tables: 19  
Queries per second avg: 0.000
 

要想看還可以怎樣使用mysqladmin,用-- help選項使用它。

9.    驗證可以關閉伺服器:

10.        shell> bin/mysqladmin -u root shutdown

11.驗證是否可以重啟伺服器。可以直接使用mysqld_safe或使用mysqld。例如:

12.        shell> bin/mysqld_safe --user=mysql --log &

如果mysqld_safe失敗,參見2.9.2.3節,「啟動MySQL伺服器以及其故障診斷和排除」

13.進行一些簡單的測試,驗證您可以從伺服器查詢訊息。輸出應當類似於:

14.        shell> bin/mysqlshow
15.        +-----------+
16.        | Databases |
17.        +-----------+
18.        | mysql     |
19.        | test      |
20.        +-----------+
21.         
22.        shell> bin/mysqlshow mysql
23.        Database: mysql
24.        +---------------------------+
25.        |          Tables           |
26.        +---------------------------+
27.        | columns_priv              |
28.        | db                        |
29.        | func                      |
30.        | help_category             |
31.        | help_keyword              |
32.        | help_relation             |
33.        | help_topic                |
34.        | host                      |
35.        | proc                      |
36.        | procs_priv                |
37.        | tables_priv               |
38.        | time_zone                 |
39.        | time_zone_leap_second     |
40.        | time_zone_name            |
41.        | time_zone_transition      |
42.        | time_zone_transition_type |
43.        | user                      |
44.        +---------------------------+
45.         
46.        shell> bin/mysql -e "SELECT Host,Db,User FROM db" mysql
47.        +------+--------+------+
48.        | host | db     | user |
49.        +------+--------+------+
50.        | %    | test   |      |
51.        | %    | test_% |      |
52.        +------+--------+------+

53.sql-bench目錄(MySQL安裝目錄下)中有一個基準套件,可以用來比較MySQL在不同平台上的執行情況。基準套件在Perl中編寫。它使用Perl DBI模塊來為各種資料庫提供一個與資料庫無關的接口,並且還需要其它Perl模塊來運行基準套件。必須安裝以下模塊:

54.        DBI
55.        DBD::mysql
56.        Data::Dumper
57.        Data::ShowTable

可以從CPAN(http://www.cpan.org/)獲得這些模塊。請參見2.13.1節,「在Unix中安裝Perl」

 sql-bench/Results目錄包含了在不同資料庫和平台上的各種運行結果。要想進行測試,執行命令:

shell> cd sql-bench
shell> perl run-all-tests

如果沒有sql-bench目錄,您可能使用RPM檔案安裝了MySQL,沒有使用原始碼RPM(原始碼RPM包括sql-bench benchmark目錄)此時,必須先安裝基準套件後才能使用。有一個單獨的mysql-bench-VERSION-i386.rpm基準RPM檔案,其中包含了基準代碼和數據。

如果您有原始碼分發版,其tests子目錄中也有一些測試可供運行。例如,要運行auto_increment.tst,從原始碼分發版的頂級目錄執行該命令:

shell> mysql -vvf test < ./tests/auto_increment.tst

期望的結果被顯示在 ./tests/auto_increment.res檔案中。

58.至此,您應當可以運行伺服器了。然而,初始MySQL帳號均沒有密碼,因此應當使用2.9.3節,「使初始MySQL帳號安全」中的說明來指定密碼。

MySQL 5.1安裝過程在MySQL資料庫中建立時區資料表。但是,必須手動裝載資料表。相關說明參見5.10.8節,「MySQL伺服器時區支援」

2.9.2.1. 與運行mysql_install_db有關的問題

mysql_install_db 指令的目的是生成新的MySQL授權資料表。它不覆蓋已有的MySQL授權資料表,並且它不影響任何其它數據。

如果您想要重新建立授權資料表,首先停止mysqld伺服器(如果它正運行)。然後重新命名數據目錄下的MySQL目錄並保存,然後運行mysql_install_db。例如:

shell> mv mysql-data-directory/mysql mysql-data-directory/mysql-old
shell> mysql_install_db --user=mysql

本節列出了運行mysql_install_db時您可能遇到的問題:

·         mysql_install_db fails to install the grant tables

您會發現mysql_install_db不能安裝 授權資料表,顯示下面的消息後終止:

Starting mysqld daemon with databases from XXXXXX
mysqld ended

在這種情況下,您應該很小心地檢驗日誌檔案!日誌檔案應該位於目錄XXXXXX,用錯誤消息命名,並且應該指出為什麼mysqld沒啟動。如果您不理解發生的事情,郵寄一份錯誤報告,包含日誌檔案!參見1.7.1.3節,「如何通報問題和問題」

·         已經有一個amysqld程序在運行

資料表示伺服器在運行,這種情況下可能已經建立了授權資料表。如果如此,則不再需要運行mysql_install_db,因為只需要運行一次(當您首次安裝MySQL)

·         當一個伺服器正運行時,安裝第二個伺服器不工作

這只有在當您已經有已存在的MySQL安裝但是想要把新安裝放在一個不同的地方時才會發生。例如,您可能已經有了一個產品安裝,但為了測試想要同時運行2個安裝。通常當您試著運行第二個伺服器時,發生的問題是它試圖和第一個使用同樣的套接字和端口。在這種情況下,您將遇到錯誤消息:

Can't start server: Bind on TCP/IP port:
Address already in use
Can't start server: Bind on unix socket...

關於設置多個伺服器的說明,參見5.12節,「在同一台機器上運行多個MySQL伺服器」

·         您沒有 /tmp 的寫權限

如果您沒有寫權限在預設位置(/tmp)建立一個Unix套接字檔案,或沒有在「/tmp建立臨時檔案的授權,在運行mysql_install_dbmysqld伺服器時,您將遇到一個錯誤。

您可以在開始mysql_install_dbmysqld之前執行以下命令指定一個不同的Unix套接字檔案位置和臨時目錄:

shell> TMPDIR=/some_tmp_dir/
shell> MYSQL_UNIX_PORT=/some_tmp_dir/mysql.sock
shell> export TMPDIR MYSQL_UNIX_PORT

some_tmp_dir應該是您有寫授權的某個目錄的全路徑。

然後,您應當能夠用這些命令運行mysql_install_db並啟動伺服器:

shell> bin/mysql_install_db --user=mysql
shell> bin/mysqld_safe --user=mysql &

如果mysql_install_db位於scripts目錄下,首先修改命令scripts/mysql_install_db

參見A.4.5節,「如何保護或更改MySQL套接字檔案/tmp/mysql.sock。請參見附錄F:環境變數

2.9.2.2. 自動啟動和停止MySQL

通常您可以用以下方法啟動mysqld伺服器:

·         直接使用mysqld。該方法適合任何平台。

·         作為Windows服務運行MySQL伺服器。可以在支援服務的Windows版本(例如 NT2000XP2003)上實現。可以將服務設置為在Windows 啟動時自動啟動伺服器,或根據需要啟動的手動服務。相關說明參見2.3.12節,「以Windows服務方式啟動MySQL」

·         使用mysqld_safe,可以為mysqld確定正確的選項然後使用這些選項來運行。該指令適用於基於BSD Unix的系統。請參見5.1.3節,「mysqld_safe:MySQL伺服器啟動指令」

·         使用mysql.server。該指令主要用於使用系統V-style運行目錄的系統的啟動和關閉,它通常安裝到mysql下。mysql.server指令使用mysqld_safe來啟動伺服器。請參見5.1.4節,「mysql.server:MySQL伺服器啟動指令」

·         您可以在Mac OS X上安裝一個單獨的MySQL Startup Item安裝包來使系統啟動時自動啟動MySQLStartup Item使用mysql.server來啟動伺服器。詳細介紹參見 2.5節,「在Mac OS X上安裝MySQL」

mysql.servermysqld_safe指令和Mac OS X Startup Item可以用來手動啟動伺服器,或自動啟動系統。mysql.serverStartup Item還可以用來停止伺服器。

mysql.server指令可以被用來啟動或停止伺服器,通過用startstop參數使用它:

shell> mysql.server start
shell> mysql.server stop

mysql.server啟動伺服器之前,它把目錄改變到MySQL安裝目錄,然後使用safe_mysqld。如果您想要作為一些特定的用戶運行伺服器,在/etc/my.cnf選項檔案的[mysqld]組增加相應user選項,如本節後面所示。(如果您有在一個非標準的地點安裝的二進制分發版,您可能需要編輯mysql.server。修改它,運行safe_mysqld前,cd到正確的目錄。注意如果您修改mysql.server,那麼某個時候升級MySQL時,您的修改版本將被覆蓋,因此您應該做一個您可重新安裝的編輯過的版本的拷貝)

mysql.server stop通過向伺服器發出一個信號停止它。您可手動執行mysqladmin shutdown關閉伺服器。

要想在伺服器上自動啟動和停止MySQL,應在/etc/rc * 檔案中適當的地方增加啟動、停止命令。

如果您使用Linux伺服器RPM安裝軟件包(MySQL-server-VERSION.rpm)mysql.server指令安裝在/etc/init.d目錄中,名為MySQL。您不需要手動安裝它。關於Linux RPM軟件包的詳細訊息參見2.4節,「在Linux下安裝MySQL」

一些供應商提供的RPM軟件包安裝的啟動指令名字不同,例如mysqld

如果從不自動安裝mysql.server的原始碼分發版或二進制分發版格式來安裝MySQL,可以手動安裝它。可以在MySQL安裝目錄下或MySQL 原始碼樹的support-files目錄中找到指令。

要想手動安裝mysql.server,用名稱mysql將它複製到/etc/init.d目錄,然後將它變為可執行檔案。只需要將位置更改為mysql.serveris所在並執行這些命令的相應目錄:

shell> cp mysql.server /etc/init.d/mysql
shell> chmod +x /etc/init.d/mysql

舊的Red Hat系統使用/etc/rc.d/init.d目錄,不使用/etc/init.d。相應地調節前面的命令。也可以首先建立指向/etc/rc.d/init.d的符號連接/etc/init.d

shell> cd /etc
shell> ln -s rc.d/init.d .

安裝指令後,用來激活它以便在系統啟動時運行所需要的命令取決於您的作業系統。在Linux中,您可以使用chkconfig

shell> chkconfig --addMySQL

在一些Linux系統中,還需要下面的命令來完全激活MySQL指令:

shell> chkconfig --level 345MySQL on

FreeBSD中,啟動指令通常應當位於/usr/local/etc/rc.d/。手冊的rc(8)頁內說明只有該目錄指令的基本名匹配*.sh shell檔案名模式,指令才會執行。目錄內的其它檔案或目錄將被忽略掉。換句話說,在FreeBSD中,應當將mysql.server指令安裝為 /usr/local/etc/rc.d/mysql.server.sh以便自動啟動。

前面設置的另一種情況是,一些作業系統啟動時也使用/etc/rc.local/etc/init.d/boot.local 來啟動其它服務。要想使用該方法啟動MySQL,您可以在相應啟動檔案後面追加一條命令:

/bin/sh -c 'cd /usr/local/mysql; ./bin/mysqld_safe --user=mysql &'

對於其它系統,查閱作業系統的文檔來查看安裝啟動指令的方法。

您也可以在一個全局/etc/my.cnf檔案中增加mysql.server的選項。一個典型的「/etc/my.cnf檔案可能看起來像這樣:

[mysqld]
datadir=/usr/local/mysql/var
socket=/var/tmp/mysql.sock
port=3306
user=mysql
 
[mysql.server]
basedir=/usr/local/mysql

mysql.server指令使用下列變數:basedirdatadirpid-file。定義後,必須將它們放到選項檔案中,不能放到命令行。mysql.server只識別startstop命令行參數。

下面的資料表顯示了伺服器和每個啟動指令從選項檔案讀取哪個選項組:

指令

選項組

mysqld

[mysqld], [server], [mysqld-major-version]

mysql.server

[mysqld], [mysql.server], [server]

mysqld_safe

[mysqld], [server], [mysqld_safe]

[mysqld-major-version]意味著名為[mysqld-5.0][mysqld-5.1]用於版本為5.0.x5.1.x等的伺服器。該特性可以用來指定只被給定發佈系列的伺服器讀取的選項。

為了向後兼容,mysql.server還讀取[mysql_server]組,mysqld_safe還讀取[safe_mysqld]組。然而,當使用MySQL 5.1時,您應當更新選項檔案,使用[mysql.server][mysqld_safe]組。

參見4.3.2節,「使用選項檔案」

2.9.2.3. 啟動MySQL伺服器以及其故障診斷和排除

如果啟動伺服器時有問題,可以嘗試:

·         指定您使用的儲存引擎需要的任何特殊選項。

·         確保伺服器知道從哪裡找到數據目錄。

·         確保伺服器可以使用數據目錄。數據目錄和內容的所有權和允許必須設置成伺服器可以訪問和修改它們。

·         檢查錯誤日誌查看伺服器為何不啟動。

·         驗證伺服器想要使用的網絡接口可用。

一些儲存引擎有一些選項可以控制其行為。您可以建立一個my.cnf檔案並為計劃使用的引擎設置啟動選項。如果您將要使用支援事務處理資料表 (InnoDBBDB)的儲存引擎,應確保啟動伺服器之前按照您的期望對它們進行了配置:

·         如果您正使用InnoDB資料表,參閱InnoDB-specific啟動選項。如果您未指定選項,InnoDB使用預設值作為配置選項。請參見15.2.3節,「InnoDB配置」

·         如果您正使用BDB (Berkeley DB)資料表,您應當熟悉不同的BDB-specific啟動選項。請參見15.5.3節,「BDB啟動選項」

mysqld伺服器啟動時,它進入數據目錄。在這裡它可以找到資料庫並寫入日誌檔案。在Unix中,伺服器還在數據目錄中寫pid(過程 ID)檔案。

當編譯伺服器時確定數據目錄。這是伺服器預設尋找數據目錄的位置。如果數據目錄位於系統中的其它位置,伺服器不能正確工作。用--verbose--help選項使用mysqld您可以找出預設路徑設定值。

如果預設值與您的系統中的MySQL安裝佈局不匹配,您可以在命令行中為mysqld mysqld_safe指定選項來覆蓋它們。您還可以在選項檔案中列出選項。

要想明顯指定數據目錄的位置,使用--datadir選項。一般情況下,您可以告訴mysqld基本目錄的位置,MySQL安裝在該目錄下,並且它在該目錄中尋找數據目錄。您可以使用--basedir選項來實現。

要想檢查指定路徑選項的結果,用--verbose--help選項使用mysqld。例如,如果您進入mysqld的安裝目錄,然後運行下面的命令,它顯示啟動伺服器的結果,基本目錄為/usr/local

shell> ./mysqld --basedir=/usr/local --verbose --help

您可以指定其它選項,例如--datadir,但是請注意--verbose--help必須為最後的選項。

一旦您確定了您想要的路徑設定值,用--verbose-- help啟動伺服器。

如果mysqld正在運行,執行下列命令您可以找出它所使用的路徑設定值:

shell> mysqladmin variables

或:

shell> mysqladmin -h host_name variables

host_nameMySQL伺服器主機的名稱。

如果啟動mysqld時遇到Errcode 13(意味著Permission denied),這意味著數據目錄或其內容的訪問權限不允許伺服器訪問。此時,您需要更改所使用檔案和目錄的權限,使伺服器有權使用它們。您還可以用root啟動伺服器,但是這樣會造成安全問題,應當避免。

Unix中,進入數據目錄,檢查數據目錄和其內容的所有權,確保伺服器可以訪問。例如,如果數據目錄是/usr/local/mysql/var,使用命令:

shell> ls -la /usr/local/mysql/var

如果數據目錄或其檔案或子目錄不屬於您運行伺服器使用的帳號,將所有權改為該帳號:

shell> chown R mySQL /usr/local/mysql/var
shell> chgrp R mySQL /usr/local/mysql/var

如果伺服器不能正確啟動,檢查錯誤日誌檔案,看看是否可以找到原因。日誌檔案位於數據目錄(Windows中一般為C:\Program Files\MySQL\MySQL Server 5.1\dataUnix二進制分發版為/usr/local/mysql/dataUnix原始碼分發版為/usr/local/var)。搜尋數據目錄中的host_name.errhost_name.log檔案,其中host_name是您的伺服器主機名。然後檢查檔案的最後幾行。在Unix中,可以使用tail來顯示:

shell> tail host_name.err
shell> tail host_name.log

錯誤日誌包含指示伺服器不能啟動的訊息。例如,您可以看見日誌中:

000729 14:50:10  bdb:  Recovery function for LSN 1 27595 failed
000729 14:50:10  bdb:  warning: ./test/t1.db: No such file or directory
000729 14:50:10  Can't init databases

這意味著您沒有用--bdb-no-recover選項啟動mysqldBerkeley DB恢復資料庫時發現其日誌檔案有一些問題。要想繼續,您應當將舊的Berkeley DB 日誌檔案從資料庫目錄移到其它地方,以後您可以在那兒檢查它們。BDB日誌檔案以log.0000000001開頭,按順序命名。

如果您運行支援BDB 資料表的mysqld,mysqld啟動時內核崩潰,該可能是由於BDB 恢復日誌的問題。此時,您可以嘗試用--bdb-no-recover啟動mysqld。如果有幫助,您應當從數據目錄移走所有BDB日誌檔案並嘗試不用--bdb-no-recover選項重新啟動mysqld

如果出現下面的錯誤,說明其它程式(也許是另一個mysqld伺服器)正使用mysqld正試圖使用的TCP/IP端口或Unix 套接字檔案:

Can't start server: Bind on TCP/IP port: Address already in use
Can't start server: Bind Unix socket...

使用ps來確定是否另有一個mysqld伺服器正在運行。如果如此,關閉伺服器重新啟動mysqld(如果另一個伺服器正運行,您的確想要運行多個伺服器,您可以在5.12節,「在同一台機器上運行多個MySQL伺服器」中發現相關訊息)

如果沒有其它伺服器在運行,嘗試執行命令 telnet your-host-name tcp-ip-port-number(預設MySQL端口號是3306然後按兩次Enter(回車)鍵。如果出現telnet: Unable to connect to remote host: Connection refused錯誤消息,其它程式正使用mysqld試圖使用的 TCP/IP端口。您需要跟蹤這是哪個程式並禁用它,或讓mysqld--port選項幀聽其它端口。此時,當通過TCP/IP協議連接伺服器時,您還需要為客戶端程式指定端口號。

端口不能訪問的另一個原因可能是防火牆正運行,阻擋了與它的連接。如果如此,修改防火牆設置允許對該端口的訪問。

如果伺服器已經啟動但是您不能與它連接,您應當確保在/etc/hosts中有下面所示條目:

127.0.0.1       localhost

該問題只發生在沒有工作線程庫,並且MySQL必須配置為使用MIT-pthreads的系統。

如果您不能啟動mysqld,您可以使用--debug選項嘗試編寫一個跟蹤檔案來找到問題。請參見E.1.2節,「建立跟蹤檔案」

關於在Windows安裝中排錯的詳細訊息,參見2.3.14節,「在Windows環境下對MySQL安裝的故障診斷與排除」

2.9.3. 使初始MySQL帳號安全

MySQL安裝過程包括設置含有授權資料表的MySQL資料庫:

·         Windows分發版包含預初始化的授權資料表,可以自動安裝。

·         Unix中,用mysql_install_db程式來安裝 授權資料表。可以通過一些安裝方法來運行該程式。否則您需要手動執行。詳細訊息參見2.9.2節,「Unix下安裝後的過程」

授權資料表定義了初始MySQL用戶帳號和訪問權限。按照以下步驟對這些帳號進行設置:

·         用用戶root 建立兩個帳號。這些帳號為超用戶帳號,可以執行任何操作。初始root帳號的密碼為空,因此任何人可以用root帳號不用任何密碼來連接MySQL伺服器,並具有所有權限。

o        Windows中,一個root帳號用來從本機連接MySQL伺服器,另一個允許從任何主機連接。

o        Unix中,兩個root帳號均用於從本機連接。必須從本機進行連接,一個帳號主機名應指定為localhost,另一個帳號為實際的主機名或IP號。

·         建立了兩個匿名用戶帳號,每個帳號的帳號均為空。匿名帳號沒有密碼,因此任何人可以使用匿名帳號來連接MySQL伺服器。

o        Windows中,一個匿名帳號用來從本機進行連接。它具有所有權限,同root 帳號一樣。另一個可以從任何主機上連接,具有test資料庫或其它以test開始的資料庫的所有權限。

o        Unix中,兩個匿名帳號均用於從本機連接。必須從本機進行連接,一個帳號主機名應指定為localhost,另一個帳號為實際的主機名或IP。兩個帳號具有test資料庫或其它以test開始的資料庫的所有權限。

如前面所述,所有初始帳號均沒有密碼。這意味著在您執行下述操作前,MySQL安裝未受保護:

·         如果您想要防止客戶端不使用密碼用匿名用戶來連接,您應當為匿名帳號指定密碼或刪掉匿名帳號。

·         您應當為MySQL root帳號指定密碼。

下面的說明描述了如何為初始MySQL帳號設置密碼,先為匿名帳號設置然後為root帳號設置。在例子中用實際密碼替換「newpwd」。說明還包括如果您不想用匿名帳號訪問,如何刪掉匿名帳號。

您可能想要在以後設置密碼,因此不需要在進一步的設置或測試中指定密碼。但是,一定要在實際生產作業、使用安裝前設置好密碼。

要想為匿名帳號指定密碼,可以使用SET PASSWORDUPDATE。在兩種情況中,一定要使用PASSWORD()函數為密碼加密。

Windows中使用PASSWORD的方法:

shell> mysql -u root
mysql> SET PASSWORD FOR ''@'localhost' = PASSWORD('newpwd');
mysql> SET PASSWORD FOR ''@'%' = PASSWORD('newpwd');

Unix中使用PASSWORD的方法:

shell> mysql -u root
mysql> SET PASSWORD FOR ''@'localhost' = PASSWORD('newpwd');
mysql> SET PASSWORD FOR ''@'host_name' = PASSWORD('newpwd');

用伺服器主機名替換第二個SET PASSWORD語句中的host_name。這是指定的user資料表中的root non-localhost記錄的Host列名。如果您不知道是哪個主機名,在SET PASSWORD之前執行下面的語句:

mysql> SELECT Host, User FROM mysql.user;

搜尋在User列有root和在Host列沒有localhost的記錄。然後在第二個SET PASSWORD語句中使用該Host值。

為匿名帳號指定密碼的另一種方法是使用UPDATE直接修改用戶資料表。用root連接伺服器,運行UPDATE語句為相應user資料表記錄的Password列指定一個值。在WindowsUnix中的過程是相同的。下面的UPDATE語句同時為兩個匿名帳號指定密碼:

shell> mysql -u root
mysql> UPDATE mysql.user SET Password = PASSWORD('newpwd')
    ->     WHERE User = '';
mysql> FLUSH PRIVILEGES;

user資料表中直接使用UPDATE更新密碼後,必須讓伺服器用FLUSH PRIVILEGES重新讀授權資料表。否則,重新啟動伺服器前,不會使用更改。

如果您寧願刪除匿名帳號,操作方法是:

shell> mysql -u root
mysql> DELETE FROM mysql.user WHERE User = '';
mysql> FLUSH PRIVILEGES;

可以在WindowsUnix中使用DELETE語句。在Windows中,如果您只想刪掉具有與root相同權限的匿名帳號,方法為:

shell> mysql -u root
mysql> DELETE FROM mysql.user WHERE Host='localhost' AND User='';
mysql> FLUSH PRIVILEGES;

該帳號允許匿名訪問,但是擁有全部的權限,因此刪掉它可以提高安全。

您可以用幾種方法為root帳號指定密碼。以下介紹了三種方法:

·         使用SET PASSWORD語句

·         使用mysqladmin命令行客戶端程式

·         使用UPDATE語句

要想使用SET PASSWORD指定密碼,用root連接伺服器並執行兩個SET PASSWORD語句。一定要使用PASSWORD()函數來加密密碼。

Windows中的語句:

shell> mysql -u root
mysql> SET PASSWORD FOR 'root'@'localhost' = PASSWORD('newpwd');
mysql> SET PASSWORD FOR 'root'@'%' = PASSWORD('newpwd');

Unix中的語句:

shell> mysql -u root
mysql> SET PASSWORD FOR 'root'@'localhost' = PASSWORD('newpwd');
mysql> SET PASSWORD FOR 'root'@'host_name' = PASSWORD('newpwd');

用伺服器主機名替換第二個SET PASSWORD語句中的host_name。這是您指定匿名帳號密碼的主機名。

要想使用mysqladminroot帳號指定密碼,執行下面的命令:

  shell> mysqladmin -u root password "newpwd"
  shell> mysqladmin -u root -h host_name password "newpwd"

上述命令適用於WindowsUnix。用伺服器主機名替換第二個命令中的host_name。不一定需要將密碼用雙引號引起來,但是您如果密碼中包含空格或專用於命令解釋的其它字元,則需要用雙引號引起來。

您還可以使用UPDATE直接修改user資料表。下面的UPDATE語句可以同時為兩個root帳號指定密碼:

shell> mysql -u root
mysql> UPDATE mysql.user SET Password = PASSWORD('newpwd')
    ->     WHERE User = 'root';
mysql> FLUSH PRIVILEGES;

UPDATE語句適用於WindowsUnix

設置完密碼後,當您連接伺服器時您必須提供相應密碼。例如,如果您想要用mysqladmin 關閉伺服器,可以使用下面的命令:

shell> mysqladmin -u root -p shutdown
Enter password: (enter root password here)

註釋:如果您設置了root密碼後忘記了密碼,從A.4.1節,「如何復位根用戶密碼」中查閱重設密碼的方法。

您可以使用GRANT語句設置新帳號。相關說明參見5.8.2節,「向MySQL增加新用戶帳號」

2.10. 升級MySQL

做為一般原則,我們建議從一個發佈系列升級到另一個發佈系列時,您應當先升級到它的下一個系列而不要跳過。例如,如果您目前正運行MySQL 3.23,想要升級到較新的系列,要升級到MySQL 4.0而不要升級到5.05.1

下面的項列出了升級時的相關訊息:

·         MySQL 5.0升級到5.1,請閱讀2.10.1節,「從5.0版升級」附錄D:MySQL變更史。其中提供了MySQL 5.1相對於MySQL 5.0的新特性或不同特性。如果您想要從MySQL 5.0以前的發佈系列升級,應當依次升級到下一個發佈系列,直到達到MySQL 5.0,然後再升級到MySQL 5.1。關於從MySQL 5.0升級的訊息,參見MySQL 5.0 參考手冊;對於更早的發佈,參見MySQL 4.1參考手冊

·         在升級前應先備份資料庫。

·         如果在Windows中運行MySQL伺服器,參見2.3.15節,「在Windows下升級MySQL」

·         MySQL 5.0升級到5.1更改MySQL資料庫中的 授權資料表;增加了列和資料表以支援新功能。為了充分利用這些特性,應確保授權資料表是最新的。升級授權資料表的過程參見2.10.2節,「升級授權資料表」。在升級前,您可能想要使用mysqldump來轉儲資料表;升級後,可以使用mysqlmysqlimport重建、重裝 授權資料表來重載dump(備份)檔案。

·         如果您正複製,關於升級複製設置的訊息參見6.6節,「升級複製設置」

·         如果安裝包括mysqld-max伺服器的MySQL-Max分發版,則後面要升級到非Max版的MySQLmysqld_safe仍然試圖運行舊的mysqld-max伺服器。如果升級,應當手動刪掉舊的mysqld-max伺服器以確保mysqld_safe運行新的mysqld伺服器。

只要您的MySQL版本屬於相同的發佈系列,總是可以在不同的版本之間的相同架構上移動MySQL格式檔案和數據檔案。目前的產品發佈系列是5.1。如果運行MySQL時更改字元編碼,必須對所有MyISAM資料表運行myisamchk -r -q --set-character-set=charset。否則,索引順序將會出錯,因為更改字元編碼也會更改排序。

如果您使用新版本時比較小心,在安裝新的MySQL前可以重新命名舊的mysqld。例如,如果您想要從MySQL 5.0.13升級到5.1.10, 將當前的伺服器從mysqld重新命名為mysqld-5.0.13如果新的mysqld出現問題,只需要關閉並用舊的mysqld重新啟動。

升級後,如果您遇到重新編譯的客戶端程式問題,例如Commands out of sync或不期望的內核轉儲,可能是編譯程式時使用了舊的頭檔案或庫檔案。出現這種情況,應當檢查mysql.h檔案和libmysqlclient.a庫的日期,以驗證它們是否來自新的MySQL分發版。如果不是,用新的頭檔案和庫重新編譯程式。

如果出現問題,例如新mysqld伺服器不啟動或沒有密碼不能連接,驗證是否使用了以前安裝的舊my.cnf檔案。可以用--print-defaults選項檢查(例如,mysqld --print-defaults)。如果顯示程式名之外的其它內容,說明有一個活動my.cnf檔案影響了伺服器或客戶端操作。

當安裝新的MySQL發佈時,最好重建並重裝Perl DBD::mysql 模塊。同樣適用於其它MySQL接口,例如PHP mysql延伸名和Python MySQLdb模塊。

2.10.1. 從5.0版升級

當從5.0升級到5.0.10或更高版本時請注意必須運行mysql_fix_privilege_tables(或在Windows中運行mysql_fix_privilege_tables.sql)。否則,不能建立保存的過程。相關過程參見2.10.2節,「升級授權資料表」

2.10.2. 升級授權資料表

一些發佈對授權資料表(MySQL資料庫中的資料表)的結構進行了更改以增加新的權限或特性。當您更新到新版本 MySQL時,要想確保授權資料表最新,應當運行mysql_fix_privilege_tables指令來更新 授權資料表。相關過程參見5.4節,「mysql_fix_privilege_tables:升級MySQL系統資料表」

如果您從MySQL 4.1或更早版本升級,授權資料表升級過程為CREATE VIEWSHOW VIEW權限增加了視圖相關的列。這些權限位於全局和資料庫 級。在這種情況下,MySQL 5.1MySQL_fix_privilege_ tablesuser資料表中的Create_priv值複製到Create_view_privShow_view_priv列。

2.10.3. 將MySQL資料庫拷貝到另一台機器

您可以在支援相同浮點格式的不同架構之間為MyISAM資料表複製.frm.MYI.MYD檔案。(MySQL關注所有字節交換問題)請參見15.1節,「MyISAM儲存引擎」

如果您需要在不同的架構之間轉移資料庫,可以使用mysqldump建立含有SQL語句的檔案。然後您可以將檔案轉移到其它機器上,並將它輸入到MySQL客戶端。

使用mysqldump --help來看有哪些選項可用。如果您正將數據移動到更新版本的MySQL,您應當使用mysqldump opt利用各種最佳化性能來產生更小、可以更快處理的轉儲檔案。

在兩台機器之間移動資料庫的最簡單(儘管不是最快)的方法是在資料庫所在的機器上運行下面的命令:

shell> mysqladmin -h 'other_hostname' create db_name
shell> mysqldump --opt db_name | mysql -h 'other_hostname' db_name

如果您想要從遠程機器通過慢速網絡複製資料庫,可以使用:

shell> mysqladmin create db_name
shell> mysqldump -h 'other_hostname' --opt --compress db_name | mysql db_name

還可以將結果保存到檔案中,然後將檔案轉移到目標機器上並將檔案裝載到資料庫中。例如,可以在源機器上使用下面的命令將資料庫備份到檔案中:

shell> mysqldump --quick db_name | gzip > db_name.contents.gz

(該例子中建立的檔案是壓縮格式)將含有資料庫內容的檔案到目標機上並運行命令:

shell> mysqladmin create db_name
shell> gunzip < db_name.contents.gz | mysql db_name

還可以使用mysqldumpmysqlimport來轉移資料庫。對於大的資料表,比只是使用mysqldump要快得多。在下面的命令中,DUMPDIR代資料表用來保存mysqldump輸出的目錄全路徑名。

首先,建立保存輸出檔案的目錄並備份資料庫:

shell> mkdir DUMPDIR
shell>mysqldump --tab=DUMPDIR db_name

然後將DUMPDIR目錄中的檔案轉移到目標機上相應的目錄中並將檔案裝載到MySQL

shell> mysqladmin create db_name           # create database
shell> cat DUMPDIR/*.sql | mysql db_name   # create tables in database
shell> mysqlimport db_name DUMPDIR/*.txt   # load data into tables

不要忘記複製MySQL資料庫,因為授權資料表保存在該資料庫中。您可能需要在新機器上用MySQL root用戶運行命令,直到產生MySQL資料庫。

mysql資料庫導入目標機器後,執行mysqladmin flush-privileges,以便伺服器重載授權資料表訊息。

2.11. 降級MySQL

本節描述了舊版本MySQL比新版本工作得好的情況下,如何降級到舊的MySQL版本。

如果您在同一發佈系列(例如,從 5.0.13 5.0.12)內降級,一般規則是只需要在舊版本的頂部安裝新的二進制。不需要對資料庫進行任何操作。但是,最好是先進行備份。

下面的項列出了進行降級時應執行的操作:

·         閱讀您將要降級的發佈系列的升級部分,確定它沒有您需要的功能。2.10節,「升級MySQL」

·         如果該版本有降級部分,您也應當閱讀。

只要MySQL版本屬於相同的發佈系列,您總是可以在不同的版本之間的相同架構上移動MySQL格式檔案和數據檔案。目前的產品發佈系列是5.1

如果您從一個發佈系列降級到另一個發佈系列,資料表儲存格式可能不兼容。在這種情況下,您可以在降級嵌使用mysqldump來轉儲資料表。降級後,使用mysqlmysqlimport重載轉儲檔案來重新建立資料表。請參見2.10.3節,「將MySQL資料庫拷貝到另一台機器」

資料表格式不向下兼容的一般跡像是降級時不能打開資料表。在這種情況下,使用下面的過程:

1.    停止您想要降級到的舊的MySQL伺服器。

2.    重新啟動將被降級的新的MySQL伺服器。

3.    使用mysqldump建立一個dump(轉儲)檔案來轉儲不能被舊伺服器訪問的所有資料表。

4.    停止新MySQL伺服器,重新啟動舊MySQL伺服器。

dump(轉儲)檔案重載入舊伺服器。資料表應當可訪問。

2.12. 具體作業系統相關的注意事項

2.12.1. Linux注意事項

本節討論發現的在Linux中出現的問題。前面幾節描述了一般作業系統相關的問題,使用二進制或原始碼分發版時可能出現的問題和安裝後的問題。後面幾節討論在具體Linux平台上出現的問題。

請注意這些問題的大多數出現在舊的Linux 版本中。如果您運行最新的版本,可能不會發現這些問題。

2.12.1.1. Linux作業系統注意事項

MySQL至少需要Linux 2.0版本。

警告:我們已經發現在SMP系統中Linux 2.2.14 MySQL會出現一些奇怪的問題。我們還收到來自一些MySQL用戶的報告說他們用內核2.2.14使用MySQL時遇到了嚴重的穩定性問題。如果您正使用該內核,應當升級到2.2.19 (或更新版)或到2.4內核。如果您有一個多CPU盒,應當考慮使用2.4,因為它能大大加速。您的系統將會更穩定。

當使用LinuxThreads時,您應當至少可以看見有三個mysqld 程序在運行。這些實際上是線程。有一個線程是LinuxThreads管理器,一個線程處理連接,另一個線程處理告警和信號。

2.12.1.2. Linux二進制分發版說明

MySQLLinux-Intel二進制和RPM發佈配置為最高的可能速度。我們一直在嘗試使用可用的最快的穩定的編譯器。

二進制發佈用-staticis連接,說明一般情況您不需要關心系統庫的版本。您也不需要安裝LinuxThreads。用-staticis連接的程式稍微大於動態連接程式,但也稍微快一些(3-5%)。但是,靜態連接程式的一個問題是您不能使用用戶定義函數(UDF)。如果您將要寫或使用UDF(只適用於CC++ 編程人員),您必須使用動態連結自己編譯MySQL

二進制分發版的一個已知問題是在使用libc的舊的Linux系統(例如Red Hat 4.xSlackware)上,您會遇到一些(非致命)主機名解析問題。如果系統使用libc沒有使用glibc2,您可能會遇到一些主機名解析和getpwnam()問題。這是因為glibc依靠一些外部庫來執行主機名解析和getpwent(), 即使用-staticis編譯也如此。這些問題出現在兩個方面:

·         當運行mysql_install_db時,您會看見下面的錯誤消息:

·                Sorry, the host 'xxxx' could not be looked up

您可以通過執行mysql_install_db --force來解決該問題,並不在mysql_install_db中執行resolveip測試。不利方面是 您不能在授權資料表中使用主機名:除了localhost,必須使用IP號。如果您正使用不支援force的舊版本MySQL,必須使用文本編輯器手動卸載mysql_install中的resolveip測試。

·         當您嘗試用--user選項運行mysqld您還會看見下面的錯誤:

·                getpwnam: No such file or directory

要解決該問題,使用su命令啟動mysqld,不要指定--user選項。這樣使系統自己更改mysqld程序的用戶IDmysqld不再需要這樣做。

另一個解決辦法可以解決兩個問題,即不使用二進制分發版。獲得MySQL原始碼分發版(RPMtar.gz格式)並安裝。

在一些Linux 2.2版本中,當客戶端通過TCP/IP建立大量與mysqld伺服器的新連接時,您可能會遇到錯誤Resource temporarily unavailable。該問題是Linux在您關閉TCP/IP套接字的時間和系統實際釋放該套接字的時間之間有一個延遲。只有有限數目的TCP/IP時段有空間,因此如果客戶端試圖在短時間內建立許多新TCP/IP連接時,您會遇到源不可用錯誤。例如,當您通過TCP/IP運行MySQL test-connect基準測試時您會看見該錯誤。

我們已經多次向不同的 Linux 郵件列資料表詢問該問題,但是一直沒有找到合適的解決辦法。唯一知道的「解決辦法」是客戶端使用永久連接,或,如果您在同一機器上運行資料庫伺服器和客戶端,使用Unix套接字檔案來連接,不要使用TCP/IP連接。

2.12.1.3. Linux原始碼分發版說明

下面關於glibc的注意事項只適用您自己構建MySQL時。如果在x86機器上運行Linux,在大多數情況下最好使用我們的二進制。我們將二進制連接到了我們能找到的打了最好補丁的glibc版本,並使用了最優的編譯器選項,盡力使它適合高負荷伺服器。對於典型用戶,即使對於超過2GB限制的大量並行連接或資料表設置,在大多數情況下,我們的二進制仍然是最佳選擇。閱讀下面的內容後,如果您不清楚怎樣做,先試用我們的二進制看它是否滿足您的需求。如果您發現它不夠完善,那麼您可以嘗試您自己的構建。在這種情況下,我們很希望能看到相關註釋,以便我們下次可以構建更好的二進制。

MySQLLinux上使用 LinuxThreads 。如果您正在使用一個沒有glibc2的老的Linux版本,您必須在嘗試編譯MySQL前安裝LinuxThreads。您可以從 http://dev.mysql.com/downloads/os-linux.html獲得LinuxThreads

注意:當您執行INSERT DELAYED時,所用的包括2.1.1及以前的glibc版本在pthread_互斥_timedwait()處理上有一個致命錯誤,如果您正在使用INSERT DELAYED,我們建議先升級glibc

請注意Linux 內核和LinuxThreads庫預設情況下最多可以處理1,024個線程。如果您計劃使用超過1,000個並行連接,需要對LinuxThreads進行一些更改,如下所示:

·         sysdeps/unix/sysv/linux/bits/local_lim.h中的PTHREAD_THREADS_MAX 增加到4096,將LinuxThreads/internals.h 中的STACK_SIZE減少到256KB。路徑相對於glibc的根目錄。(請注意如果STACK_SIZE為預設值2MBMySQL600-1000個連接時不穩定)

·         重新編譯LinuxThreads,生成新的libpthreads.a庫,並重新連接MySQL

可以從http://www.volano.com/linuxnotes.html 查閱關於LinuxThreads線程限制的詳細訊息。

還有一個問題會嚴重影響MySQL的性能,特別是在SMP系統中。在glibc 2.1LinuxThreads中,對於擁有很多只是短時間內佔有互斥體的線程的程式,不能很好地執行互斥。結果出現荒謬的現象:在許多情況下,如果您使用未修改的LinuxThreads連接MySQL,從SMP中去掉卸載處理器實際上會提高MySQL的性能。我們提供了一個glibc 2.1.3的補丁來糾正該行為(http://www.mysql.com/Downloads/Linux/linuxthreads-2.1-patch )

glibc 2.2.2,MySQL使用修改後的互斥,這樣甚至比打了補丁的glibc 2.1.3還要好得多。但是,需要注意的是在某些條件下,當前glibc 2.2.2中的互斥代碼會高旋,影響了MySQL的性能。通過最佳化mysqld程序到最高優先級,可以降低在這種情況下出現這種問題的可能性。我們還可以通過補丁來糾正高旋問題,可以從http://www.mysql.com/Downloads/Linux/linuxthreads-2.2.2.patch下載。它集成高旋的糾正、線程最大數目和堆棧空間於一體。您需要用補丁patch -p0 </tmp/linuxthreads-2.2.2.patchLinuxThreads目錄下使用。我們 希望在將來的glibc 2.2發佈中能以某種形式將它包括進來。在任何情況下,如果您連接glibc 2.2.2,仍然需要糾正STACK_SIZE PTHREAD_THREADS_MAX我們希望在將來能將預設值糾正到某種程度上可以接受的值,適合高負荷MySQL設置,因此用來產生您自己的構建的  命令可以簡化到到./configure; make; make install

我們建議您使用這些補丁來構建專用的libpthreads.a靜態版本,並只使用它同MySQL實現靜態連結。我們知道這些補丁對於MySQL很安全 並大大改善了它的性能,但是我們還不能斷言它在其它應用程式上的效果如何。如果您需要將其它使用LinuxThreads的應用程式同打了補丁的靜態版本的庫連接,或構建一個打了補丁的共享版本,並將它安裝到系統中,您將自己承擔風險。

如果您在安裝MySQL的過程中遇到任何奇怪的問題,或一些常用實用工具被懸掛起來,很可能是庫或編譯器相關問題。在這種情況下,使用我們的二進制來解決。

如果您連接您自己的MySQL客戶端程式,運行時您會看見下面的錯誤:

ld.so.1: fatal: libmysqlclient.so.#:
open failed: No such file or directory

使用下面的方法可以避免該問題:

·         -Wl,r/full/path/to/libmysqlclient.so標記連接客戶端,不要使用-Lpath)

·         libmysqclient.so複製到/usr/lib

·         運行客戶端程式前,將libmysqlclient.so所在目錄的路徑名增加到LD_RUN_PATH環境變數。

如果使用Fujitsu編譯器 (fcc/FCC),編譯MySQ時可能會出現一些問題,因為Linux頭檔案主要面向gcc。以下的configure行應當結合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

2.12.1.4. Linux後期安裝注意事項

MySQL安裝目錄或MySQL原始碼樹下的support-files目錄下可以找到mysql.server。您可以將它安裝為/etc/init.d/mysql,以便自動啟動和關閉MySQL。請參見2.9.2.2節,「自動啟動和停止MySQL」

如果MySQL不能打開足夠的檔案或連接,可能是您沒有將Linux配置為處理足夠的檔案。

Linux 2.2及以上版本中,您可以檢查分配的檔案的數目:

shell> cat /proc/sys/fs/file -max
shell> cat /proc/sys/fs/dquot-max
shell> cat /proc/sys/fs/super-max

如果有超過16MB的內存,應當在啟動指令中增加如下內容(例如,在SuSE Linux中:/etc/init.d/boot.local)

echo 65536 > /proc/sys/fs/file-max
echo 8192 > /proc/sys/fs/dquot-max
echo 1024 > /proc/sys/fs/super-max

還可以用root從命令行運行echo命令,但是下一次重新啟動計算機時這些設定值會丟掉。

另外,可以使用許多Linux分發版使用的sysctl工具設置啟動參數(包括SuSE Linux 8.0和以後版本)。將下面的值放到檔案 /etc/sysctl.conf中:

# Increase some values for MySQL
fs.file-max = 65536
fs.dquot-max = 8192
fs.super-max = 1024

您還應將以下內容加入/etc/my.cnf

[mysqld_safe]
open-files-limit=8192

這樣伺服器連接和打開檔案的總數目可以達到8,192

LinuxThreadsSTACK_SIZE常數控制在尋址空間中線程堆棧的佔用空間。它需要足夠大,以保證每個線程堆棧有足夠的空間,但是應足夠小,防止某些線程的堆棧運行全局mysqld數據。遺憾的是,根據我們的發現,如果您用mmap()映射目前正使用的尋址,Linux成功運行  後不會映射映射區,將會清空整個地址頁上的數據而不會返回錯誤訊息。因此,mysqld或其它線程應用程式的安全依靠建立線程的代碼的「紳士」行為。用戶必須採取措施以確保在任何時間運行線程的數目相對線程堆棧應足夠低,以防止全局堆內存。使用mysqld時,您應當為max_connections變數設置合理的值強制該行為。

如果您自己構建MySQL,您可以為LinuxThreads打補丁以便更好地使用堆棧。請參見2.12.1.3節,「Linux原始碼分發版說明」。如果您不想為LinuxThreads打補丁,您應當將max_connections的值設置為不超過500。如果您有大的關鍵字緩衝區、大的堆內存資料表,或其它使mysqld分配大量內存的東西,或如果您用2GB的補丁運行2.2內核,max_connections的值應當更低。如果您正使用我們的二進制或RPM版本,可以安全地將max_connections設置為1500(假定沒有大的關鍵字緩衝區或有大量數據的堆內存資料表。將LinuxThreads中的STACK_SIZE降低得越低,可以安全地建立越多的線程。我們推薦的值的範圍為128KB256KB

如果您正使用大量的並行連接,在2.2內核中您可能會遇到一個「特性」,即通過對程序的分支或克隆子程序的行為進行罰分,來試圖防止轟炸攻擊。這樣您增加並行客戶端的數量時,MySQL不能正確響應。在單CPU系統中,我們已經發現該現象,即線程建立地很慢;連接MySQL的時間很長(長達1分鐘),並且關閉的時間也很長。在多CPU系統中,我們已經觀察到隨著客戶端數目的增加,查詢速度逐漸下降。在尋求解決辦法的過程中,我們收到了一個用戶的內核補丁,他聲稱該補丁可以解決他的問題。從http://www.mysql.com/Downloads/Patches/linux-fork.patch可以下載該補丁。我們已經在開發和生產系統上對該補丁進行了廣泛的測試。它可以大大改善MySQL的性能,而不會造成任何問題,我們向仍然在2.2內核運行高負荷伺服器的用戶推薦它。

2.4內核中已經對該問題進行了修復,因此如果您不滿意當前系統的性能,不要為2.2 內核打補丁,在SMP系統中升級到2.4版要容易地多,升級不僅可以修復錯誤,還可以使SMP更好地加速。

我們已經在雙CPU機器上在2.4內核中對MySQL進行了測試,發現MySQL的比例要好得多。1,000名客戶查詢時,還看不到速度有實質上的下降,MySQL的比例因子(最大吞吐量與一個客戶端的吞吐量的比例)180%。我們在四-CPU系統中也觀察到了類似的結果:當客戶數目上升到1,000名時還沒有實質上的減慢, 比例因子為300%。根據這些結果,對於使用2.2內核的高負荷SMP伺服器,我們絕對建議升級到 2.4內核。

我們已經發現,在2.4內核中應使用可能的最高優先級來運行mysqld程序,以獲得最佳性能。可以通過為mysqld_saferenice -20 $$命令來實現。在四-CPU系統中的測試中,提高優先級在400個客戶時會使吞吐量增加60%

我們目前還想搜集關於MySQLfour-wayeight-way系統上用2.4內核執行的性能的更詳細訊息。如果您訪問了這些系統並進行了一些基準測試,請將結果用email發送到<benchmarks@mysql.com>。我們將對它們進行審查以包括進手冊中。

如果用ps運行mysqld伺服器程序時發現程序死掉了,一半是MySQL中有問題或資料庫資料表崩潰了。請參見A.4.2節,「如果MySQL依然崩潰,應作些什麼」

如果mysqld死掉並給出SIGSEGV信號,要想在Linux中對內核進行調試,您可以用--core-file選項啟動mysqld。注意您還可能需要通過向mysqld_safe新增ulimit -c 1000000或用--core-file-size=1000000啟動mysqld_safe來加大內核檔案的大小。請參見5.1.3節,「mysqld_safe:MySQL伺服器啟動指令」

2.12.1.5. Linux x86注意事項

MySQL需要5.4.12或更新版本的libc。已知它可以在libc 5.4.46中工作。glibc 2.0.6和更新版本應當也可以工作。Red Hatglibc RPM有一些問題,因此如果您遇到問題,應看看是否有更新版。已知glibc 2.0.7-192.0.7-29 RPM可以工作。

如果您正使用Red Hat 8.0或更新的glibc 2.2.x庫,您會看見mysqld執行gethostbyaddr()時會死掉。這是因為新的glibc庫在執行該使用時需要大於128KB的堆棧空間。要想修復該問題,用--thread-stack=192K選項啟動mysqld(MySQL 4以前的版本中應使用-O thread_stack=192KMySQL 4.0.10和以上版本中,該堆棧空間值即為預設值,因此您不會看見該問題。

如果您正使用gcc 3.0和以上版本編譯MySQL,在編譯MySQL前您必須先安裝libstdc++v3庫;如果不這樣做,在聯接過程中會遇到關於丟失__cxa_pure_virtual符號的錯誤。

在一些舊的Linux分發版中,configure會生成如下錯誤:

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名再增加一條下劃線,然後重新嘗試。

編譯時可能會出現警告。下面的警告可以忽略:

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'

如果mysqld啟動時總是出現轉儲內核, 問題可能是您使用了舊的/lib/libc.a。嘗試重新對其命名,然後刪掉sql/mysqld並重新執行make install然後再次嘗試。已經報導在部分Slackware安裝中出現了該問題。

當連結mysqld時如果出現下面的錯誤,說明libg++.a安裝不正確:

/usr/lib/libc.a(putc.o): In function `_IO_putc':
putc.o(.text+0x0): multiple definitiof `_IO_putc'

您可以使用libg++.a運行configure來避免該問題:

shell> CXX=gcc ./configure

2.12.1.6. Linux SPARC注意事項

在部分執行過程中,readdir_r()會中斷。現象是SHOW DATABASES語句總是返回空子集。可以在完成配置、進行編譯前從config.h中刪掉HAVE_READDIR_R來修復。

2.12.1.7. Linux Alpha注意事項

我們已經用我們的基準和測試套件在Alpha中測試了MySQL 5.1,看起來工作得不錯。

我們目前在配置Alpha EV6處理器的Compaq DS20機器上,在SuSE Linux 7.0中對AXP、內核2.4.4-SMPCompaq C編譯器(V6.2-505)Compaq C++編譯器(V6.3-006)構建MySQL二進制軟件包。

您可以從 http://www.support.compaq.com/alpha-tools/ 找到上述編譯器。使用這些編譯器,得到的MySQL性能比gcc要好9-14%

AlphaMySQL中,我們在編譯選項中使用-arch generic標記,可以確保二進制在所有Alpha處理器中運行。我們還採用靜態編譯以避免庫問題。configure命令應為:

CC=ccc CFLAGS="-fast -arch generic" CXX=cxx \
CXXFLAGS="-fast -arch generic -noexceptions -nortti" \
./configure --prefix=/usr/local/mysql --disable-shared \
    --with-extra-charsets=complex --enable-thread-safe-client \
    --with-mysqld-ldflags=-non_shared --with-client-ldflags=-non_shared
 

如果想要使用egcs,可以使用下面的configure行:

CFLAGS="-O3 -fomit-frame-pointer" CXX=gcc \
CXXFLAGS="-O3 -fomit-frame-pointer -felide-constructors \
    -fno-exceptions -fno-rtti" \
./configure --prefix=/usr/local/mysql --disable-shared

已知的在Linux-Alpha中運行MySQL的問題:

·         gdb 4.18 中不能調試線程應用程式。您應當使用gdb 5.1

·         使用gcc時如果您嘗試靜態連結mysqld,啟動時映像會導致轉儲內核。換句話說,使用gcc時不要使用--with-mysqld-ldflags=-all-static

2.12.1.8. Linux PowerPC注意事項

MySQL應當可以在使用最新glibc安裝軟件包(glibc 2.0.7測試)MkLinux上工作。

2.12.1.9. Linux MIPS注意事項

為了使MySQLQube2(Linux Mips)上工作,需要最新的glibc庫。已知glibc-2.0.7-29C2可以工作。還必須使用egcs C++編譯器(egcs 1.0.2-9gcc 2.95.2或更新版)

2.12.1.10. Linux IA-64注意事項

要想讓MySQLLinux IA-64中編譯,我們用 gcc 2.96構建時使用下面的configure命令:

CC=gcc \
CFLAGS="-O3 -fno-omit-frame-pointer" \
CXX=gcc \
CXXFLAGS="-O3 -fno-omit-frame-pointer -felide-constructors \
    -fno-exceptions -fno-rtti" \
    ./configure --prefix=/usr/local/mysql \
    "--with-comment=Official MySQL binary" \
    --with-extra-charsets=complex

IA-64,MySQL客戶端二進制使用共享庫。這意味著如果您將我們的二進制分發版安裝到/usr/local/mysql之外的其它位置,需要將libmysqlclient.so安裝目錄路徑加到/etc/ld.so.conf檔案或LD_LIBRARY_PATH環境變數中。

參見A.3.1節,「與MySQL客戶端庫的連結問題」

2.12.2. Mac OS X注意事項

Mac OS X中,tar不能處理長檔案名。如果您需要解包.tar.gz分發版,應使用gnutar

2.12.2.1. Mac OS X 10.x (Darwin)

MySQL應當可以在Mac OS X 10.x(Darwin)中工作,不會有重大問題。

已知的問題有:

·         連接時間(wait_timeoutinteractive_timeoutnet_read_timeout)值不理想。

這可能是線程庫中的信號處理問題,信號不能中斷掛起的讀命令,我們希望將來能對線程庫進行更新以修復該問題。

Darwin 6.3中用下面的configure行對Mac OS X二進制進行了編譯:

CC=gcc CFLAGS="-O3 -fno-omit-frame-pointer" CXX=gcc \
CXXFLAGS="-O3 -fno-omit-frame-pointer -felide-constructors \
    -fno-exceptions -fno-rtti" \
    ./configure --prefix=/usr/local/mysql \
    --with-extra-charsets=complex --enable-thread-safe-client \
    --enable-local-infile --disable-shared

參見2.5節,「在Mac OS X上安裝MySQL」

2.12.2.2. Mac OS X Server 1.2 (Rhapsody)

對於當前版本的Mac OS X伺服器,編譯MySQL之前不需要對作業系統進行更改。在伺服器平台上的編譯與客戶端版本Mac OS X相同。

對於舊的版本(Mac OS X Server 1.2, a.k.a. Rhapsody),在配置MySQL之前必須先安裝pthread軟件包。

參見2.5節,「在Mac OS X上安裝MySQL」

2.12.3. Solaris注意事項

Solaris中,甚至在解壓縮MySQL分發版時,您也會遇到問題,因為Solaris tar不能處理長檔案名。這說明解壓縮MySQL分發版時會遇見錯誤。

如果出現這種問題,必須使用GNU tar(gtar)來解壓縮分發版。可以從http://dev.mysql.com/downloads/os-solaris.html找到預編譯的Solaris版本。

Sun原生線程只在Solaris 2.5和更高版本中工作。對於版本2.4和更早版本,MySQL自動使用MIT-pthreads。請參見2.8.5節,「MIT-pthreads注意事項」

如果您運行configure時遇到下面的錯誤,說明編譯器安裝得有問題:

checking for restartable system calls... configure: error can not
run test programs while cross compiling

在這種情況下,應當將編譯器升級到較新的版本。還可以在config.cache檔案中插入下面的行來解決該問題:

ac_cv_sys_restartable_syscalls=${ac_cv_sys_restartable_syscalls='no'}

如果在SPARC上使用Solaris,建議使用編譯器gcc 2.95.23.2。可以從http://gcc.gnu.org/下載。請注意egcs 1.1.1gcc 2.8.1不能在SPARC上可靠地工作。

當使用gcc 2.95.2時建議的configure行:

CC=gcc CFLAGS="-O3" \
CXX=gcc CXXFLAGS="-O3 -felide-constructors -fno-exceptions -fno-rtti" \
./configure --prefix=/usr/local/mysql --with-low-memory \
    --enable-assembler

如果您使用UltraSPARC系統,在CFLAGSCXXFLAGS環境變數中加上-mcpu=v8 -Wa,-xarch=v8plusa性能可以提高4%

如果您有Sun Forte 5.0(或更新版)編譯器,可以運行:

CC=cc CFLAGS="-Xa -fast -native -xstrconst -mt" \
CXX=CC CXXFLAGS="-noex -mt" \
./configure --prefix=/usr/local/mysql --enable-assembler

要想用Sun Forte 編譯器建立64-位二進制,使用下面的配置選項:

CC=cc CFLAGS="-Xa -fast -native -xstrconst -mt -xarch=v9" \
CXX=CC CXXFLAGS="-noex -mt -xarch=v9" ASFLAGS="-xarch=v9" \
./configure --prefix=/usr/local/mysql --enable-assembler

要想使用gcc建立64-Solaris二進制,在CFLAGSCXXFLAGS增加-m64,並從configure行刪掉--enable-assembler

MySQL基準測試中,在UltraSPARC上使用32位模式的Forte 5.0,同使用帶-mcpu標記的gcc 3.2比較,速度提高了4%

如果建立了64位的mysqld二進制,速度要比32-位二進制慢4%,但是可以處理更多的線程和內存。

當為x86_64使用Solaris 10,您應當安裝用forcedirectio選項保存InnoDB檔案的檔案系統。(預設情況不用該選項來安裝)。如果不這樣做,當在該平台上使用InnoDB 儲存引擎時將會造成嚴重的性能下降。

如果fdatasyncsched_yield出現問題,您可以在configure行加LIBS=-lrt修復該問題。

對於早於WorkShop 5.3的編譯器,您可能需要編輯configure指令。應將該行:

#if !defined(__STDC__) || __STDC__ != 1

更該為:

#if !defined(__STDC__)

如果您用-Xc 選項打開__STDC__Sun 編譯器不能用Solaris pthreads.h 頭檔案編譯。這是一個Sun 問題(中斷的編譯器或include檔案)

如果運行mysqld時出現下面的錯誤消息,原因是您企圖不啟用-mt multi-thread選項而用Sun編譯器編譯MySQL

libc internal error: _rmutex_unlock: rmutex not held

-mt加到CFLAGSCXXFLAGS上並重新編譯。

如果您正使用gccSFW版本(Solaris 8安裝包內),運行configure之前您必須將/opt/sfw/lib加到環境變數LD_LIBRARY_PATH上。

如果您正使用從sunfreeware.com下載的gcc,會遇到許多問題。要想避免,應當在運行機器上重新編譯gccGNU binutils

如果您用gcc編譯MySQL時遇到下面的錯誤,說明gcc配置不適合Solaris的版本:

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'

在這種情況下正確的做法是得到最新版本的gcc,並用您當前的gcc編譯器編譯。至少對於Solaris 2.5,幾乎所有二進製版本的gcc有舊的不再使用的include檔案,中斷了所有使用線程的程式,也可能會中斷其它程式。

Solaris不提供靜態版本的系統庫(libpthreadslibdl),因此您不能用--static編譯MySQL。如果您試圖這樣做,會遇到下面的錯誤:

ld: fatal: library -ldl: not found
undefined reference to `dlopen'
cannot find -lrt

如果您連接您自己的MySQL客戶端程式,運行時會出現下面的錯誤:

ld.so.1: fatal: libmysqlclient.so.#:
open failed: No such file or directory

可以通過下面的方法避免該問題:

·         -Wl,r/full/path/to/libmysqlclient.so標記而不要用-Lpath)連接客戶端。

·         libmysqclient.so複製到/usr/lib

·         運行客戶端程式前,將libmysqlclient.so目錄的路徑名加到LD_RUN_PATH環境變數上。

如果您未安裝zlib-lz連接時configure出現問題,您有兩個選則:

·         如果您想要使用壓縮通信協議,您需要從ftp.gnu.org獲得並安裝zlib

·         構建MySQL時用--with-named-z-libs=no選項運行configure

如果您正使用gcc,向MySQL使用用戶定義函數(UDF)時出現問題,嘗試向UDF連接行新增-lgcc到。

如果想讓MySQL自動啟動,可以將support-files/mysql.server複製到/etc/init.d並建立/etc/rc3.d/S99mysql.server符號連接。

如果有太多程序試圖快速連接mysqld,您應當能再MySQL日誌只看見錯誤:

Error in accept: Protocol error

可以嘗試用--back_log=50選項啟動伺服器來解決該問題。(MySQL 4以前的版本中使用-O back_log=50

Solaris不支援setuid() 應用程式所需的內核檔案,因此如果您使用--user選項您不能從mysqld遇到內核檔案。

2.12.3.1. Solaris 2.7/2.8注意事項

一般情況,可以在Solaris 2.72.8中使用Solaris 2.6二進制。大多數Solaris 2.6發佈也適用Solaris 2.72.8

MySQL應當能夠自動檢測到新的Solaris版本並解決下面的問題。

Solaris 2.7/2.8include檔案中有一些問題。當使用gcc您會看見下面的錯誤:

/usr/include/widec.h:42: warning: `getwc' redefined
/usr/include/wchar.h:326: warning: this is the location of the previous
definition

如果出現該問題,修復的辦法是將/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。用任何一種方法修復後,應當刪掉config.cache並再次運行configure

如果運行make時遇到下面的錯誤,這是因為configure不能檢測到curses.h檔案(可能是因為/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 `;'

可以用下面任何一種方法解決該問題:

·         CFLAGS=-DHAVE_CURSES_H CXXFLAGS=-DHAVE_CURSES_H ./configure配置。

·         根據前面的討論編輯/usr/include/widec.h並重新configure

·         刪掉config.h檔案中的#define HAVE_TERM行並重新運行make

如果連結客戶端程式時連接器找不到-lz,問題可能是libz.so檔案安裝到了/usr/local/lib。可以用下面任何一種方法解決該問題:

·         LD_LIBRARY_PATH增加/usr/local/lib

·         增加到libz.so from /lib的連接。

·         如果使用Solaris 8,可以安裝Solaris 8 CD分發版中的可選項zlib

·         構建MySQL時用--with-named-z-libs=no選項運行configure

2.12.3.2. Solaris x86注意事項

x86 Solaris 8, 如果使用strip刪除調試符號,mysqld轉儲內核。

如果正在 Solaris x86上使用gccegcs,並且您碰到了在裝載時的內核轉儲問題,應該使用下列configure命令:

CC=gcc CFLAGS="-O3 -fomit-frame-pointer -DHAVE_CURSES_H" \
CXX=gcc \
CXXFLAGS="-O3 -fomit-frame-pointer -felide-constructors \
    -fno-exceptions -fno-rtti -DHAVE_CURSES_H" \
./configure --prefix=/usr/local/mysql

libstdc++庫和與C++異常處理來避免這個問題。

如果這沒有幫助,您應該編譯一個調試版本並且用一個蹤跡檔案運行它或在gdb下運行它。請參見E.1.3節,「在gdb環境下調試mysqld

2.12.4. BSD注意事項

本節提供在各種BSD Unix中使用MySQL的相關訊息。

2.12.4.1. FreeBSD注意事項

對於運行MySQL,推薦使用FreeBSD 4.x或更新版本,因為其線程包更加完整。要想遇到一個安全、穩定的系統,您應當只使用標記-RELEASEFreeBSD內核。

最容易因此是比較受喜歡的安裝方法是使用mysql-servermysql-client移植,可從http://www.freebsd.org得到。

使用這些移植的益處包括:

  • 一個全最佳化的工作在FreeBSD版本上的MySQL
  • 自動配置和構建。
  • 啟動指令安裝在/usr/local/etc/rc.d

·         pkg_info -L察看哪個檔案被安裝的能力

·         如果您在那台機器上不再想要MySQL,用pkg_delete完全刪除它們。

建議在FreeBSD 2.x版上使用 MIT-pthreads,在版本3和以上版本用原生線程。在一些2.2.x的以後版本使用原生線程運行是可能的,但是您可能碰到mysqld關掉的問題。

遺憾的是,FreeBSD使用的某些函數還不能完全保證線程安全。特別令人注意的是,包括gethostbyname()函數, MySQL使用該函數將主機名轉換為IP地址。在某些環境中,mysqld程序會突然造成100%CPU負荷,不再響應。如果您遇到該問題,嘗試使用--skip-name-resolve選項啟動MySQL

另外,還可以將FreeBSD 4.x中的MySQLLinuxThreads庫連接,這樣可以避免一些原生FreeBSD線程執行時的問題。為了更好地將LinuxThreads同原生線程進行對比,參見Jeremy Zawodny的文章FreeBSD or Linux for your MySQL Server? 地址:http://jeremy.zawodny.com/blog/archives/000697.html

FreeBSD使用LinuxThreads的已知問題有:

·         連接時間(wait_timeoutinteractive_timeoutnet_read_timeout)值不理想。現象是永久連接掛起較長時間,不能關閉,只有線程執行新命令時 'kill'線程方有效。

這可能是線程庫中的信號處理問題,信號不能中斷掛起的讀命令。期望在FreeBSD 5.0中修復。

MySQL構建程序需要GNU make(gmake)工作。如果沒有GNU make,必須在編譯MySQL前先安裝它。

建議的在FreeBSD中用gcc(2.95.2和以上版本)編譯和安裝MySQL的方法是:

CC=gcc CFLAGS="-O2 -fno-strength-reduce" \
    CXX=gcc CXXFLAGS="-O2 -fno-rtti -fno-exceptions \
    -felide-constructors -fno-strength-reduce" \
    ./configure --prefix=/usr/local/mysql --enable-assembler
gmake
gmake install
cd /usr/local/mysql
bin/mysql_install_db --user=mysql
bin/mysqld_safe &
 

如果configure使用MIT-pthreads,應當閱讀MIT-pthreads注意事項。請參見2.8.5節,「MIT-pthreads注意事項」

如果您從make install遇到一個它不能找到/usr/include/pthreads的錯誤,configure沒有檢測出您需要MIT-pthreads。要修復該問題,移走config.cache,然後用--with-mit-threads選項重新運行configure

確定讓您的名字解析程式安裝正確,否則當連接mysqld時,您可能會遇到解析延時或失敗。保證在/etc/hosts檔案中的localhost入口是正確的。/etc/hosts檔案應該以下面一行開始:

127.0.0.1       localhost localhost.your.domain

已知FreeBSD的檔案句柄限制預設值很低。請參見A.2.17節,「檔案未找到」。使用--open-files-limit選項執行mysqld_safe啟動伺服器,或在/etc/login.confmysqld用戶提高限制並用cap_mkdb /etc/login.conf重建它。如果您不使用預設名(即使用chpass mysqld-user-name),還要保證為該用戶設置在密碼檔案中的相應級別。請參見5.1.3節,「mysqld_safe:MySQL伺服器啟動指令」

FreeBSD將程序空間限制到512MB,即使系統有很多的可用RAM也如此。因此您可能會遇到如下所示錯誤:

Out of memory (Needed 16391 bytes)

在當前版本的FreeBSD(至少4.x和更高版本)中,您可以在/boot/loader.conf檔案中增加下面的條目並重啟機器增加該限制(不能在運行時間用sysctl命令更改這些設定值)

kern.maxdsiz="1073741824" # 1GB
kern.dfldsiz="1073741824" # 1GB
kern.maxssiz="134217728" # 128MB

在舊版本的FreeBSD中,必須重新編譯內核,以便更改程序的最大數據段空間。在這種情況下,應當查看LINT配置檔案中的MAXDSIZ選項查看更詳細的訊息。

如果MySQL的當前日期有問題,設置TZ變數將會有幫助。請參見附錄F:環境變數

2.12.4.2. NetBSD注意事項

為了在NetBSD上編譯,您需要GNU make,否則當make試圖在C++檔案上運行lint時,編譯將失敗。

2.12.4.3. OpenBSD 2.5版注意事項

OpenBSD 2.5上,可以用下列選項編譯帶原生線程的MySQL
CFLAGS=-pthread CXXFLAGS=-pthread ./configure --with-mit-threads=no

2.12.4.4. BSD/OS 2.x版注意事項

如果在編譯MySQL時,遇到下列錯誤, 說明虛擬內存的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並再次運行make。如果這還不行並且您正在使用bash,試試換到cshsh;一些BSDI用戶報告了使用bashulimit有問題。

如果您正在使用gcc,可能必須為configure使用--with-low-memory標誌才能編譯「sql_yacc.cc

如果MySQL的當前日期有問題,設置TZ變數將會有幫助。請參見附錄F:環境變數

2.12.4.5. BSD/OS 3.x版注意事項

升級到BSD/OS 3.1。如果不能升級,則安裝BSDI patch M300-038

在配置MySQL時,使用下列命令:

env CXX=shlicc++ CC=shlicc2 \
./configure \
    --prefix=/usr/local/mysql \
    --localstatedir=/var/mysql \
    --without-perl \
    --with-unix-socket-path=/var/mysql/mysql.sock

已知下面的項可以工作:

env CC=gcc CXX=gcc CXXFLAGS=-O3 \
./configure \
    --prefix=/usr/local/mysql \
    --with-unix-socket-path=/var/mysql/mysql.sock

如果您願意,可以改變目錄位置,或不指定任何位置而使用預設目錄。

如果在重負載下的性能有問題,試試使用--skip-thread-priority選項執行mysqld!這將以相同優先級運行所有線程;在BSDI 3.1上,可以得到較好的性能(至少直到BSDI可以修正其線程調度程式)

如果在編譯時遇到virtual memory exhausted錯誤,試試使用ulimit -v 80000並再次運行make。如果這還不行並且您正在使用bash,試試換到cshsh;一些BSDI用戶報告了使用bashulimit會有問題。

2.12.4.6. BSD/OS 4.x版注意事項

BSDI 4.x有一些線程有關的問題。如果您想要在這上面使用MySQL,應該安裝所有與線程相關的補丁,至少應該安裝M400-023

在一些 BSDI 4.x系統中,您可能會遇到共享庫問題。現象是不能執行任何客戶端程式,例如,mysqladmin。在這種情況下,需要重新配置,用disable-shared選項禁用庫的共享以便進行配置。

一些客戶在BSDI 4.0.1中遇到了嚴重問題,即mysqld二進制過一會兒不能打開資料表。這是因為一些庫/系統相關錯誤使mysqld未得到指令便更改了當前目錄。

修復方法是升級MySQL到最低3.23.34版或更高版,運行configure後,運行make前刪掉config.h中的行#define HAVE_REALPATH

請注意這說明您不能通過符號連接將資料庫目錄連接到另一個資料庫目錄,或通過符號連接將資料表連接到BSDI上的另一個資料庫。(可以通過符號連接連接到另一個硬盤)

2.12.5. 其它Unix注意事項

2.12.5.1. HP-UX 10.20版注意事項

HP-UX上編譯MySQL時,有一些「小」問題。我們推薦您使用gcc而不是HP-UX自己的編譯器,因為gcc可以生成更好的代碼!

我們推薦在HP-UX上使用gcc 2.95,不使用高度最佳化標誌(類似-O6),因為這在HP-UX 上可能不安全。

下面的configure行在gcc 2.95中應當工作:

CFLAGS="-I/opt/dce/include -fpic" \
CXXFLAGS="-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

下面的configure行在gcc 3.1中應當工作:

CFLAGS="-DHPUX -I/opt/dce/include -O3 -fPIC" CXX=gcc \
CXXFLAGS="-DHPUX -I/opt/dce/include -felide-constructors \
    -fno-exceptions -fno-rtti -O3 -fPIC" \
./configure --prefix=/usr/local/mysql \
    --with-extra-charsets=complex --enable-thread-safe-client \
    --enable-local-infile  --with-pthread \
    --with-named-thread-libs=-ldce --with-lib-ccflags=-fPIC
    --disable-shared

2.12.5.2. HP-UX 11.x版注意事項

由於在標準 HP-UX庫中有一些嚴重錯誤,試圖在HP-UX 11.0上運行MySQL前應當安裝下面的補丁:
PHKL_22840 Streams cumulative
PHNE_22397 ARPA cumulative

這樣可以解決線上程應用程式中運行recv()時得到EWOULDBLOCK和執行accept()時得到EBADF的問題。

如果您在未打補丁的HP-UX 11.x系統中使用gcc 2.95.1,可能會遇到下面的錯誤:

In file included from /usr/include/unistd.h:11,
                 from ../include/global.h:125,
                 from mysql_priv.h:15,
                 from item.cc:19:
/usr/include/sys/unistd.h:184: declaration of C function ...
/usr/include/sys/pthread.h:440: previous declaration ...
In file included from item.h:306,
                 from mysql_priv.h:158,
                 from item.cc:19:

問題是HP-UX沒有一致地定義pthreads_atfork()。它同/usr/include/sys/unistd.h184/usr/include/sys/pthreads.h440中的原型衝突。

一個解決辦法是將/usr/include/sys/unistd.h複製到MySQL/include並編輯unistd.h,對它進行更改以匹配pthreads.h中的定義。搜尋下列行:

extern int pthreads_atfork(void (*prepare)()void (*parent)(),
                                          void (*child)())

將它更改為:

extern int pthreads_atfork(void (*prepare)(void)void (*parent)(void),
                                          void (*child)(void))

更改完後,下面的configure行應當工作:

CFLAGS="-fomit-frame-pointer -O3 -fpic" CXX=gcc \
CXXFLAGS="-felide-constructors -fno-exceptions -fno-rtti -O3" \
./configure --prefix=/usr/local/mysql --disable-shared

如果您使用HP-UX 編譯器,可以使用下面的命令(已經用cc B.11.11.04進行了測試)

CC=cc CXX=aCC CFLAGS=+DD64 CXXFLAGS=+DD64 ./configure \
    --with-extra-character-set=complex

您可以忽略下面類型的任何錯誤:

aCC: warning 901: unknown option: `-3': use +help for online
documentation

如果運行configure時遇到下面的錯誤,請驗證在到HP-UX CC++編譯器的路徑前是否有到K&R編譯器的路徑:

checking for cc option to accept ANSI C... no
configure: error: MySQL requires an ANSI C compiler (and a C++ compiler).
Try gcc. See the Installation chapter in the Reference Manual.

不能編譯的另一個原因可能是您沒有按照前面所述定義+DD64標記。

對於HP-UX 11,另一個辦法是使用http://dev.mysql.com/downloads/提供的MySQL二進制,這是我們已經構建並測試過的。我們也收到了MySQLHP-UX 10.20二進制可以在HP-UX 11上成功運行的報告。如果您遇到問題,一定要檢查HP-UX補丁的版本。

2.12.5.3. IBM-AIX注意事項

Autoconf中沒有了xlC自動檢測,因此運行configure,需要設置許多變數。以下例子使用IBM編譯器:

export CC="xlc_r -ma -O3 -qstrict -qoptimize=3 -qmaxmem=8192 "
export CXX="xlC_r -ma -O3 -qstrict -qoptimize=3 -qmaxmem=8192"
export CFLAGS="-I /usr/local/include"
export LDFLAGS="-L /usr/local/lib"
export CPPFLAGS=$CFLAGS
export CXXFLAGS=$CFLAGS
 
./configure --prefix=/usr/local \
                --localstatedir=/var/mysql \
                --sbindir='/usr/local/bin' \
                --libexecdir='/usr/local/bin' \
                --enable-thread-safe-client \
                --enable-large-files
 

可以從http://www-frec.bull.com/找到上述編譯MySQL分發版的選項。

如果您將前面的configure行中的-O3改為-O2,必須刪掉-qstrict選項。這是對IBM C編譯器的限制。

如果您正在使用gccegcs編譯MySQL必須使用-fno-exceptions標誌,因為gcc/egcs的異常處理不是對線程安全的!(已經用egcs1.1測試過)。IBM彙編程式也有一些已知問題,當使用gcc時可以生成壞的代碼。

AIX 上使用egcsgcc 2.95,我們推薦下列configure行:

CC="gcc -pipe -mcpu=power -Wa,-many" \
CXX="gcc -pipe -mcpu=power -Wa,-many" \
CXXFLAGS="-felide-constructors -fno-exceptions -fno-rtti" \
./configure --prefix=/usr/local/mysql --with-low-memory

為了成功編譯,需要使用-Wa,-many選項。IBM知道該問題,但是由於工作區的原因,不急於修復它。我們不知道gcc 2.95是否需要-fno-exceptions選項,但是因為MySQL不使用例外,並且該選項可以產生快速的代碼,我們建議使用egcs/gcc時使用該選項。

如果彙編碼有問題,試試更改-mcpu=xxx選項以匹配您的CPU。一般情況可能需要使用power2powerpowerpc。另外,您可能需要使用604604e。我們不能絕對肯定但懷疑power一般應安全,即使在power2機器上也安全。

如果您不知道您的CPU是什麼樣的,可以執行uname -m命令。可以產生類似000514676700的字串,格式為xxyyyyyymmss,其中xxss總是00,yyyyyy是唯一的系統IDmmCPU PlanarID。從http://www16.boulder.ibm.com/pseries/en_US/cmds/aixcmds5/uname.htm可以找到這些值的圖資料表。

該圖資料表可以給出您可以使用的機器類型和機器型號,確定CPU的類型。

如果遇到信號問題(MySQL在高負載下出人意料地死掉),您可能已經發現了與線程和信號有關的一個OS 問題。在這種情況下,您可以用如下配置告訴MySQL不使用信號:

CFLAGS=-DDONT_USE_THR_ALARM CXX=gcc \
CXXFLAGS="-felide-constructors -fno-exceptions -fno-rtti \
-DDONT_USE_THR_ALARM" \
./configure --prefix=/usr/local/mysql --with-debug \
    --with-low-memory

這不影響MySQL的性能,但是有副作用,就是不能用mysqladmin killmysqladmin shutdown殺死在一個連接上「睡眠」的客戶端。相反,當客戶端發出下一個命令時,它將死掉。

AIX的一些版本上用libbind.a連結使得getservbyname()內核轉儲,這是AIX的一個問題並且應該報告IBM

對於AIX 4.2.1gcc,進行下面的更改。

配置完後,編輯config.hinclude/my_config.h,將下面的行:

#define HAVE_SNPRINTF 1

更改為:

#undef HAVE_SNPRINTF

最後需要在mysqld.cc中為initgroups ()新增:

#ifdef _AIX41
extern "C" int initgroups(const char *,int);
#endif

如果您需要為mysqld程序分配大量內存,只使用ulimit -d unlimited是不夠的。還可以需要修改mysqld_safe,增加下面的行:

export LDR_CNTRL='MAXDATA=0x80000000'

關於使用大量內存的訊息請查閱http://publib16.boulder.ibm.com/pseries/en_US/aixprggd/genprogc/lrg_prg_support.htm

2.12.5.4. SunOS 4注意事項

SunOS 4上,需要用MIT-pthreads編譯MySQL,反過來這意味著需要使用GNU make

一些SunOS 4系統的動態庫和libtool有問題。可以使用下列configure行來避免這個問題:

./configure --disable-shared --with-mysqld-ldflags=-all-static

當編譯readline時,可能會遇到關於重複定義的警告,可以忽略。

當編譯mysqld的時候,將會遇到implicit declaration of function警告,可以忽略。

2.12.5.5. Alpha-DEC-UNIX(Tru64)版注意事項

如果您在Digital Unix上使用egcs 1.1.2,應當升級到gcc 2.95.2,因為egcsDEC上有一些嚴重問題!

當在Digital UNIX下編譯線程程式時,文檔推薦對於cccxx使用-pthread選項和-lmach -lexc庫(除了-lpthread)。您應該像下面這樣運行configure

CC="cc -pthread" CXX="cxx -pthread -O" \
./configure --with-named-thread-libs="-lpthread -lmach -lexc -lc"

當編譯mysqld時,會看見下面的警告:

mysqld.cc: In function void handle_connections()':
mysqld.cc:626: passing long unsigned int *' as argument 3 of
accept(int,sockadddr *, int *)'

您可以放心地忽略這些警告,它們的發生是因為configure只能檢測出錯誤,而不是警告。

如果直接從命令行啟動伺服器,當退出時,可能有死掉的問題。(當您退出時,重要程序收到一個SIGHUP信號),如果如此,試著像這樣啟動伺服器:

nohup mysqld [options] &

nohup使得後面的命令忽視從終端發來的任何SIGHUP信號了。另外,通過運行safe_mysqld啟動伺服器,可以讓nohup使用mysqld。請參見5.1.3節,「mysqld_safe:MySQL伺服器啟動指令」

如果編譯mysys/get_opt.c時遇到問題,只需要從啟動檔案刪掉#define _NO_PROTO行。

如果使用CompaqCC編譯器,下面的configure應當工作:

CC="cc -pthread"
CFLAGS="-O4 -ansi_alias -ansi_args -fast -inline speed all -arch host"
CXX="cxx -pthread"
CXXFLAGS="-O4 -ansi_alias -ansi_args -fast -inline speed all \
    -arch host -noexceptions -nortti"
export CC CFLAGS CXX CXXFLAGS
./configure \
    --prefix=/usr/local/mysql \
    --with-low-memory \
    --enable-large-files \
    --enable-shared=yes \
    --with-named-thread-libs="-lpthread -lmach -lexc -lc"
gnumake

如果用共享庫編譯時libtool出現問題,應當能夠在連結mysql時通過下述命令解決該問題:

cd mysql
/bin/sh ../libtool --mode=link cxx -pthread  -O3 -DDBUG_OFF \
    -O4 -ansi_alias -ansi_args -fast -inline speed \
    -speculate all \ -arch host  -DUNDEF_HAVE_GETHOSTBYNAME_R \
    -o mysql  mysql.o readline.o sql_string.o completion_hash.o \
    ../readline/libreadline.a -lcurses \
    ../libmysql/.libs/libmysqlclient.so  -lm
cd ..
gnumake
gnumake install
scripts/mysql_install_db

2.12.5.6. Alpha-DEC-OSF/1注意事項

如果遇到編譯問題並安裝了DEC CCgcc,嘗試這樣運行configure

CC=cc CFLAGS=-O CXX=gcc CXXFLAGS=-O3 \
./configure --prefix=/usr/local/mysql

如果遇到c_asm.h檔案的問題,可以建立並使用一個「啞(dummy)c_asm.h檔案:

touch include/c_asm.h
CC=gcc CFLAGS=-I./include \
CXX=gcc CXXFLAGS=-O3 \
./configure --prefix=/usr/local/mysql

請注意從http://ftp.support.compaq.com/public/unix/下載最新的DEC(Compaq)補丁可以修復ld程式的下面問題。

OSF1 V4.0D和編譯器"DEC C V5.6-071 on Digital UNIX V4.0 (Rev. 878)" 上,編譯器有了一些奇怪的行為(未定義asm標誌)/bin/ld好像也被破壞(當連結mysqld時,發生_exit undefined問題)。在這個系統上,從OSF 4.0C的版本替換了/bin/ld後,我們設法用下列configure命令行編譯MySQL

CC=gcc CXX=gcc CXXFLAGS=-O3 ./configure --prefix=/usr/local/mysql

Digital編譯器「C++ V6.1-029」,下列命令應該工作:

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 -noexceptions -nortti
export CC CFLAGS CXX CXXFLAGS
./configure --prefix=/usr/mysql/mysql \
            --with-mysqld-ldflags=-all-static --disable-shared \
            --with-named-thread-libs="-lmach -lexc -lc"

OSF1的某些版本中,alloca()函數被破壞,通過刪除定義'HAVE_ALLOCA'的「config.h的行更正它。

alloca()函數也可能在/usr/include/alloca.h裡面有一個不正確的原型,源於此的警告可以忽略。

configure將自動地使用下列線程庫: --with-named-thread-libs="-lpthread -lmach -lexc -lc"

當使用gcc時,也可以試試這樣運行configure

CFLAGS=-D_PTHREAD_USE_D4 CXX=gcc CXXFLAGS=-O3 ./configure ....

如果您的信號有問題(MySQL出人意料地在高負載下死掉),可能遇到了一個線程和信號有關的OS 問題。在這種情況下,您可以告訴MySQL如下配置不使用信號:

CFLAGS=-DDONT_USE_THR_ALARM \
CXXFLAGS=-DDONT_USE_THR_ALARM \
./configure 

這不影響MySQL性能,但是有副作用,就是不能用mysqladmin killmysqladmin shutdown殺死在一個連接上「睡眠」的客戶端。相反,當客戶端發出下一個命令時,它將死掉。

使用gcc 2.95.2,會遇到下面的編譯錯誤:

sql_acl.cc:1456: Internal compiler error in `scan_region',
at except.c:2566
Please submit a full bug report.

要修復該問題,應當進入sql目錄並剪切、複製最後gcc,但應將-O3 改為-O0 (或如果編譯行沒有任何-O選項,應在gcc後面增加-O0)。之後,可以回到頂級目錄並重新運行make

2.12.5.7. SGI Irix注意事項

如果使用Irix 6.5.3或更新版,如果用擁有CAP_SCHED_MGT權限的用戶(例如root)運行mysqld或用下面的shell命令給mysqld伺服器該權限,mysqld能夠建立線程:

chcap "CAP_SCHED_MGT+epi" /opt/mysql/libexec/mysqld

可能需要在運行configure後且在編譯前定義config.h裡面的一些符號。

在一些Irix實現中,alloca()函數被破壞。如果mysqld伺服器死於一些SELECT語句,把config.h定義HAVE_ALLOCHAVE_ALLOCA_H的行刪除即可。如果mysqladmin create不工作,把config.h定義HAVE_READDIR_R的行刪除,您也可能必須刪除HAVE_TERM_H行。

SGI推薦將本頁上的所有補丁作為一個整體來安裝:

http://support.sgi.com/surfzone/patches/patchset/6.2_indigo.rps.html

至少,應該安裝最新的核心卷(rollup)、最新的rld卷和最新的libc卷。

很明確,對於pthreads支援,需要本頁上所有的POSIX補丁:

http://support.sgi.com/surfzone/patches/patchset/6.2_posix.rps.html

如果在編譯mysql.cc時,遇到類似於下面的錯誤:

"/usr/include/curses.h", line 82: error(1084):
invalid combinatiof type

那麼應在MySQL原始碼樹的頂級目錄輸入下列命令:

extra/replace bool curses_bool < /usr/include/curses.h > include/curses.h
make

應該也有安排上的問題報告。如果只有一個線程正在運行,事情會變慢的。通過啟動另外一個客戶端來避免它,這可以導致此後其它線程的執行速度增加210倍。這是Irix線程難以理解的問題;可能必須臨時準備找出解決方案直到它能被修正。

 

如果您正在用gcc編譯,可以使用下列configure命令:

 

CC=gcc CXX=gcc CXXFLAGS=-O3 \
./configure --prefix=/usr/local/mysql --enable-thread-safe-client \
    --with-named-thread-libs=-lpthread

在用原生Irix CC++編譯器7.3.1.2Irix 6.5.11,下面的項工作:

CC=cc CXX=CC CFLAGS='-O3 -n32 -TARG:platform=IP22 -I/usr/local/include \
-L/usr/local/lib' CXXFLAGS='-O3 -n32 -TARG:platform=IP22 \
-I/usr/local/include -L/usr/local/lib' \
./configure --prefix=/usr/local/mysql --with-innodb --with-berkeley-db \
    --with-libwrap=/usr/local \
    --with-named-curses-libs=/usr/local/lib/libncurses.a

2.12.5.8. SCO UNIX和OpenServer 5.0.x版注意事項

當前的移植僅在「sco3.2v5.0.5,sco3.2v5.0.6」和「sco3.2v5.0.7」系統上進行了測試,在「sco 3.2v4.2」上的移植也有很大進展。OpenServer 5.0.8(Legend)具有原生線程,允許檔案大於2GB。目前最大的檔案可以達到2GB

我們可以在OpenServer上用gcc 2.95.3用下面的configure命令編譯MySQL

CC=gcc CXX=gcc ./configure --prefix=/usr/local/mysql \
    --enable-thread-safe-client --with-innodb \
    --with-openssl --with-vio --with-extra-charsets=complex

ftp://ftp.sco.com/pub/openserver5/opensrc/gnutools-5.0.7Kj可以得到gcc

該開發系統需要在OpenServer 5.0.6OpenServer Execution Environment Supplement oss646Boss656BOpenSource庫位於 gwxlibs。所有OpenSource工具位於opensrc目錄。可以從ftp://ftp.sco.com/pub/openserver5/opensrc/獲得。

我們建議使用最新的MySQL產品發佈。

SCO提供的作業系統補丁:OpenServer 5.0.[0-6]ftp://ftp.sco.com/pub/openserver5OpenServer 5.0.7ftp://ftp.sco.com/pub/openserverv5/507

SCO提供的關於安全修復的訊息:Server 5.0.xftp://ftp.sco.com/pub/security/OpenServer

OpenSever 5.0.x系統上最大的檔案的大小為2GB

OpenServer 5.0.x上,可供串緩衝區、clist和鎖定記錄分配的總內存不能超出60MB

串緩衝區的分配單位為4096 字節的頁,clists70字節,鎖定記錄為64字節,因此為:

(NSTRPAGES * 4096) + (NCLIST * 70) + (MAX_FLCKREC * 64) <= 62914560

按照以下步驟來配置Database Services選項。如果您不確定應用程式是否需要,參見隨應用程式提供的文檔。

1.    root登錄。

2.    編輯/etc/conf/sdevice.d/suds檔案啟用SUDS驅動程式。將第2個域內的N更改為Y

3.    使用mkdev aioHardware/Kernel Manager來啟用對asynchronous I/O的支援,並重新連接內核。要想讓用戶鎖定內存用於該類I/O,更新aiomemlock(F)檔案。應當對該檔案進行更新,包括進可以使用AIO的用戶和可以鎖定的最大數量的內存。

4.    許多應用程式使用setuid二進制,因此您只能指定單個用戶 。請參見隨應用程式提供的文檔來看是否應用程式是這種情況。

完成該程序後,重新啟動系統,建立包括這些更改的新內核。

預設情況,/etc/conf/cf.d/mtune中的條目設置為:

Value           Default         Min             Max
-----           -------         ---             ---
NBUF            0               24              450000
NHBUF           0               32              524288
NMPBUF          0               12              512
MAX_INODE       0               100             64000
MAX_FILE        0               100             64000
CTBUFSIZE       128             0               256
MAX_PROC        0               50              16000
MAX_REGION      0               500             160000
NCLIST          170             120             16640
MAXUP           100             15              16000
NOFILES         110             60              11000
NHINODE         128             64              8192
NAUTOUP         10              0               60
NGROUPS         8               0               128
BDFLUSHR        30              1               300
MAX_FLCKREC     0               50              16000
PUTBUFSZ        8000            2000            20000
MAXSLICE        100             25              100
ULIMIT          4194303         2048            4194303
* Streams Parameters
NSTREAM         64              1               32768
NSTRPUSH        9               9               9
NMUXLINK        192             1               4096
STRMSGSZ        16384           4096            524288
STRCTLSZ        1024            1024            1024
STRMAXBLK       524288          4096            524288
NSTRPAGES       500             0               8000
STRSPLITFRAC    80              50              100
NLOG            3               3               3
NUMSP           64              1               256
NUMTIM          16              1               8192
NUMTRW          16              1               8192
* Semaphore Parameters
SEMMAP          10              10              8192
SEMMNI          10              10              8192
SEMMNS          60              60              8192
SEMMNU          30              10              8192
SEMMSL          25              25              150
SEMOPM          10              10              1024
SEMUME          10              10              25
SEMVMX          32767           32767           32767
SEMAEM          16384           16384           16384
* Shared Memory Parameters
SHMMAX          524288          131072          2147483647
SHMMIN          1               1               1
SHMMNI          100             100             2000
FILE            0               100             64000
NMOUNT          0               4               256
NPROC           0               50              16000
NREGION         0               500             160000

我們建議將這些值設置為:

NOFILES應當為40962048

MAXUP應當為2048

要想更改內核,進入/etc/conf/bin並使用./idtune name parameter來更改。例如,要將SEMMS改為200,用root帳號執行命令:

# cd /etc/conf/bin
# ./idtune SEMMNS 200

我們建議對該系統進行調節,但是使用的正確參數值取決於訪問應用程式或資料庫的用戶數目和資料庫空間(也就是使用的緩衝池)。下面的項影響/etc/conf/cf.d/stune中定義的內核參數:

SHMMAX(推薦設定值:128MB)SHMSEG(推薦設定值:15)。這些參數影響建立用戶緩衝池的MySQL資料庫引擎。

NOFILESMAXUP至少應達到2048

MAXPROC至少應當設置到3000/4000(取決於用戶數)或更大值。

建議使用下面的公式來計算SEMMSLSEMMNSSEMMNU的值:

SEMMSL = 13

發現13最適合程序和MySQL

SEMMNS = SEMMSL * 系統上運行的db伺服器數目。

SEMMNS設置為SEMMSL值乘以您在該系統上一次運行的db伺服器的(最大)數目。

SEMMNU = SEMMNS

SEMMNU值設置為等於SEMMNS值。可以將該值設置為75%SEMMNS,但是這是一個保守的估計。

至少需要安裝"SCO OpenServer Linker and Application Development Libraries"OpenServer開發系統來使用gcc。您不能只使用GCC Dev系統,而不安裝它們。

您應當獲得FSU PTHREADS安裝軟件包並先安裝它。可以從http://moss.csc.ncsu.edu/~mueller/ftp/pub/PART/pthreads.tar.gz獲得。您還可以從 ftp://ftp.zenez.com/pub/zenez/prgms/FSU-threads-3.14.tar.gz獲得預編譯的安裝軟件包。

FSU Pthreads能用帶tcpipSCO UNIX 4.2編譯,或使用OpenServer 3.0Open Desktop 3.0(OS 3.0 ODT 3.0),安裝帶有使用一個GCC 2.5.XSCO開發系統。對ODTOS 3.0,將需要一個GCC 2.5.x的良好移植。沒有一個良好的移植會有很多問題。對這個產品的移植需要SCO UNIX開發系統,沒有它,缺少所需的庫和連結器。還需要SCO-3.2v4.2-includes.tar.gz。該檔案包含SCO 開發include 檔案的更改這是構建MySQL所需要的。需要用這些修改的頭檔案替換已有系統的include檔案。可以從 ftp://ftp.zenez.com/pub/zenez/prgms/SCO-3.2v4.2-includes.tar.gz獲得。

為了在系統上構造FSU Pthreads,需要做的工作是運行GNU make。啟動FSU-threads-3.14.tar.gz中的Makefile生成FSU-線程。

thread/src目錄下運行./configure並且選擇SCO OpenServer選項。這個命令拷貝Makefile.SCO5」Makefile。然後運行make

為了在預設的「/usr/include目錄安裝,作為root登錄,然後cd 到「thread/src目錄,並運行make install

記得在製作MySQL時要使用GNU make

註釋:如果您不是作為root啟動safe_mysqld,將可能每程序只有 預設的110個打開的檔案。mysqld將在日誌檔案寫下關於此的註解。

SCO 3.2V4.2,應當使用FSU PTHREADS 3.14或更新版。以下configure命令應當工作:

CFLAGS="-D_XOPEN_XPG4" CXX=gcc CXXFLAGS="-D_XOPEN_XPG4" \
./configure \
    --prefix=/usr/local/mysql \
    --with-named-thread-libs="-lgthreads -lsocket -lgen -lgthreads" \
    --with-named-curses-libs="-lcurses"

您可能遇到include檔案的某些問題。在這種情況下,您能在ftp://www.mysql.com/pub/mysql/Downloads/SCO/SCO-3.2v4.2-includes.tar.gz找到新的SCO特定的include檔案。您應該在MySQL原始碼樹的「include目錄下打開這個檔案。

SCO開發注意事項:

  • MySQL應該自動地檢測FSU Pthreads並且用-lgthreads -lsocket -lgthreads選項連結mysqld
  • SCO開發庫在FSU Pthreads是重入(reentrant)的。SCO宣稱它的庫函數是重入的,因此他們一定在FSU Pthreads中是重入的。在 OpenServer上的 FSU Pthreads 試圖使用SCO方案製作重入的庫。
  • FSU Pthreads(至少在ftp::/ftp.zenez.com的版本)連結了GNU malloc,如果您遇到內存使用的問題,確定gmalloc.o包含在libgthreads.alibgthreads.so中。

·         FSU Pthreads中,下列系統使用是pthreads感知的:read()write()getmsg()connect()accept()select()wait()

·         CSSA-2001-SCO.35.2(補丁列為定制erg711905-dscr_remap安全補丁(版本 2.0.0))中斷FSU線程並使mysqld不穩定。如果您想在 OpenServer 5.0.6機器上運行mysqld必須刪除它。

·         如果您使用SCO OpenServer 5,可能需要用-DDRAFT7 in CFLAGS重新編譯FSU pthreads。否則,mysqld啟動時InnoDB會掛起。

·         SCOftp://ftp.sco.com/pub/openserver5提供了OpenServer 5.0.x的作業系統補丁。

·         SCOftp://ftp.sco.com/pub/security/sseftp://ftp.sco.com/pub/security/sse提供了OpenServer 5.0.x的安全修復和libsocket.so.2

·         Pre-OSR506安全修復。在ftp://stage.caldera.com/pub/security/openserver/ftp://stage.caldera.com/pub/security/openserver/CSSA-2001-SCO.10/提供了libsocket.so.2libresolv.so.1telnetd修復,以及在pre-OSR506系統上的安裝說明。

最好在編譯/使用MySQL之前安裝這些補丁。

Legend/ OpenServer 6.0.0有原生線程,沒有2GB檔案大小限制。

2.12.5.9. SCO UnixWare 7.1.x和OpenUNIX 8.0.0版注意事項

我們建議使用最新的MySQL產品發佈。

我們可以用下面的configure命令UnixWare 7.1.x中編譯MySQL

CC="cc" CFLAGS="-I/usr/local/include" \
CXX="CC" CXXFLAGS="-I/usr/local/include" \
./configure --prefix=/usr/local/mysql \
    --enable-thread-safe-client --with-berkeley-db=./bdb \
    --with-innodb --with-openssl --with-extra-charsets=complex

如果您想要使用gcc,必須使用gcc 2.95.3或更新版。

CC=gcc CXX=g++ ./configure --prefix=/usr/local/mysql

當構建MySQL時不使用UnixWare 7.1.4OpenServer 6.0.0中的Berkeley DB版本。MySQL使用自己的Berkeley DB。用來構建靜態和動態庫的configure命令src_directory/bdb/build_unix/中,但是它不在MySQL自己的BDB版本中。工作區如下所示。

1.    按常規配置MySQL

2.    進入cdbdb/build_unix/

3.    -p Makefile複製(cp)Makefile.sav

4.    使用同樣的選項並運行../dist/configure

5.    運行gmake

6.    cp -p Makefile.sav Makefile

7.    進入頂級源目錄並運行gmake

允許生成共享和動態庫並工作。

SCOftp://ftp.sco.com/pub/unixware7提供了UnixWare 7.1.1的作業系統補丁,ftp://ftp.sco.com/pub/unixware7/713/ 提供了UnixWare 7.1.3的作業系統補丁, UnixWare 7.1.4的見ftp://ftp.sco.com/pub/unixware7/714/, OpenUNIX 8.0.0的見 ftp://ftp.sco.com/pub/openunix8

SCO提供的安全修復相關訊息:OpenUNIXftp://ftp.sco.com/pub/security/OpenUNIXUnixWare ftp://ftp.sco.com/pub/security/UnixWare

預設情況,在UnixWare 7.1.1系統中最大檔案的大小為1GB,但是UnixWare 7.1.4中檔案大小限制是1 TB(用VXFS)。一些OS實用程式 的限制是2GB。在UnixWare 7中可能的最大檔案大小是1TB(用VXFS)。

UnixWare 7.1.4中,您不需要採取措施來獲得大檔案支援,但在UnixWare 7.1.x的以前版本中需要啟用大檔案支援,可以運行fsadm

# fsadm -Fvxfs -o largefiles /
# fsadm /         * Note
# ulimit unlimited
# cd /etc/conf/bin
# ./idtune SFSZLIM 0x7FFFFFFF     ** Note
# ./idtune HFSZLIM 0x7FFFFFFF     ** Note
# ./idbuild -B
 
* This should report "largefiles".
** 0x7FFFFFFF represents infinity for these values.

shutdown重啟系統。

預設情況,/etc/conf/cf.d/mtune中的條目設置為:

Value           Default         Min             Max
-----           -------         ---             ---
SVMMLIM         0x9000000       0x1000000       0x7FFFFFFF
HVMMLIM         0x9000000       0x1000000       0x7FFFFFFF
SSTKLIM         0x1000000       0x2000          0x7FFFFFFF
HSTKLIM         0x1000000       0x2000          0x7FFFFFFF

我們建議將這些值設置為:

SDATLIM 0x7FFFFFFF
HDATLIM 0x7FFFFFFF
SSTKLIM 0x7FFFFFFF
HSTKLIM 0x7FFFFFFF
SVMMLIM 0x7FFFFFFF
HVMMLIM 0x7FFFFFFF
SFNOLIM 2048
HFNOLIM 2048

我們建議對該系統進行調節,但是使用的正確參數值取決於訪問應用程式或資料庫的用戶數目和資料庫空間(也就是使用的緩衝池)。下面的項影響/etc/conf/cf.d/stune中定義的內核參數:

SHMMAX(推薦設定值:128MB)SHMSEG(推薦設定值:15)。這些參數影響建立用戶緩衝池的MySQL資料庫引擎。

SFNOLIMHFNOLIM至少應達到2048

NPROC至少應當設置到3000/4000(取決於用戶數)

建議使用下面的公式來計算SEMMSLSEMMNSSEMMNU的值:

SEMMSL = 13

據發現13最適合程序和MySQL

SEMMNS = SEMMSL * 系統上運行的db伺服器數目。

SEMMNS設置為SEMMSL值乘以您在該系統上一次運行的db伺服器的(最大)數目。

SEMMNU = SEMMNS

SEMMNU值設置為等於SEMMNS值。可以將該值設置為75%SEMMNS,但是這是一個保守的估計。

2.12.5.10. SCO OpenServer 6.0.x版注意事項

OpenServer6的主要改進包括:

·         大檔案支援,可達到1 TB

·         多處理器支援,從4個處理器增加到32個處理器。

·         增加的內存支援,可達到64GB

·         UnixWare的功能延伸到OpenServer6

·         性能的改進

OpenServer6.0.0具有:

·         /bin,用於與OpenServer5.0.x相同行為的命令。

·         /u95/bin用於標準的命令,例如大檔案系統(LFS)支援。

·         /udk/bin用於UnixWare 7.1.4中相同的命令,預設是LFS支援。

下面是在OpenServer6上設置PATH的指導。如果用戶想使用傳統的OpenServer5.0.x,則路徑應當首先為/bin。如果用戶需要LFS支援,則 路徑應當為/u95/bin/bin。如果用戶首選UnixWare 7支援,則路徑應為/udk/bin/u95/bin/bin

我們建議使用最新的MySQL產品發佈。

我們可以在OpenServer 6.0.x用下面的configure命令編譯MySQL

CC="cc" CFLAGS="-I/usr/local/include" \
CXX="CC" CXXFLAGS="-I/usr/local/include" \
./configure --prefix=/usr/local/mysql \
    --enable-thread-safe-client --with-berkeley-db=./bdb \
    --with-innodb --with-openssl --with-extra-charsets=complex \
    --enable-readline

如果您想要使用gcc,必須使用gcc2.95.3或更新版。

CC=gcc CXX=g++ ./configure --prefix=/usr/local/mysql

當構建MySQL時不使用UnixWare 7.1.4OpenServer 6.0.0中的Berkeley DB版本。MySQL使用自己的Berkeley DB。用來構建靜態和動態庫的configure命令src_directory/bdb/build_unix/中,但是它不在MySQL自己的BDB版本中。工作區如下所示。

1.    按常規配置MySQL

2.    進入cdbdb/build_unix/

3.    -p Makefile複製(cp)Makefile.sav

4.    使用同樣的選項並運行../dist/configure

5.    運行gmake

6.    cp -p Makefile.sav Makefile

7.    進入頂級源目錄並運行gmake

允許生成共享和動態庫並工作。OpenServer6.0.0 還需要MySQL原始碼樹的補丁和適用於bdb/dist/config.guessconfig.guess的補丁。您可以從ftp://ftp.zenez.com/pub/zenez/prgms/mysql-4.1.12-osr6-patches.tar.gzftp://ftp.zenez.com/pub/zenez/prgms/mysql-4.x.x-osr6-patches下載補丁。有一個README檔案可以提供幫助。

SCOftp://ftp.sco.com/pub/openserver6提供了OpenServer6的作業系統補丁。

SCOftp://ftp.sco.com/pub/security/OpenServer提供關於安全修復的訊息。

預設情況,在OpenServer6.0.0系統的最大檔案大小為1TB。一些作業系統工具的限制是2GB。在UnixWare 7中最大檔案大小可以是1TB(用 VXFSHTFS)。

預設情況,/etc/conf/cf.d/mtune中的條目設置為:

Value           Default         Min             Max
-----           -------         ---             ---
SVMMLIM         0x9000000       0x1000000       0x7FFFFFFF
HVMMLIM         0x9000000       0x1000000       0x7FFFFFFF
SSTKLIM         0x1000000       0x2000          0x7FFFFFFF
HSTKLIM         0x1000000       0x2000          0x7FFFFFFF

我們建議將這些值設置為:

SDATLIM 0x7FFFFFFF
HDATLIM 0x7FFFFFFF
SSTKLIM 0x7FFFFFFF
HSTKLIM 0x7FFFFFFF
SVMMLIM 0x7FFFFFFF
HVMMLIM 0x7FFFFFFF
SFNOLIM 2048
HFNOLIM 2048

我們建議對該系統進行調節,但是使用的正確參數值取決於訪問應用程式或資料庫的用戶數目和資料庫空間(也就是使用的緩衝池)。下面的項影響/etc/conf/cf.d/stune中定義的內核參數:

SHMMAX(推薦設定值:128MB)SHMSEG(推薦設定值:15)。這些參數影響建立用戶緩衝池的MySQL資料庫引擎。

SFNOLIMHFNOLIM至少應達到2048

NPROC至少應當設置到3000/4000(取決於用戶數)

建議使用下面的公式來計算SEMMSLSEMMNSSEMMNU的值:

SEMMSL = 13

發現13最適合程序和MySQL

SEMMNS = SEMMSL * 系統上運行的db伺服器數目。

SEMMNS設置為SEMMSL值乘以您在該系統上一次運行的db伺服器的(最大)數目。

SEMMNU = SEMMNS

SEMMNU值設置為等於SEMMNS值。可以將該值設置為75%SEMMNS,但是這是一個保守的估計。

2.12.6. OS/2注意事項

MySQL使用太多的打開檔案。因此,應該增加類似下面的東西到CONFIG.SYS檔案:
SET EMXOPT=-c -n -h1024

如果不這樣做,將可能碰到下列錯誤:

File 'xxxx' not found (Errcode: 24)

OS/2 Warp 3上使用MySQL時,要求FixPack 29或以上版本。用OS/2 Wrap 4,要求FixPack 4或以上版本。這是Pthreads庫的一個要求。MySQL必須安裝在支援長檔案名的一個分區上,如HPFSFAT32等等。

INSTALL.CMD指令必須從OS/2自己的CMD.EXE運行並且不能工作在替代外殼如4OS2.EXE」。

scripts/mysql-install-db指令已經被重新命名了:它稱為install.cmd並且是一個REXX指令,將安裝 預設的MySQL安全配置並為MySQL建立WorkPlace Shell圖標。

動態模塊支援通過編譯但沒有充分測試,動態模塊應該使用Pthreads運行時刻庫編譯。

 

gcc -Zdll -Zmt -Zcrtdll=pthrdrtl -I../include -I../regex -I.. \
    -o example udf_example.cc -L../lib -lmysqlclient udf_example.def
mv example.dll example.udf

註釋:由於OS/2的限制,UDF模塊名字的詞幹不能超過8個字元。模塊儲存在/mysql2/udf目錄;safe-mysqld.cmd指令將把這個目錄放在BEGINLIBPATH環境變數中。當使用UDF模塊時,指定的延伸名被忽略--它被假定為.udf。例如,在 Unix上,共享模塊可能被命名為「example.so並且可以像這樣從它裝載函數:

mysql> CREATE FUNCTION metaphon RETURNS STRING SONAME 'example.so'

OS/2, 模塊被命名為example.udf,但是不能指定模塊延伸名:

mysql> CREATE FUNCTION metaphon RETURNS STRING SONAME 'example'

2.13. Perl安裝注意事項

PerlMySQL的支援借助DBI/DBD客戶端接口。接口要求Perl 5.6.0或以後版本。如果您的Perl版本更舊,接口將不能工作

如果想要在Perl DBI中使用事務,需要有1.2216版或更新版DBD::mysql。建議使用2.9003版或更新版。

如果您使用MySQL 4.1客戶端庫,必須使用DBD::mysql 2.9003或更新版。

MySQL分發版不包含Perl支援。可以從http://search.cpan.org獲得Unix需要的模塊,或在Windows中使用ActiveState ppm程式。以下章節描述了如何做。

如果您想要運行MySQL基準指令,必須安裝Perl支援。請參見7.1.4節,「MySQL基準套件」

2.13.1. 在Unix中安裝Perl

MySQL Perl支援也要求您安裝了MySQL客戶端編程支援(庫和頭檔案)。大多數安裝中安裝了必要的檔案。但是,如果您在Linux中從RPM檔案安裝MySQL,確保安裝了開發者RPM。客戶端程式在客戶端RPM中,但是客戶端編程支援在開發者RPM

如果您想要安裝Perl支援,需要的檔案能從http://search.cpan.orgCPAN (Comprehensive Perl Archive Network)獲得。

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前安裝Data::Dumper模塊。

還可以下載tar檔案壓縮格式的模塊分發版,並手動構建模塊。例如,解壓縮和構建DBI分發版的過程為:

1.     將分發版解壓縮到當前目錄:

2.            shell> gunzip < DBI-VERSION.tar.gz | tar xvf -

該命令建立目錄 DBI-VERSION

3.    進入解壓縮分發版的頂級目錄:

4.            shell> cd DBI-VERSION

5.    構建分發版並編譯:

6.            shell> perl Makefile.PL
7.            shell> make
8.            shell> make test
9.            shell> make install

make test命令很重要,因為它驗證模塊正在工作。注意:在您DBD::mysql安裝期間運行該命令試驗接口代碼時,MySQL伺服器必須正在運行,否則測試將失敗。

無論何時您安裝一個新版本的MySQL,重建並且重新安裝DBD::mysql分發版是一個好主意, 特別是在升級MySQL後,觀察所有異常,如DBI指令失敗。

如果您沒有權限在系統目錄下安裝Perl模塊,或如果您安裝本地Perl模塊,下列參考書可以幫助您:http://servers.digitaldaze.com/extensions/perl/modules.html#modules

在標題「Installing New Modules that Require Locally Installed Modules下面搜尋。

2.13.2. 在Windows下安裝ActiveState Perl

Windows中,應當按照以下步驟安裝帶ActiveState PerlMySQL DBD模塊:

·         http://www.activestate.com/Products/ActivePerl/獲得ActiveState Perl並安裝。

·         打開控制台窗口(DOS窗口)

·         如果需要,設置HTTP_proxy變數。例如,您可以試試:

·                set HTTP_proxy=my.proxy.com:3128

·         啟動PPM程式:

·                C\> C\perl\bin\ppm.pl

·         如果您還沒有安裝DBI,則安裝:

·                ppm> install DBI

·         如果成功,運行下面的命令:

·                install\
·                ftp://ftp.de.uu.net/pub/CPAN/authors/id/JWIED/DBD-mysql-1.2212.x86.ppd

該程序應當在ActiveState Perl 5.6或更新版本中工作。

如果您不能使上述步驟工作,應該安裝MyODBC驅動程式並且通過ODBC連接MySQL伺服器:

use DBI;
$dbh= DBI->connect("DBI:ODBC:$dsn",$user,$password) ||
die "Got error $DBI::errstr when connecting to $dsn\n";

2.13.3. 使用Perl DBI/DBD接口的問題

如果Perl報告它不能發現../mysql/mysql.so模塊,可能試因為Perl不能定位共享庫libmysqlclient.so

可以使用下面的方法修復該問題:

·         perl Makefile.PL -static -config而不要用perl Makefile.PL編譯DBD::mysql分發版。

·         libmysqlclient.so複製到其它共享庫所在的目錄 (可能為/usr/lib /lib)

·         修改用來編譯DBD::mysql-L選項,反應libmysqlclient.so的實際位置。

·         Linux中,您可以將libmysqlclient.so的目錄路徑名增加到/etc/ld.so.conf檔案。

·         libmysqlclient.so的目錄路徑名增加到LD_RUN_PATH環境變數。一些系統使用LD_LIBRARY_PATH

注意如果連接器沒有找到另一個庫,您還可能需要修改-L選項。例如,如果因為libc/lib下並且連接命令指定了-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(當編譯Perl客戶端時檢查生成mysql.somake的輸出)-L選項應指定libgcc.a在系統中的安裝目錄的路徑名。

該問題的另一個原因是PerlMySQL沒有用gcc編譯。在這種情況下,您可以用gcc編譯二者來解決。

當您運行測試時您會從DBD::mysql看見下面的錯誤:

t/00base............install_driver(mysql) failed:
Can't load '../blib/arch/auto/DBD/mysql/mysql.so' for module DBD::mysql:
../blib/arch/auto/DBD/mysql/mysql.so: undefined symbol:
uncompress at /usr/lib/perl5/5.00503/i586-linux/DynaLoader.pm line 169.

這意味著您需要在連接行包括-lz 壓縮庫。可以通過更改檔案lib/DBD/mysql/Install.pm的下列行來實現:

$sysliblist .= " -lm";

更改為:

$sysliblist .= " -lm -lz";

然後,您必須運行make realclean 然後重新安裝。

如果您想要在SCO上安裝DBI,需要在DBI-xxx 和每個子目錄中編輯Makefile。請注意下面的更新假定使用gcc 2.95.2或更新版:

舊:                                 新:
CC = cc                               CC = gcc
CCCDLFLAGS = -KPIC -W1,-Bexport       CCCDLFLAGS = -fpic
CCDLFLAGS = -wl,-Bexport              CCDLFLAGS =
 
LD = ld                               LD = gcc -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 -G -fpic
OPTIMISE = -Od                        OPTIMISE = -O1
 
舊:
CCCFLAGS = -belf -dy -w0 -U M_XENIX -DPERL_SCO5 -I/usr/local/include
 
新:
CCFLAGS = -U M_XENIX -DPERL_SCO5 -I/usr/local/include

這些更改是必需的,因為用icccc編譯的Perl動態裝載器不裝載DBI模塊。

如果您想要在不支援動態連結(例如 SCO)的系統中使用Perl模塊,可以生成一個包括DBIDBD::mysql的靜態版本的Perl。方法是生成一個用DBI代碼連接的Perl版本,並將它安裝到當前Perl的頂級目錄。然後構建一個含DBD代碼連接的Perl版本並安裝。

SCO中,必須將下面的環境變數設置為:

LD_LIBRARY_PATH=/lib:/usr/lib:/usr/local/lib:/usr/progressive/lib

Or

LD_LIBRARY_PATH=/usr/lib:/lib:/usr/local/lib:/usr/ccs/lib:\
    /usr/progressive/lib:/usr/skunk/lib
LIBPATH=/usr/lib:/lib:/usr/local/lib:/usr/ccs/lib:\
    /usr/progressive/lib:/usr/skunk/lib
MANPATH=scohelp:/usr/man:/usr/local1/man:/usr/local/man:\
    /usr/skunk/man:

首先,在DBD分發版的安裝目錄運行下述命令來建立一個包括靜態連接的DBD模塊的Perl

shell> perl Makefile.PL -static -config
shell> make
shell> make install
shell> make perl

然後必須安裝新的Perlmake perl的輸出資料表示安裝時需要執行的make命令。在SCO中,為make -f Makefile.aperl inst_perl MAP_TARGET=perl

然後,使用剛剛建立的Perl,在DBD::mysql分發版的安裝目錄運行下述命令來建立另一個Perl,應包括靜態連接的DBD::mysql

shell> perl Makefile.PL -static -config
shell> make
shell> make install
shell> make perl

最後,應當安裝新的Perlmake perl輸出指示了使用的命令。


這是MySQL參考手冊的翻譯版本,關於MySQL參考手冊,請訪問dev.mysql.com.。原始參考手冊為英文版,與英文版參考手冊相比,本翻譯版可能不是最新的。