<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ??一站式輕松地調用各大LLM模型接口,支持GPT4、智譜、豆包、星火、月之暗面及文生圖、文生視頻 廣告
                ### 第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.1.1.?Operating Systems Supported by MySQL") 。 2.??? **確定你應該使用的分發的版本**。可獲得**MySQL**的多個版本,大部分有多種分發版。你可以選擇包含二進制(預編譯)代碼或源碼形式的預打包分發。如果不能確定,則使用二進制分發版。對于想看我們的最新開發并幫助我們測試新代碼的用戶,我們提供了公共訪問接口,可以訪問我們最新的源碼樹。為了確定你應該使用的分發的版本和類型,請參見[2.1.2節,“選擇要安裝的MySQL分發版”](# "2.1.2.?Choosing Which MySQL Distribution to Install")。 3.??? **下載想安裝的分發版。**對于能從其獲得**MySQL**的站點列表,請參見[2.1.3節,“怎樣獲得MySQL”](# "2.1.3.?How to Get MySQL")。用來驗證分發版完整性的指令參見[2.1.4節,“通過MD5校驗和或GnuPG驗證軟件包的完整性``”](# "2.1.4.?Verifying Package Integrity Using MD5 Checksums or GnuPG")。 4.??? **安裝分發版。**針對二進制代碼和源碼分發版的安裝說明在[2.2節,“使用二進制分發版的標準MySQL安裝”](# "2.2.?Standard MySQL Installation Using a Binary Distribution")中講述。針對二進制代碼和源碼分發版的安裝說明在[2.8節,“使用源碼分發版安裝MySQL”](# "2.8.?MySQL Installation Using a Source Distribution")中講述。 **注**釋:如果你想要將當前版本的MySQL升級到最新版本,而不是首次安裝MySQL,關于升級過程和升級前應考慮的問題請參見[2.10節,“升級MySQL”](# "2.10.?Upgrading MySQL")。 如果遇到安裝問題,[2.12節,“具體操作系統相關的注意事項”](# "2.12.?Operating System-Specific Notes")中提供了解決平臺相關問題的信息。 5.??? **進行安裝后的設置。**安裝MySQL后,請閱讀[2.9節,“安裝后的設置和測試”](# "2.9.?Post-Installation Setup and Testing")。本節介紹了重要的信息,可以確保MySQL服務器正確工作。本節還描述了如何使尚未有密碼的初始MySQL用戶賬戶的安全。不管你是用二進制代碼還是源碼分發版來安裝**MySQL**,這些過程均適用。 如果要運行MySQL基準腳本,必須使用支持MySQL的Perl。請參見[2.13節,“Perl安裝注意事項”](# "2.13.?Perl Installation Notes")。 ### 2.1.?一般安裝問題 [ 2.1.1. MySQL支持的操作系統](#)[ 2.1.2. 選擇要安裝的MySQL分發版](#)[ 2.1.3. 怎樣獲得MySQL](#)[ 2.1.4. 通過MD5校驗和或GnuPG驗證軟件包的完整性``](#)[ 2.1.5. 安裝布局](#) 在安裝MySQL前,你應該: 1.??? 確定是否MySQL將運行在你的平臺上。 2.??? 選擇安裝的分發版。 3.??? 下載分發版并驗證其完整性。 本節包含執行上述步驟必需的信息。之后,你可以按照本章中后面幾節的說明來安裝選擇的分發版。 ### 2.1.1.?MySQL支持的操作系統 本節列出了可以運行MySQL的操作系統。 我們使用GNU Autoconf,因此將**MySQL**移植到所有使用Posix線程和C++編譯器的現代系統是可能的。(要求服務器支持線程。如果只是編譯客戶端代碼,則只需要C++編譯器)。我們主要在Linux(SuSE和Red Hat)、FreeBSD和Sun Solaris(版本8和9)上使用并開發本軟件。 已經報告**MySQL可以**在下列操作系統/線程包的組合上成功地進行編譯。注意,對于很多操作系統,原生的線程僅支持最新的版本。 ·???????? 有原生線程的AIX 4.x和5.x。請參見[2.12.5.3節,“IBM-AIX注意事項”](# "2.12.5.3.?IBM-AIX notes")。 ·???????? Amiga。 ·???????? 包括MIT-pthreads包的BSDI 2.x。請參見[2.12.4.4節,“BSD/OS 2.x版注意事項”](# "2.12.4.4.?BSD/OS Version 2.x Notes")。 ·???????? 有原生線程的BSDI3.0,3.1和4.x。請參見[2.12.4.4節,“BSD/OS 2.x版注意事項”](# "2.12.4.4.?BSD/OS Version 2.x Notes")。 ·???????? 有原生線程的Digital Unix 4.x。請參見[2.12.5.5節,“Alpha-DEC-UNIX(Tru64)版注意事項”](# "2.12.5.5.?Alpha-DEC-UNIX Notes (Tru64)").。 ·???????? 包括MIT-pthreads包的FreeBSD 2.x。請參見[2.12.4.1節,“FreeBSD注意事項”](# "2.12.4.1.?FreeBSD Notes")。 ·???????? 有原生線程的FreeBSD 3.x和4.x。請參見[2.12.4.1節,“FreeBSD注意事項”](# "2.12.4.1.?FreeBSD Notes")。 ·???????? 有LinuxThreads的FreeBSD 4.x。請參見[2.12.4.1節,“FreeBSD注意事項”](# "2.12.4.1.?FreeBSD Notes")。 ·???????? 有DCE線程或MIT-pthreads包的HP-UX 10.20。請參見[2.12.5.1節,“HP-UX 10.20版注意事項”](# "2.12.5.1.?HP-UX Version 10.20 Notes")。 ·???????? 有原生線程的HP-UX 11.x。請參見[2.12.5.2節,“HP-UX 11.x版注意事項”](# "2.12.5.2.?HP-UX Version 11.x Notes")。 ·???????? 有LinuxThreads 0.7.1+或glibc 2.0.7+,適合各種CPU的Linux 2.0+。請參見[2.12.1節,“Linux注意事項”](# "2.12.1.?Linux Notes")。 ·???????? Mac OS X。請參見[2.12.2節,“Mac OS X注意事項”](# "2.12.2.?Mac OS X Notes")。 ·???????? NetBSD 1.3/1.4 Intel和NetBSD 1.3 Alpha(需要GNU make)。請參見[2.12.4.2節,“NetBSD注意事項”](# "2.12.4.2.?NetBSD Notes")。 ·???????? Novell NetWare 6.0。請參見[2.6節,“在NetWare中安裝MySQL”](# "2.6.?Installing MySQL on NetWare")。 ·???????? 有原生線程的OpenBSD > 2.5。包括MIT-pthreads包的OpenBSD < 2.5。請參見[2.12.4.3節,“OpenBSD 2.5版注意事項”](# "2.12.4.3.?OpenBSD 2.5 Notes")。 ·???????? OS/2 Warp 3, FixPack 29和OS/2 Warp 4, FixPack 4. 參見[2.12.6節,“OS/2注意事項”](# "2.12.6.?OS/2 Notes")。 ·???????? 有最新FSU Pthreads移植包的SCO OpenServer 5.0.X。請參見[2.12.5.8節,“SCO UNIX和OpenServer 5.0.x版注意事項”](# "2.12.5.8.?SCO UNIX and OpenServer 5.0.x Notes")。 ·???????? SCO UnixWare 7.1.x。請參見[2.12.5.9節,“SCO UnixWare 7.1.x和OpenUNIX 8.0.0版注意事項”](# "2.12.5.9.?SCO UnixWare 7.1.x and OpenUNIX 8.0.0 Notes")。 ·???????? SCO Openserver 6.0.x。請參見[2.12.5.10節,“SCO OpenServer 6.0.x版注意事項”](# "2.12.5.10.?SCO OpenServer 6.0.x Notes")。 ·???????? 有原生線程的SGI Irix 6.x。請參見[2.12.5.7節,“SGI Irix注意事項”](# "2.12.5.7.?SGI Irix Notes")。 ·???????? SPARC和x86上有原生線程的Solaris 2.5和以上版本。請參見[2.12.3節,“Solaris注意事項”](# "2.12.3.?Solaris Notes")。 ·???????? 包括MIT-pthreads包的SunOS 4.x。請參見[2.12.3節,“Solaris注意事項”](# "2.12.3.?Solaris Notes")。 ·???????? Tru64 Unix。請參見[2.12.5.5節,“Alpha-DEC-UNIX(Tru64)版注意事項”](# "2.12.5.5.?Alpha-DEC-UNIX Notes (Tru64)")。 ·???????? Windows 9x、Me、NT、2000、XP和2003。請參見[2.3節,“在Windows上安裝MySQL”](# "2.3.?Installing MySQL on Windows")。 并非所有支持的平臺同等適合運行MySQL。根據以下因素確定某個平臺適合高負荷關鍵任務MySQL服務器的程度: ·???????? 線程庫的穩定性。可能某個平臺的反應不錯,但MySQL的穩定性取決于它所調用的線程庫,不管其它部分是否完善。 ·???????? 內核和線程庫利用均衡多處理器(SMP)系統的能力。換句話說,當進程創建一個線程時,應允許線程運行原進程所運行CPU之外的其它處理器。 ·???????? 內核和線程庫運行在短范圍頻繁獲取和釋放互斥體而不需要過多地交換內容的多個線程的能力。如果執行pthread_mutex_lock()時產生的CPU時間太短,則會嚴重影響MySQL。如果不關注該問題,增加過多的CPU實際會降低MySQL的速度。 ·???????? 常規文件系統的穩定性和性能。 ·???????? 如果數據庫表很大,文件系統處理大文件的能力和處理效率。 ·???????? 我們在該平臺上使用MySQL AB的經驗水平。如果我們熟悉一個平臺,我們可以對具體平臺進行優化并固定編譯時間。我們還可以提供建議如何更好地為MySQL配置系統。 ·???????? 我們在類似配置下所完成的內部測試的數量。 ·???????? 在同一平臺類似配置下成功運行MySQL的用戶數。如果該數字很高,則說明遇到具體平臺問題的幾率要小得多。 根據前面的標準,允許MySQL的最好的平臺是x86,安裝SuSE Linux,使用2.4或2.6內核,和ReiserFS(或類似Linux分發版)和安裝了 Solaris(2.7-9)的SPARC。FreeBSD排第三位,但我們真正希望一旦線程庫得到改進,它也可以提高排名。從某一觀點我們還希望提高其它MySQL目前正在上面編譯、允許的平臺的排名,但穩定性和性能上可以要求不同等級。這需要我們與MySQL所依賴的操作系統和庫組件開發人員共同努力。如果你對改進某個組件感興趣,可能影響其開發,需要更多的關于MySQL如何能運行得更好的說明,請向我們的MySQL internals發送郵件。請參見[1.7.1.1節,“The MySQL郵件列表”](# "1.7.1.1.?The MySQL Mailing Lists")。 請注意前面的對比并不是說一個操作系統總體上比另一個操作系統要好。我們只是討論選擇一個OS來專門運行MySQL。記住了這一點,如果考慮更多的因素,對比結果可能會不同。在某些情況下,一個OS比另一個OS好的原因只是我們已經為具體平臺做出了更多的努力來進行測試和優化。我們只是陳述我們的觀點幫助你選擇運行MySQL的平臺。 ### 2.1.2.?選擇要安裝的MySQL分發版 [ 2.1.2.1. 選擇要安裝的MySQL版本](#)[ 2.1.2.2. 選擇分發格式](#)[ 2.1.2.3. 如何發布更新以及何時發布更新](#)[ 2.1.2.4. 發布原則:發行版本中沒有已知的缺陷](#)[ 2.1.2.5. MySQL AB編譯的MySQL二進制版本](#) 準備安裝MySQL時,你應確定使用哪個版本。MySQL的開發有幾個發布系列,可以選擇最適合你要求的一個版本。確定了安裝的版本后,便可以選擇分發版。有二進制或源碼發布格式。 #### 2.1.2.1.?選擇要安裝的MySQL版本 首先要作出決策,你是否想要使用最新的開發版本或最終的穩定版本。在MySQL開發過程中,同時存在多個發布系列,每個發布處在成熟度的不同階段: ·???????? MySQL 5.2是最新開發的發布系列,是將執行新功能的系列。不久的將來可以使用Alpha發行,以便感興趣的用戶進行廣泛的測試。 ·???????? MySQL 5.1是當前穩定(產品質量)發布系列。只針對漏洞修復重新發布;沒有增加會影響穩定性的新功能。 ·???????? MySQL 5.0是前一穩定(產品質量)發布系列。只針對嚴重漏洞修復和安全修復重新發布;沒有增加會影響該系列的重要功能。 ·???????? MySQL 4.0和3.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變更史*](# "Appendix?D.?MySQL Change History")。在大多數alpha版本中也有新的命令和擴展。alpha版本也可能有主要代碼更改等開發。但我們在發布前一定對其進行測試。 ·???????? ** beta**意味著該版本功能是完整的,并且所有的新代碼被測試了,沒有增加重要的新特征,應該沒有已知的缺陷。當alpha版本至少一個月沒有出現報導的致命漏洞,并且沒有計劃增加導致已經實施的功能不穩定的新功能時,版本則從alpha版變為**beta**版。 在以后的**beta**版、發布版或產品發布中,所有API、外部可視結構和SQL命令列均不再更改。 ·???????? **rc**是發布代表;是一個發行了一段時間的beta版本,看起來應該運行正常。只增加了很小的修復。(發布代表即以前所稱的gamma 版) ·???????? 如果沒有后綴,這意味著該版本已經在很多地方運行一段時間了,而且沒有非平臺特定的缺陷報告。只增加了關鍵漏洞修復修復。這就是我們稱為一個產品(穩定)或“通用”版本的東西。 ** MySQL**的命名機制于其它產品稍有不同。一般情況,我們可以很放心地使用已經投放市場兩周而沒有被相同發布系列的新版本所代替的版本。 ** MySQL**所有版本都經過我們的標準測試和基準測試運行,以保證它們可相當安全地使用。因為標準測試不斷擴充以檢測以前發現的缺陷,測試套件一直在改進之中。 所有版本都至少已經用下列套件進行了測試: ·???????? 一個內部測試套件 mysql-test目錄包含一整套測試案例。我們針對每個二進制服務器進行這些測試。關于該測試套件的詳細信息參見[27.1.2節,“MySQL測試套件”](# "27.1.2.?MySQL Test Suite")。 ·???????? MySQL基準套件 它運行一定范圍的普通查詢。它也是一個測試,檢測最新的優化處理是否真的使代碼更快。請參見[7.1.4節,“MySQL基準套件”](# "7.1.4.?The MySQL Benchmark Suite")。 ·???????? crash-me測試 這嘗試決定數據庫支持什么功能和它的能力與限制是什么。請參見[7.1.4節,“MySQL基準套件”](# "7.1.4.?The MySQL Benchmark Suite")。 另一個測試是在內部生產環境中使用最新**MySQL**版本,至少在一臺機器上。我們有超過100GB的數據可供使用。 #### 2.1.2.2.?選擇分發格式 選擇了MySQL的安裝版本后,要做的第二項決策是你是使用源碼分發版還是二進制分發版。大多數情況,如果你的平臺上已經有了一個二進制分發版,你可能使用二進制分發版。大多數平臺可以使用原格式二進制分發版,例如Linux使用RPM文件,Mac OS X使用DMG安裝軟件包。也可以使用Zip文件或壓縮**tar**文件。 選擇二進制分發版的理由: ·???????? 二進制分發版比源碼分發版更容易安裝。 ·???????? 為了滿足不同用戶的需求,我們提供了兩種不同的二進制版本:一個是編譯過的帶非事務儲存引擎(小的快速庫),另一個配置了最重要的擴展選項,例如事務安全表。兩個版本均從相同的源碼分發版編譯而來。所有本地MySQL客戶端均可以連接任一版本的MySQL服務器。 擴展MySQL庫分發版標有-max后綴,配置了與**mysqld-max**相同的選項。請參見[5.1.2節,“mysq**ld-max擴展My**SQL服務器”](# "5.1.2.?The mysqld-max Extended MySQL Server")。 如果想要使用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開發小組,漏洞修復傳遞給源碼庫,你便可以訪問它。發布實際發行后才會出現漏洞修復。 ·???????? 如果你想要閱讀(或修改)構成**MySQL**的C和C++代碼,你應該拿到源碼分發版。源碼總是最終的手冊。 ·???????? 源碼分發版也比二進制的分發版包含更多的測試和實例。 #### 2.1.2.3.?如何發布更新以及何時發布更新 ** MySQL**進展的相當快,我們想要與其它**MySQL**用戶分享它。當我們有一個看來其它人似乎需要的非常有用的功能時,我們就試著制作一個發行版本。 我們也嘗試幫助那些需要很容易實現的功能的用戶,我們也關注我們授權的用戶想要什么,我們更特別關注我們支持的客戶想要什么,并且盡力幫助他們。 沒有人一定要下載一個新版本,新聞小節中將告訴你新版本是否有一些你確實想要的東西。請參見[附錄D:*MySQL變更史*](# "Appendix?D.?MySQL Change History")。 當更新**MySQL**時,我們使用下列策略: ·???????? 將發布每個系列。每次發布時,版本的最后一個數字為同一系列前一版本的基礎上加1。 ·???????? 穩定的測試過的產品版本每年準備出現1-2次,但是如果發現小缺陷,只有缺陷修復的一個版本將被發行。 ·???????? 工作版本/對舊版本的漏洞修復文件每4-8周出現一次。 ·???????? 對一些平臺的二進制分發版,主要版本由我們制作。其它人可以為其它系統制作二進制分發版,但是可能不多見。 ·???????? 我們一旦識別并修正了非緊急但煩人的缺陷,則立即將其發布,可以從公共BitKeeper庫中立即得到修復代碼,并將包含到下一發布版中。 - 在任何情況下,如果在一個發行中有一個致命缺陷,我們將盡快制作一個新版本來修復。(我們希望其它公司也這樣做!) #### 2.1.2.4.?發布原則:發行版本中沒有已知的缺陷 我們投入了大量的時間和工作來使我們的發布沒有缺陷。我們從來沒有發布過含有*已知*致命重復性缺陷的單一MySQL版本。(“致命”缺陷指能在正常應用中導致MySQL癱瘓的缺陷,對于正常查詢產生錯誤答案,或有安全問題)。 我們已經將所有公開問題、缺陷和由設計決策決定的事宜記入文件。請參見[A.8節,“MySQL中的已知事宜”](# "A.8.?Known Issues in MySQL")。 我們的目標是修復一切可以修復的東西,而不會使穩定的MySQL版本變得不穩定。在某些情況,這意味著我們可以在開發版本中修復問題,而不是在穩定的 (產品) 版本。自然,我們會將這些問題記入文檔,以便用戶能知道。 下面描述了我們如何操作: ·???????? 我們通過我們的客戶支持列表、在[http://bugs.mysql.com/](http://bugs.mysql.com/)缺陷數據庫和MySQL外部郵件列表來監控缺陷。 ·???????? 當前版本中所有被報導的缺陷被輸入缺陷數據庫。 ·???????? 當我們修復缺陷,我們總是為其設計一次測試案例,并將其包括進測試系統中,以確保不會漏檢使缺陷再現。(所有修復的缺陷中大約90%的具有測試案例)。 ·???????? 為添加到MySQL中的所有新功能創建測試案例。 ·???????? 我們開始構建新的MySQL發布前,我們確保修復了MySQL版本(3.23.x、4.0.x、4.1.x、5.0.x等等)中所有被報導的重復性缺陷。如果某些內容不能修復(由于MySQL內部的一些設計決策),我們在本手冊中記錄下來。請參見[A.8節,“MySQL中的已知事宜”](# "A.8.?Known Issues in MySQL")。 ·???????? 我們在所有支持二進制的平臺(15+平臺)上構建并運行我們的測試套件和基準套件。 ·???????? 如果在某個平臺上測試或基準套件失敗,我們不會公布二進制。如果問題是由于源碼中的普通缺陷,我們將進行修復并在所有系統上構建并測試。 ·???????? 構建和測試過程需要2-3天。如果在該過程中我們收到致命缺陷相關報告(例如,會造成內核轉儲),我們將修復該問題并重新啟動構建過程。 ·???????? 在[http://dev.mysql.com/](http://dev.mysql.com/)上公布二進制后,我們則向mysql發出公告消并announce郵件列表。請參見[1.7.1.1節,“The MySQL郵件列表”](# "1.7.1.1.?The MySQL Mailing Lists")。公告消息包含所有發布的更改列表和已知問題。只有部分發版不需要**已知的問題**部分。 ·???????? 為了讓我們的用戶快速訪問最新MySQL功能,我們每4-8周產生一個新的MySQL發布。每天構建源碼快照,可以從[http://downloads.mysql.com/snapshots.php](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安裝”](# "2.2.?Standard MySQL Installation Using a Binary Distribution")。 對于Windows分發版,參見[2.3節,“在Windows上安裝MySQL”](# "2.3.?Installing MySQL on Windows")。 使用腳本 Build-tools/Do-compile生成這些分發版,可以編譯源碼并使用**scripts/make_binary_distribution**創建二進制tar.gz文件。 通過下面的編譯器和選項來配置并構建二進制分發版。可以查看各個庫二進制**tar**文件分發版的腳本**bin/mysqlbug**內的變量COMP_ENV_INFO和 CONFIGURE_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 ·???????? 使用LinuxThreads的FreeBSD 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.3a或2.90.27或**gcc** 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郵件列表”](# "1.7.1.1.?The MySQL Mailing Lists")。 在我們的站點中列出的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/](http://dev.mysql.com/downloads/))獲取當前版本和下載指令信息。關于MySQL下載鏡像站點的完整的最新列表,參見[ http://dev.mysql.com/downloads/mirrors.html](http://dev.mysql.com/downloads/mirrors.html)。你可以在此發現MySQL鏡像站點和如何報告有問題的或過時的鏡像站點的信息。 我們的主鏡像站點位于[http://mirrors.sunsite.dk/mysql/](http://mirrors.sunsite.dk/mysql/)。 ### 2.1.4.?通過MD5校驗和或GnuPG驗證軟件包的完整性`` [ 2.1.4.1. 驗證MD5校驗和](#)[ 2.1.4.2. 通過GnuPG進行簽名檢查``](#)[ 2.1.4.3. 使用RPM進行簽名檢查``](#) 下載了適合你的需求的MySQL安裝軟件包并在安裝前,你應當確保它的完整性,沒有被篡改。MySQL AB提供了3種完整性檢查方法: ·???????? MD5校驗和 ·???????? 使用GnuPG、GNU 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-st和ard-5.1.2-alpha-linux-i686.tar.gz ~~~ ~~~ ? aaab65abbec64d5e907dcd41b8699945? mysql-st和ard-5.1.2-alpha-linux-i686.tar.gz ~~~ 你應當驗證結果校驗和(十六進制數字字符串)與下載頁上相關安裝軟件包下面顯示的校驗和相匹配。 **注釋:**一定要驗證**歸檔文件**(例如,.zip或.tar.gz文件)的校驗和,而不是其中包括的文件。 請注意并非所有操作系統支持**md5sum**命令。在一些操作系統上,只是稱為**md5,**另一些根本不裝載它。在Linux中,它是**GNU Text Utilities**安裝軟件包的一部分,適合各種平臺。可以從[http://www.gnu.org/software/textutils/](http://www.gnu.org/software/textutils/)下載源碼。如果你已經安裝了OpenSSL,還可以使用命令**openssl md5 package_name**。[http://www.fourmilab.ch/md5/](http://www.fourmilab.ch/md5/)提供了DOS/Windows使用的**md5**命令行實用工具。**winMd5Sum**是一個圖形MD5檢查工具,可以從[http://www.nullriver.com/index/products/winmd5sum](http://www.nullriver.com/index/products/winmd5sum)獲得。 #### 2.1.4.2.?通過GnuPG進行簽名檢查`` 驗證安裝軟件包完整性和真實性的另一個方法是使用加密簽名。這比使用MD5校驗和更可靠,但是需要更多的工作。 MySQL AB用**GnuPG**(GNU Privacy Guard)對下載MySQ軟件包進行簽名。**GnuPG**是開放源碼,不同于Phil Zimmermann的聞名的Pretty Good Privacy (**PGP**)。關于**GnuPG**和如何獲得并安裝到你的系統的詳細信息,請參見[http://www.gnupg.org/](http://www.gnupg.org/)。大多數Linux分發版裝有默認安裝的**GnuPG**。關于**GnuPG**的詳細信息,參見 [ http://www.openpgp.org/](http://www.openpgp.org/)。 要想驗證具體安裝軟件包的簽名,你首先需要獲得MySQL AB公共GPG構建密鑰的拷貝。可以從[http://www.keyserver.net/](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擴展名。例如: <table border="1" cellpadding="0" id="table1"><tr><td> <p>分發文件</p></td> <td> <p><span> <span>mysql-st</span><span>和<span>ard-5.1.2-alpha-linux-i686.tar.gz</span></span></span></p></td> </tr><tr><td> <p>簽名文件</p></td> <td> <p><span> <span>mysql-st</span><span>和<span>ard-5.1.2-alpha-linux-i686.tar.gz.asc</span></span></span></p></td> </tr></table> 確保兩個文件保存在同一目錄下,運行下面的命令來驗證分發文件的簽名: ~~~ 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.4.2.?Signature Checking Using GnuPG")。 ### 2.1.5.?安裝布局 這節描述安裝MySQL AB提供的二進制代碼和源碼分發時創建的默認目錄布局。如果你安裝其它供應商提供的分發,應使用其它布局。 在Windows中,MySQL 5.1的默認安裝目錄是C:\Program Files\MySQL\MySQL Server 5.1。(一些Windows用戶寧愿安裝到原來的默認安裝目錄 C:\mysql。然而,子目錄布局仍然相同)。安裝目錄包括以下子目錄: <table border="1" cellpadding="0" id="table2"><tr><td width="116"> <p><strong><span>目錄</span></strong></p></td> <td width="249"> <p><strong><span>目錄內容</span></strong></p></td> </tr><tr><td width="116"> <p> <span>bin</span></p></td> <td width="249"> <p>客戶端程序和<strong><span>mysqld</span></strong>服務器</p></td> </tr><tr><td width="116"> <p><tt> <span>data</span></tt></p></td> <td width="249"> <p>日志文件,數據庫</p></td> </tr><tr><td width="116"> <p> <span>Docs</span></p></td> <td width="249"> <p>文檔</p></td> </tr><tr><td width="116"> <p> <span>examples</span></p></td> <td width="249"> <p>示例程序和腳本</p></td> </tr><tr><td width="116"> <p> <span>include</span></p></td> <td width="249"> <p>包含<span>(</span>頭<span>)</span>文件</p></td> </tr><tr><td width="116"> <p> <span>lib</span></p></td> <td width="249"> <p>庫</p></td> </tr><tr><td width="116"> <p> <span>scripts</span></p></td> <td width="249"> <p>實用工具腳本</p></td> </tr><tr><td width="116"> <p> <span>share</span></p></td> <td width="249"> <p>錯誤消息文件</p></td> </tr></table> 使用MySQL AB's Linux RPM分發進行安裝后,將在以下系統目錄產生文件: <table border="1" cellpadding="0" id="table3"><tr><td width="224"> <p><strong><span>目錄</span></strong></p></td> <td width="261"> <p><strong><span>目錄內容</span></strong></p></td> </tr><tr><td width="224"> <p> <span>/usr/bin</span></p></td> <td width="261"> <p>客戶端程序和腳本</p></td> </tr><tr><td width="224"> <p> <span>/usr/sbin</span></p></td> <td width="261"> <p><strong> <span>mysqld</span></strong>服務器</p></td> </tr><tr><td width="224"> <p> <span>/var/lib/mysql</span></p></td> <td width="261"> <p>日志文件,數據庫</p></td> </tr><tr><td width="224"> <p> <span> /usr/share/doc/packages</span></p></td> <td width="261"> <p>文檔</p></td> </tr><tr><td width="224"> <p> <span>/usr/include/mysql</span></p></td> <td width="261"> <p>包含<span>(</span>頭<span>)</span>文件</p></td> </tr><tr><td width="224"> <p> <span>/usr/lib/mysql</span></p></td> <td width="261"> <p>庫</p></td> </tr><tr><td width="224"> <p> <span>/usr/share/mysql</span></p></td> <td width="261"> <p>錯誤消息和字符集文件</p></td> </tr><tr><td width="224"> <p> <span>/usr/share/sql-bench</span></p></td> <td width="261"> <p>基準程序</p></td> </tr></table> 在Unix中,可以在你選擇的安裝位置解壓并安裝**tar**文件二進制分發(typically /usr/local/mysql)并在該位置創建以下目錄: <table border="1" cellpadding="0" id="table4"><tr><td width="128"> <p><strong><span>目錄</span></strong></p></td> <td width="285"> <p><strong><span>目錄內容</span></strong></p></td> </tr><tr><td width="128"> <p> <span>bin</span></p></td> <td width="285"> <p>客戶端程序和<strong><span>mysqld</span></strong>服務器</p></td> </tr><tr><td width="128"> <p> <span>data</span></p></td> <td width="285"> <p>日志文件,數據庫</p></td> </tr><tr><td width="128"> <p> <span>docs</span></p></td> <td width="285"> <p>文檔,<span>ChangeLog</span></p></td> </tr><tr><td width="128"> <p> <span>include</span></p></td> <td width="285"> <p>包含<span>(</span>頭<span>)</span>文件</p></td> </tr><tr><td width="128"> <p> <span>lib</span></p></td> <td width="285"> <p>庫</p></td> </tr><tr><td width="128"> <p> <span>scripts</span></p></td> <td width="285"> <p><strong> <span>mysql_install_db</span></strong></p></td> </tr><tr><td width="128"> <p> <span>share/mysql</span></p></td> <td width="285"> <p>錯誤消息文件</p></td> </tr><tr><td width="128"> <p> <span>sql-bench</span></p></td> <td width="285"> <p>基準程序</p></td> </tr></table> 配置并編譯完源碼分發后,便開始安裝。默認情況下,可以將文件安裝到/usr/local,即在下面的子目錄中: <table border="1" cellpadding="0" id="table5"><tr><td width="140"> <p><strong><span>目錄</span></strong></p></td> <td width="213"> <p><strong><span>目錄內容</span></strong></p></td> </tr><tr><td width="140"> <p> <span>bin</span></p></td> <td width="213"> <p>客戶端程序和腳本</p></td> </tr><tr><td width="140"> <p> <span>include/mysql</span></p></td> <td width="213"> <p>包含<span>(</span>頭<span>)</span>文件</p></td> </tr><tr><td width="140"> <p> <span>info</span></p></td> <td width="213"> <p><span>Info</span>格式的文檔</p></td> </tr><tr><td width="140"> <p> <span>lib/mysql</span></p></td> <td width="213"> <p>庫</p></td> </tr><tr><td width="140"> <p> <span>libexec</span></p></td> <td width="213"> <p><strong> <span>mysqld</span></strong>服務器</p></td> </tr><tr><td width="140"> <p> <span>share/mysql</span></p></td> <td width="213"> <p>錯誤消息文件</p></td> </tr><tr><td width="140"> <p> <span>sql-bench</span></p></td> <td width="213"> <p>基準程序和<span>crash-me</span>測試</p></td> </tr><tr><td width="140"> <p> <span>var</span></p></td> <td width="213"> <p>數據庫和日志文件</p></td> </tr></table> 在一個安裝目錄內,源碼安裝的布局在下列方面不同于二進制安裝: ·???????? **mysqld**服務器被安裝在“libexec”目錄而不是“bin”目錄內。 ·???????? 數據目錄是“var”而非“data”。 ·???????? **mysql_install_db**被安裝在“bin”目錄而非“scripts”內。 ·???????? 頭文件和庫目錄是“include/mysql”和“lib/mysql”而非“include”和“lib”。 執行源碼分發根目錄下的scripts/make_binary_distribution腳本,你可以用編譯過的源碼分發版創建你自己的二進制安裝。 ### 2.2.?使用二進制分發版的標準MySQL安裝 后面幾章包括如何在安裝軟件包格式適合的平臺上平臺安裝MySQL。(即執行“二進制安裝”)。也可以在多種平臺上安裝MySQL二進制分發版。關于適合所有平臺的軟件包的通用安裝指令參見[2.7節,“在其它類Unix系統中安裝MySQL”](# "2.7.?Installing MySQL on Other Unix-Like Systems")。 關于二進制分發版的使用和如何獲得的詳細信息請參見[2.1節,“一般安裝問題”](# "2.1.?General Installation Issues")。 ### 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對比](#) MySQL AB已經提供了Windows中安裝的MySQL 3.21以上版本,并提供了每天下載MySQL的比率。本節描述在Windows中安裝MySQL的過程。 使用Windows版本MySQL安裝器,結合GUI配置向導,可以自動安裝MySQL,創建選項文件,啟動服務器并使默認用戶賬戶安全。 如果你要升級已有的4.1.5版以前的MySQL,你必須執行以下步驟: 1.??? 獲得并安裝分發版。 2.??? 根據需要設置選項文件。 3.??? 選擇想要使用的服務器。 4.??? 啟動服務器。 5.??? 為初始MySQL賬戶指定密碼。 該過程還適合安裝軟件包內不包括安裝器的MySQL安裝。 Windows版MySQL 5.1有3種分發格式: ·???????? ?二進制分發版包含一個設置程序,可以安裝你需要的任何內容,因此可以立即啟動服務器。 ·???????? ?源碼分發版包含所有使用Visual Studio 2003編譯器來構建可執行程序的代碼和支持文件。 一般來講,你應當使用二進制分發版。它比其它的分發版使用起來要簡單,不再需要其它工具來啟動并運行MySQL。 本節描述了如何使用二進制分發版在Windows中安裝MySQL。要想使用源碼分發版安裝,參見[2.8.6節,“在Windows下從源碼安裝MySQL”](# "2.8.6.?Installing MySQL from Source on Windows")。 ### 2.3.1.?Windows系統要求 要想在Windows中運行MySQL,你需要: ·???????? 32位Windows操作系統,例如9x、Me、NT、2000、XP或Windows Server 2003。 基于Windows NT的操作系統(NT,2000,XP,2003),將MySQL服務器做為服務來運行。強烈建議使用基于Windows NT的操作系統。請參見[2.3.12節,“以Windows服務方式啟動MySQL”](# "2.3.12.?Starting MySQL as a Windows Service")。 ·???????? TCP/IP協議支持。 ·???????? Windows版本MySQL二進制分發版,可以從[http://dev.mysql.com/下載/](http://dev.mysql.com/downloads/)下載。請參見[2.1.3節,“怎樣獲得MySQL”](# "2.1.3.?How to Get MySQL")。 注釋:如果你從FTP下載分發版,我們建議使用充分的FTP客戶端以保證續傳,避免下載過程中文件被破壞。 ·???????? 可以讀取 .zip文件的工具,以解壓分發文件。 ·???????? 硬盤上有足夠的空間保證根據你的需求來解包、安裝和創建數據庫(一般建議至少有200兆字節)。 你還可以有以下可選需求: ·???????? 如果你計劃通過ODBC連接MySQL服務器,你還需要一個連接器/ODBC驅動程序。請參見[26.1節,“MySQL Connector/ODBC”](# "26.1.?MySQL Connector/ODBC")。 ·???????? 如果表需要占用的空間大于4GB,則在NTFS或更新的文件系統上安裝MySQL。當創建表時不要忘記使用MAX_ROWS和 AVG_ROW_LENGTH。請參見[13.1.5節,“CREATE TABLE語法”](# "13.1.5.?CREATE TABLE Syntax")。 ### 2.3.2.?選擇安裝軟件包 在Windows中安裝MySQL時,有3種MySQL 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”](# "2.3.3.?Installing MySQL with the Automated Installer")。如果你選擇非自動安裝MySQL,參見[2.3.6節,“通過非安裝Zip文件安裝MySQL”](# "2.3.6.?Installing MySQL from a Noinstall Zip Archive")。 ### 2.3.3.?用自動安裝器安裝MySQL 在Windows中安裝MySQL時,新用戶可以使用MySQL安裝幫助和MySQL Configuration Wizard(配置向導)。MySQL安裝和配置的方式是使新用戶可以立即開始使用MySQL。 基本安裝和完全安裝中均包括MySQL安裝幫助和配置向導,建議在大多數標準MySQL安裝中選擇。例外情況包括想在單個服務器上安裝多個實例的用戶和想完全控制服務器配置的高級用戶。 ### 2.3.4.?使用MySQL安裝向導 [ 2.3.4.1. 前言](#)[ 2.3.4.2. 下載并啟動MySQL安裝向導](#)[ 2.3.4.3. 選擇安裝類型](#)[ 2.3.4.4. 定制安裝對話框](#)[ 2.3.4.5. 配置對話框](#)[ 2.3.4.6. MySQL安裝向導所作的更改](#)[ 2.3.4.7. 升級MySQL](#) #### 2.3.4.1.?前言 MySQL安裝幫助是MySQL服務器的安裝器,使用最新的Microsoft Window安裝器技術。結合使用MySQL安裝幫助和配置向導,用戶安裝并 配置完MySQL服務器后便可以直接使用。 MySQL安裝幫助是MySQL 5.1服務器分發的標準安裝器。使用MySQL安裝幫助安裝MySQL之前,用戶需要手動關閉并卸載已經安裝的以前版本的MySQL。關于對以前版本進行升級的詳細信息請參見 [ 2.3.4.7節,“升級MySQL”](# "2.3.4.7.?Upgrading MySQL")。 最近版本的Windows包含了改進版本的Microsoft Windows安裝器(MSI)。MSI已經成為Windows 2000、Windows XP和Windows Server 2003應用程序安裝的事實標準。MySQL安裝幫助中使用了該技術,使安裝過程更加靈活、順利。 Microsoft Windows安裝器引擎隨著Windows XP的更新而更新;使用以前Windows版本的用戶可以參考[Microsoft 知識庫文章](http://support.microsoft.com/default.aspx?scid=kb;EN-US;292539)查閱關于升級到最新版Windows安裝器引擎的資料。 此外,Microsoft最近已經引入了WiX(Windows 安裝器 XML)工具包。這是Microsoft公認的開放源碼項目。我們轉換到WiX是因為它是一個開放源碼項目,可以使用腳本更加靈活地處理整個Windows安裝過程。 對MySQL裝幫助的改進依賴于各用戶的支持和反饋。如果你發現MySQL安裝幫助缺少對你很重要的某些功能,或如果你發現某個缺陷,請使用我們的[MySQL缺陷系統](http://bugs.mysql.com/)來索取功能或報告問題。 #### 2.3.4.2.?下載并啟動MySQL安裝向導 可以從[http://dev.mysql.com/downloads/](http://dev.mysql.com/downloads/)下載MySQL服務器安裝軟件包。如果你下載的安裝軟件包在Zip文件中,你需要先提取文件。 啟動幫助的過程取決于下載的安裝軟件包的內容。如果有setup.exe文件,雙擊啟動安裝過程。如果有.msi文件,雙擊啟動安裝過程。 #### 2.3.4.3.?選擇安裝類型 有3種安裝類型:**Typical(典型安裝)、Complete(完全安裝)**和**Custom(定制安裝)**。 **Typical(典型安裝)**安裝只安裝MySQL服務器、**mysql**命令行客戶端和命令行實用程序。命令行客戶端和實用程序包括**mysqldump、myisamchk**和其它幾個工具來幫助你管理MySQL服務器。 **Complete(完全安裝)**安裝將安裝軟件包內包含的所有組件。完全安裝軟件包包括的組件包括嵌入式服務器庫、基準套件、支持腳本和文檔。 **Custom(定制安裝)**安裝允許你完全控制你想要安裝的軟件包和安裝路徑。關于定制安裝的詳細信息請參見[2.3.4.4節,“定制安裝對話框”](# "2.3.4.4.?The Custom Install Dialog")。 如果你選擇**Typical(典型安裝)**或**Complete(完全安裝)**安裝并點擊Next按鈕,你將進入確認窗口確認選擇并開始安裝。如果你選擇**定制**安裝并點擊Next按鈕,你將進入定制安裝對話框,參見[2.3.4.4節,“定制安裝對話框”](# "2.3.4.4.?The Custom Install Dialog")。 #### 2.3.4.4.?定制安裝對話框 如果你想要更改MySQL安裝幫助安裝的安裝路徑或具體組件,應當選擇**Custom(定制安裝)**安裝。 所有可用組件列入定制安裝對話框左側的樹狀視圖內。未安裝的組件用紅色 X 圖標表示;已經安裝的組件有灰色圖標。要想更改組件,點擊該組件的圖標并從下拉列表中選擇新的選項。 可以點擊安裝路徑右側的Change...按鈕來更改默認安裝路徑。 選擇了安裝組件和安裝路徑后,點擊Next按鈕進入確認對話框。 #### 2.3.4.5.?配置對話框 選擇了安裝類型和可選安裝組件后,則進入確認對話框。該對話框中將顯示安裝類型和安裝路徑供檢查。 如果你滿意設定值要想安裝MySQL,點擊Install(安裝)按鈕。要想更改設定值,點擊Back按鈕。要想退出MySQL安裝幫助不再安裝 MySQL,點擊Cancel按鈕。 完成安裝后,將出現注冊選項和MySQL網址。注冊后便可以訪問[forums.mysql.com](http://forums.mysql.com)處的MySQL論壇,可以在[bugs.mysql.com](http://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。它包含兩個字符串值,Location和Version。Location字符串包含安裝目錄。在默認安裝中,它包含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.1*是MySQL服務器的主要版本。這是建議的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.15.?Upgrading MySQL on Windows")。 ### 2.3.5.?使用配置向導 [ 2.3.5.1. 前言](#)[ 2.3.5.2. 啟動MySQL配置向導](#)[ 2.3.5.3. 選擇維護選項](#)[ 2.3.5.4. 選擇配置類型](#)[ 2.3.5.5. 服務器類型對話框](#)[ 2.3.5.6. 數據庫使用情況對話框](#)[ 2.3.5.7. InnoDB表空間對話框](#)[ 2.3.5.8. 并發連接對話框](#)[ 2.3.5.9. 聯網選項對話框](#)[ 2.3.5.10. 字符集對話框](#)[ 2.3.5.11. 服務選項對話框](#)[ 2.3.5.12. 安全選項對話框](#)[ 2.3.5.13. 配置對話框](#)[ 2.3.5.14. my.ini文件的位置](#)[ 2.3.5.15. 編輯my.ini文件](#) #### 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 缺陷系統](http://bugs.mysql.com/)來索取功能或報告問題。 #### 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文件重新命名為my*timestamp*.ini.bak,其中*timestamp*是my.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.11.?The Service Options Dialog")和[2.3.5.12節,“安全選項對話框”](# "2.3.5.12.?The Security Options Dialog")的服務選項和安全選項。 #### 2.3.5.5.?服務器類型對話框 可以選擇3種服務器類型,選擇哪種服務器將影響到MySQL Configuration Wizard(配置向導)對內存、硬盤和過程或使用的決策。 ·???????? Developer Machine(開發機器):該選項代表典型個人用桌面工作站。假定機器上運行著多個桌面應用程序。將MySQL服務器配置成使用最少的系統資源。 ·???????? Server Machine(服務器):該選項代表服務器,MySQL服務器可以同其它應用程序一起運行,例如FTP、email和web服務器。MySQL服務器配置成使用適當比例的系統資源。 ·???????? Dedicated MySQL Server Machine(專用MySQL服務器):該選項代表只運行MySQL服務的服務器。假定運行沒有運行其它應用程序。MySQL服務器配置成使用所有可用系統資源。 #### 2.3.5.6.?數據庫使用情況對話框 通過Database Usage(數據庫使用)對話框,你可以指出創建MySQL表時使用的表處理器。通過該選項,你可以選擇是否使用InnoDB儲存引擎,以及InnoDB占用多大比例的服務器資源。 ·???????? Multifunctional Database(多功能數據庫):選擇該選項,則同時使用InnoDB和MyISAM儲存引擎,并在兩個引擎之間平均分配資源。建議經常使用兩個儲存引擎的用戶選擇該選項。 ·???????? Transactional Database Only(只是事務處理數據庫):該選項同時使用InnoDB和MyISAM儲存引擎,但是將大多數服務器資源指派給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](http://www.mysql.com/products/administrator/)實用工具修改服務器配置。 MySQL客戶端和實用程序,例如**mysql**命令行客戶端和**mysqldump**不能將my.ini文件放到服務器安裝目錄中。要想配置客戶端和實用工具,根據Windows 版本,在C:\Windows或C:\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.3.15.?Upgrading MySQL on Windows")。 2.??? 如果你使用基于Windows NT的操作系統,例如Windows NT、Windows 2000、Windows XP或Windows Server 2003,確保登錄的用戶名具有管理員權限。 3.??? 選擇安裝位置。傳統安裝中MySQL服務器安裝到C:\mysql,MySQL Installation Wizard(安裝幫助)將MySQL安裝到C:\Program Files\MySQL。如果你不想將MySQL安裝到C:\mysql,你必須在啟動過程或在選項文件中指定安裝目錄的路徑。請參見[2.3.8節,“創建選項文件”](# "2.3.8.?Creating an Option File")。 4.??? 使用zip文件工具,將安裝文件提取到選定的安裝位置。使用某些工具,可以將文檔提取到選擇的安裝位置的文件夾中。在這種情況下,你可以將子文件夾中的內容移動到選擇的安裝位置。 ### 2.3.8.?創建選項文件 如果想要指定運行服務器的啟動選項,可以在命令行中指出或放到一個選項文件中。對于服務器每次啟動都用到的選項,你會發現使用選項文件來指定MySQL配置非常方便。特別是在以下環境中: ·???????? 安裝或數據目錄位置不是默認位置(C:\Program Files\MySQL\MySQL Server 5.1和C:\Program Files\MySQL\MySQL Server 5.1\data)。 ·???????? 需要調節服務器設定值。 檔MySQL服務器在Windows中啟動時,它從兩個文件中尋找選項:Windows目錄中的my.ini文件和C:\my.cnf文件。Windows目錄典型名稱為C:\WINDOWS或C:\WINNT。可以使用下面的命令從WINDIR環境變量值確定自己的確切位置: ~~~ C:\> echo %WINDIR% ~~~ MySQL首先從my.ini文件中尋找選項,然后從my.cnf文件中尋找。為了避免混淆,最好只使用一個文件。如果你的PC使用了一個引導加載器,其中C:不是引導盤,唯一的選則是使用my.ini文件。不管你使用哪個選項文件,必須為純文本文件。 還可以使用MySQL分發中的示例選項文件。在安裝目錄中查找以下文件:my-small.cnf、my-medium.cnf、my-large.cnf和my-huge.cnf,你可以重新命名并復制到相應位置用作基本配置文件。 可以用任何文本編輯器來創建并修改選項文件,例如記事本。例如,如果MySQL安裝在E:\mysql,數據目錄安裝在E:\mydata\data,你可以 創建含有[mysqld]部分的選項文件,指定basedir和datadir參數的值: ~~~ [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服務器: <table border="1" cellpadding="0" id="table6"><tr><td width="152"> <p><strong><span> 二進制</span></strong></p></td> <td width="636"> <p><strong><span>描述</span></strong></p></td> </tr><tr><td width="152"> <p><strong> <span>mysqld- debug</span></strong></p></td> <td width="636"> <p>已經編譯過,可以進行完全調試和自動內存分配檢查,用于表<span>InnoDB</span>和<span><span>BDB</span><span>。</span></span></p></td> </tr><tr><td width="152"> <p><strong> <span>mysqld</span></strong></p></td> <td width="636"> <p>優化的二進制,支持<span>InnoDB</span>。</p></td> </tr><tr><td width="152"> <p><strong> <span>mysqld-nt</span></strong></p></td> <td width="636"> <p>優化的二進制,支持<span>Windows NT</span>,<span>2000 XP</span>,有命名管道。</p></td> </tr><tr><td width="152"> <p><strong> <span>mysqld-max</span></strong></p></td> <td width="636"> <p>優化的二進制,支持<span>InnoDB</span>和<span>BDB</span>表。</p></td> </tr><tr><td width="152"> <p><strong> <span>mysqld-max-nt</span></strong></p></td> <td width="636"> <p>同<strong><span>mysqld-max</span></strong>,但是已經編譯過,支持命名管道。</p></td> </tr></table> 已經對所有前面的二進制進行了優化以適用現代Intel處理器,但是應當工作在Intel i386-類或更高的處理器上。 所有Windows MySQL 5.1服務器支持數據庫目錄符號鏈接。 MySQL支持所有Windows平臺的TCP/IP。**mysqld-nt**和mysql-max-nt服務器支持Windows NT、2000、XP和2003的命名管道。然而,在所有平臺下默認使用TCP/IP。(在許多Windows配置中,命名管道比TCP/IP慢)。 命名管道在以下條件下使用: ·???????? 如果使用--enable-named-pipe選項啟動服務器,則啟用了命名管道。需要明確使用該選項,因為當使用命名管道關閉MySQL服務器時,某些用戶會遇到問題。 ·???????? 只有**mysqld-nt**或**mysqld-max-nt**服務器,并且服務器運行在支持命名管道的Windows版本(NT、2000、XP、2003),才能夠使用命名管道連接。 ·???????? 這些服務器可以運行在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/](http://www.microsoft.com/)獲得最新的Winsock。Windows 98包含新的Winsock 2庫,因此不需要更新庫。 在基于NT的系統中,例如 Windows NT、2000、XP或2003,客戶端可以有兩個選擇。可以使用TCP/IP,如果服務器支持命名管道連接,也可以使用命名管道。要想使MySQL使用Windows NT 4中的TCP/IP,你必須安裝服務pack 3(或更新的補丁)。 如果用--shared-memory選項啟動,Windows版MySQL還支持共享內存連接。客戶端可以通過--protocol=memory選項通過共享內存進行連接。 關于運行哪個服務器二進制的信息,參見[2.3.9節,“選擇MySQL服務器類型”](# "2.3.9.?Selecting a MySQL Server type")。 本節對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.9.?Post-Installation Setup and Testing")中的說明設置密碼。 ### 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 NT、2000、XP或2003中啟動服務器,服務器則在前臺運行,在服務器退出前,不會出現命令提示。因此,當服務器運行時,應當打開另一個控制臺窗口來運行客戶端程序。 下述命令可以停止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節,“創建跟蹤文件”](# "E.1.2.?Creating Trace Files")。 使用**mysqld --verbose --help**顯示**mysqld**的所有選項。 ### 2.3.12.?以Windows服務方式啟動MySQL 在NT家族 (Windows NT,2000,XP,2003)中,建議將MySQL安裝為Windows服務,當Windows啟動、停止時,MySQL也自動啟動、停止。還可以從命令行使用**NET**命令,或使用圖形**Services**工具來控制AMySQL服務器。 在Windows控制面板(Windows 2000,XP和Server 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命令行實用程序,例如**mysqladmin**和**mysqldump**。 ·???????? 請注意在同一個機器上運行多個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 MySQL**。**NET**命令忽略大小寫。 做為服務運行時,**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.11.?Starting MySQL from the Windows Command Line")。 如果在安裝過程中遇到問題,請參閱[2.3.14節,“在Windows環境下對MySQL安裝的故障診斷與排除”](# "2.3.14.?Troubleshooting a MySQL Installation Under Windows")。 ### 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列只使用localhost和IP號。 可以通過--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節,“錯誤日志”](# "5.11.1.?The Error Log")。 另一個錯誤相關信息源是MySQL服務啟動時控制臺上顯示的消息。將**mysqld**安裝為服務后,從命令行通過**NET START mysql**命令來查看MySQL服務啟動相關的錯誤消息。請參見[2.3.12節,“以Windows服務方式啟動MySQL”](# "2.3.12.?Starting MySQL as a Windows Service")。 下面距離說明了首次安裝并啟動MySQL服務時會遇到的最常見的錯誤消息: ~~~ ·??????????????? System error 1067 has occurred. ~~~ ~~~ ·??????????????? Fatal error: Can't open privilege tables: Table 'mysql.host' doesn't exist ~~~ ·???????? 當MySQL服務器找不到MySQL權限數據庫或關鍵文件時會出現這些消息。當MySQL基或數據目錄沒有安裝在默認位置(C:\mysql和 C:\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:\WINNT或C:\WINDOWS。可以在命令提示符下輸入下面的命令從WINDIR環境變量值中確定確切位置: ~~~ C:\> echo %WINDIR% ~~~ 可以通過文本編輯器(例如記事本)來創建并修改選項文件。例如,如果MySQL安裝在E:\mysql下,數據目錄在D:\MySQLdata,你可以創建選項文件并設置[mysqld]來指定basedir和datadir參數的值: ~~~ [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節,“創建選項文件”](# "2.3.8.?Creating an Option File")。 ~~~ ·??????????????? 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](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節,“數據庫備份”](# "5.9.1.?Database Backups")。 2.??? 從[http://dev.mysql.com/downloads/](http://dev.mysql.com/downloads/)下載最新Windows版MySQL。 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安裝向導”](# "2.3.4.?Using the MySQL Installation Wizard")的描述來啟動幫助。 6.??? 如果用Zip文件安裝MySQL,應提取文件。你可以覆蓋已有的MySQL安裝(通常位于C:\mysql),或將它安裝到其它目錄,例如 C:\mysql4。建議覆蓋原有的安裝。 7.??? 重新啟動服務器。如果你運行MySQL服務,則使用**NET START MySQL**,還可以直接調用**mysqld**。 8.??? 關于在Windows之外的操作系統升級MySQL的詳細信息,請參閱[2.10節,“升級MySQL”](# "2.10.?Upgrading MySQL")。 9.??? 如果遇到錯誤,參見 [ 2.3.14節,“在Windows環境下對MySQL安裝的故障診斷與排除”](# "2.3.14.?Troubleshooting a MySQL Installation Under Windows")。 ### 2.3.16.?Windows版MySQL同Unix版MySQL對比 已經證明,Windows版MySQL很穩定。Windows版MySQL的功能與相應的Unix版相同,只有以下例外: ·???????? ** Windows 95和線程** Windows 95創建一個線程時大約需要200字節的主內存。MySQL的每個連接都會創建一個新線程,因此如果你的服務器正處理許多連接,你不應當在Windows 95中運行**mysqld**。 ·???????? **有限的端口數目** Windows系統有大約4,000個端口供客戶端連接,某個端口的連接關閉后,在能夠重新利用該端口前,需要2至4分鐘。在客戶端頻繁連接并從服務器上斷開時,在可以重新使用關閉的端口前,有可能用完了所有可用的端口。如果發生這種情況,MySQL服務器不會響應,即使它仍在運行。請注意機器上運行的其它應用程序也可以使用端口,此時可供MySQL使用的端口數要少。 詳細信息參見[http://support.microsoft.com/default.aspx?scid=kb;en-us;196271](http://support.microsoft.com/default.aspx?scid=kb;en-us;196271)。 ·???????? **并行讀** MySQL依靠pread()和pwrite()系統調用來同時使用INSERT和SELECT。目前我們使用互斥來競爭pread()和pwrite()。我們將來想用虛擬接口替換文件級接口,因此要想更快,我們可以在NT、2000和XP上使用readfile()/writefile()接口。目前MySQL 5.1可以打開的文件的限制數目為2,048,意味著在Windows NT,2000,XP和2003上可以運行的并行線程不如Unix上多。 ·???????? **阻塞讀** MySQL為每個連接使用阻塞讀取,如果啟用了命名管道連接,其含義如下: o??????? 連接不會在8小時后自動斷開,而在Unix版MySQL中會發生。 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 DIRECTORY和INDEX DIRECTORY選項,因為Windows不支持符號連接。在具有非功能realpath()調用的系統中,這些選項也被忽略。 ·???????? **DROP DATABASE** 你不能刪掉正被線程使用的數據庫。 ·???????? **從Task Manager(任務管理器)殺掉MySQL** 你不能從Task Manager(任務管理求)或使用Windows 95的shutdown工具來殺掉MySQL。你必須通過**mysqladmin shutdown**停止它。 ·???????? **大小寫名** 由于Windows對文件名大小寫不敏感。因此在Windows中MySQL數據庫名和表名對大小寫也不敏感。唯一的限制是在同一個語句中,必須同時使用大寫或小寫指定數據庫名和表名。請參見[9.2.2節,“識別符大小寫敏感性”](# "9.2.2.?Identifier Case Sensitivity")。 ·???????? **‘****\****’路徑名間隔符** Windows中的路徑名用‘\’符間隔開,在MySQL中還是轉義字符。如果你使用LOAD DATA INFILE或SELECT ... 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包來安裝MySQL。MySQL RPM目前已經嵌入到SuSE Linux 7.3系統中,但是應當能在大多數支持**rpm**和使用glibc的Linux版本中工作。要想獲得RPM軟件包,參見[2.1.3節,“怎樣獲得MySQL”](# "2.1.3.?How to Get MySQL")。 MySQL AB不提供與具體平臺相關的RPM;具體平臺相關的RPM和通用RPM之間的區別是具體平臺相關RPM為目標平臺而構建,為動態連接。而通用RPM與Linux線程之間是靜態連接。 **注釋:**通常由其它供應商提供MySQL的RPM分發版。其特征和功能與MySQL AB所構建的不同,該手冊中的指令不一定適合安裝其它供應商提供的MySQL的RPM分發版。此時應咨詢供應商的說明。 如果RPM文件有問題(例如,如果你收到錯誤“Sorry, the host '*xxxx*' could not be looked up”),參見[2.12.1.2節,“Linux二進制分發版說明”](# "2.12.1.2.?Linux Binary Distribution Notes")。 在大多數情況,你只需要安裝MySQL-server和MySQL-client軟件包來安裝MySQL。在標準安裝中不需要其它的包。如果你想要運行含更多功能的MySQL-Max服務器,還應當安裝MySQL-Max RPM。必須先安裝M MySQL-server RPM再安裝該模塊。請參見[5.1.2節,“mysq**ld-max擴展My**SQL服務器”](# "5.1.2.?The mysqld-max Extended MySQL Server")。 如果安裝MySQL軟件包時出現從屬錯誤(例如,“error: removing these packages would break dependencies: libmysqlclient.so.10 is needed by ..”),你還應當安裝包MySQL-shared-compat,其中包括兩個向后兼容的共享庫(MySQL 4.0為libmysqlclient.so.12,MySQL 3.23為libmysqlclient.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 測試和基準。需要Perl和DBD::mysql模塊。 ·???????? MySQL-devel-*VERSION*.i386.rpm 庫和包含文件,如果你想要編譯其它MySQL客戶端,例如Perl模塊,則需要。 ·???????? MySQL-shared-*VERSION*.i386.rpm 該軟件包包含某些語言和應用程序需要動態裝載的共享庫(libmysqlclient.so*),使用MySQL。 ·???????? MySQL-shared-compat-*VERSION*.i386.rpm 該軟件包包括MySQL 3.23和MySQL 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(例如,Alpha或SPARC)。 要想看到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驗證軟件包的完整性``”](# "2.1.4.?Verifying Package Integrity Using MD5 Checksums or GnuPG")。 服務器RPM將數據放入/var/lib/mysql目錄。RPM還為mysql用戶創建登錄賬戶(如果還沒有),用來運行MySQL服務器,并在/etc/init.d/創建相應條目,以便在引導時自動啟動服務器。(這意味著如果你已經安裝并且已經更改啟動腳本,你可能要復制腳本,以便你安裝新RPM時 不會丟掉腳本)。關于系統啟動時如何自動啟動MySQL的詳細信息,參見 [ 2.9.2.2節,“自動啟動和停止MySQL”](# "2.9.2.2.?Starting and Stopping MySQL Automatically")。 如果想要在舊的不支持/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,安裝后MySQL**d**服務器應當能啟動并運行。你應當能使用MySQL啟動。 如果出現問題,可以從二進制安裝部分找到詳細信息。[2.7節,“在其它類Unix系統中安裝MySQL”](# "2.7.?Installing MySQL on Other Unix-Like Systems")。 **注釋:**MySQL授權表中的賬戶開始沒有密碼。啟動服務器后,應當按照[2.9節,“安裝后的設置和測試”](# "2.9.?Post-Installation Setup and Testing")中的說明為它們設置密碼。 ### 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”](# "2.1.3.?How to Get 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報告了該缺陷,它正在調查該問題。 MySQL的Mac OS X PKG安裝到/usr/local/mysql-*VERSION*,并且還會安裝一個符號連接,/usr/local/mysql,指向新的位置。如果有/usr/local/mysql目錄,首先將它改名為/usr/local/mysql.bak。安裝完后,安裝器執行**mysql_install_db**在MySQL數據庫中創建授權表。 安裝布局與**tar**文件二進制分發版類似;所有MySQL二進制代碼位于目錄/usr/local/mysql/bin中。默認情況,MySQL套接字文件創建為/tmp/mysql.sock。請參見[2.1.5節,“安裝布局”](# "2.1.5.?Installation Layouts")。 MySQL安裝需要Mac OS X的mysql用戶賬戶。在Mac OS X 10.2及以上版本中,默認情況應存在mysql用戶賬戶。 如果正運行Mac OS X服務器,需要安裝MySQL。隨Mac OS X服務器版本安裝的MySQL版本如下表所示: <table border="1" cellpadding="0" id="table7"><tr><td> <p><strong> <span>Mac OS X</span><span>服務器版本</span></strong></p></td> <td> <p><strong> <span>MySQL</span><span>版本</span></strong></p></td> </tr><tr><td> <p><span>10.2-10.2.2</span></p></td> <td> <p><span>3.23.51</span></p></td> </tr><tr><td> <p><span>10.2.3-10.2.6</span></p></td> <td> <p><span>3.23.53</span></p></td> </tr><tr><td> <p><span>10.3</span></p></td> <td> <p><span>4.0.14</span></p></td> </tr><tr><td> <p><span>10.3.2</span></p></td> <td> <p><span>4.0.16</span></p></td> </tr><tr><td> <p><span>10.4.0</span></p></td> <td> <p><span>4.1.10a</span></p></td> </tr></table> 本節只覆蓋官方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](http://www.entropy.ch)下載的Marc Liyanage的MySQL軟件包,你可以只使用該頁給出的二進制安裝布局按照更新說明來安裝。 如果你從Marc的3.23.xx 版本或從Mac OS X的MySQL服務器版本升級到官方MySQL PKG,你還需要將已有MySQL授權表轉換為當前格式,因為已經加了許多新的安全權限。請參見[2.10.2節,“升級授權表”](# "2.10.2.?Upgrading the Grant Tables")。 如果你想在系統啟動過程中自動啟動MySQL,你還需要安裝MySQL Startup Item。在MySQL 5.1中,它是Mac OS X安裝盤映像的一部分,是一個獨立的安裝軟件包。只需要雙擊MySQLStartupItem.圖標并按照說明來安裝。 請注意Startup Item只需要安裝一次!不需要在以后每次升級MySQL軟件包時都安裝它。 MySQL 5.1的Startup 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文件中的變量MySQL。MySQL 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節,“安裝后的設置和測試”](# "2.9.?Post-Installation Setup and Testing")中的說明來設置密碼。 你可以為外殼源文件起一個別名,使它更容易訪問常用的程序,例如從命令行運行**mysql**和**mysqladmin**。**tcsh**語法為: ~~~ 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的所有服務器。 NetWare的MySQL使用NetWare的Metrowerks CodeWarrior和專用跨編譯版GNU自動工具編譯而成。 可以從[http://dev.mysql.com/downloads/](http://dev.mysql.com/downloads/)獲得最新的二進制軟件包NetWare。請參見[2.1.3節,“怎樣獲得MySQL”](# "2.1.3.?How to Get MySQL")。 為了使MySQL駐留在主機上,NetWare服務器必須滿足以下要求: ·???????? 安裝的[NetWare 6.5](http://support.novell.com/filefinder/18197/index.html)或[NetWare 6.0](http://support.novell.com/filefinder/13659/index.html)的Latest 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.??? 你可以將目錄重新命名為更加一致和易于使用的名稱。在本手冊的例子中使用SYS:MYSQL來指向安裝目錄。 請注意在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安裝在SYS:MYSQL中,你想讓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 TABLE和REPAIR 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/](http://forge.novell.com/modules/xfcontent/downloads.php/perl/Modules/) ·???????? PHP for NetWare: [ http://forge.novell.com/modules/xfcontent/downloads.php/php/Modules/](http://forge.novell.com/modules/xfcontent/downloads.php/php/Modules/) ?(MySQL 4.1的PHP 5擴展名適用于MySQL 5.1)。 在[5.1.3節,“mysqld_safe:MySQL服務器啟動腳本”](# "5.1.3.?mysqld_safe — MySQL Server Startup Script")中詳細描述了NetWare中的**mysqld_safe**的行為。 如果服務器上已經安裝了MySQL,一定要檢查autoexec.ncf中已有的MySQL啟動命令,如果需要則編輯或刪除這些命令。 **注釋:**MySQL授權表中的初始賬戶沒有密碼。啟動服務器后,你應當使用[2.9節,“安裝后的設置和測試”](# "2.9.?Post-Installation Setup and Testing")中的說明來設置密碼。 ### 2.7.?在其它類Unix系統中安裝MySQL 本節介紹在各種平臺上安裝**tar**壓縮文件格式的MySQL二進制分發版(文件有.tar.gz擴展名)。詳細目錄參見[2.1.2.5節,“MySQL AB編譯的MySQL二進制版本”](# "2.1.2.5.?MySQL Binaries Compiled by MySQL AB")。 要想獲得MySQL,參見[2.1.3節,“怎樣獲得MySQL”](# "2.1.3.?How to Get MySQL")。 MySQL**tar**文件二進制分發版的文件名格式為mysql-*VERSION*-*OS*.tar.gz,其中*VERSION*是版本號(例如,5.1.2-alpha),*OS*表示分發版安裝的操作系統類型(例如,pc-linux-i686)。 除了這些通用軟件包,我們還為各平臺提供了具體的二進制安裝軟件包。關于如何安裝的詳細信息參見[2.2節,“使用二進制分發版的標準MySQL安裝”](# "2.2.?Standard MySQL Installation Using a Binary Distribution")。 你需要下面的工具來安裝MySQL **tar**文件二進制分發版: ·???????? GNU gunzip解壓縮分發版。 ·???????? 一個適當的tar解包分發版。 GNU tar已知可以。一些操作系統中含有預安裝的**tar**,已知有問題。例如,已知Mac OS X **tar**和Sun **tar**對于長文件名有問題。在Mac OS X中,你可以使用預安裝的**gnutar**程序。在其它系統中若**tar**不完善,你應當首先安裝GNU **tar**。 如果你遇到問題,在把問題寄到MySQL郵件目錄時,**請一定使用****mysqlbug**,就算問題不是一個缺陷,**mysqlbug**也會收集系統信息,將有助于其它人解決你的問題。不使用**mysqlbug**,你將減少得到你問題的一個解決方案的可能性!在你解包分發版后,你會在“bin”目錄下找到**mysqlbug**。請參見[1.7.1.3節,“如何通報缺陷和問題”](# "1.7.1.3.?How to Report Bugs or Problems")。 必須執行以便安裝并使用**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節,“安裝后的設置和測試”](# "2.9.?Post-Installation Setup and Testing")。 下面為安裝二進制分發版的更詳細的描述: 1.??? 為**mysqld**增加一個登錄用戶和組: 2.??????????? shell> **groupadd mysql** 3.??????????? shell> **useradd -g mysql mysql** 這些命令將增加MySQL組和MySQL用戶。不同版本的Unix中,**useradd**和**groupadd**的語法可能會稍有不同。還可以稱為**adduser**和**addgroup**。 你可能會將這些用戶和組命名為mysql之外的名稱。如果是這樣,在下面的步驟中替換為相應的名稱。 4.??? 挑選一個你想解開分發包的目錄,進入該目錄。在下面的例子中,我們將分發解包在“/usr/local”下(因此,下列說明假設你有權限在“/usr/local”中創建文件和目錄,如果該目錄被保護,你需要以root實施安裝)。 ~~~ 5.??????????? shell> cd /usr/local ~~~ 6.??? 從[2.1.3節,“怎樣獲得MySQL”](# "2.1.3.?How to Get 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:](#)[*環境變量*](# "Appendix?F.?Environment Variables")。 ·???????? 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”](# "2.9.2.2.?Starting and Stopping MySQL Automatically")中找到。 19.如果安裝了DBI和DBD::mysqlPerl模塊,可以使用**bin/mysql_setpermission**腳本增加新賬戶。關于說明,參見 [ 2.13節,“Perl安裝注意事項”](# "2.13.?Perl Installation Notes")。 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服務器啟動腳本”](# "5.1.3.?mysqld_safe — MySQL Server Startup Script")。 **注釋:**MySQL授權表中的賬戶開始沒有密碼。啟動服務器后,應當使用[2.9節,“安裝后的設置和測試”](# "2.9.?Post-Installation Setup and Testing")中的說明來設置密碼。 ### 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客戶端](#) 安裝源碼之前,首先檢查我們的二進制是否適合你的平臺,是否可以工作。我們做了大量的工作確保我們的二進制用最合適的選項來構建。 要獲得MySQLa 源碼分發版,參見[2.1.3節,“怎樣獲得MySQL”](# "2.1.3.?How to Get MySQL")。 MySQL源碼分發版為**tar**壓縮文件,文件名格式為mysql-*VERSION*.tar.gz,其中 *VERSION*是版本號,例如5.1.2-alpha。 你需要下列工具構造并安裝**MySQL**源碼: ·???????? GNU gunzip解壓縮該分發版。 ·???????? 一個適當的tar解包分發版。GNU tar已知可以。一些操作系統中含有預安裝的**tar**,已知有問題。例如,已知Mac OS X **tar**和Sun **tar**對于長文件名有問題。在Mac OS X中,你可以使用預安裝的**gnutar**程序。在其它系統中若**tar**不完善,你應當首先安裝GNU **tar**。 ·???????? 一個能工作的ANSI C++編譯器。**gcc**> = 2.95.2、**egcs**> = 1.0.2或**egcs 2.91.66**、SGI 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**make**3.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節,“如何通報缺陷和問題”](# "1.7.1.3.?How to Report Bugs or Problems")。 ### 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節,“安裝后的設置和測試”](# "2.9.?Post-Installation Setup and Testing")進行安裝后的設置和測試。 以下是安裝MySQL源碼分發版的更詳細的描述: 1.??? **為mysqld**增加一個登錄用戶和組: ~~~ 2.??????????? shell> groupadd mysql ~~~ ~~~ 3.??????????? shell> useradd -g mysql mysql ~~~ 這些命令將增加MySQL組和 MySQL用戶。不同版本的Unix中,**useradd**和**groupadd**的語法可能會稍有不同。還可以稱為**adduser**和**addgroup**。 你可能會將這些用戶和組命名為mysql之外的名稱。如果是這樣,在下面的步驟中替換為相應的名稱。 4.??? 挑選一個你想解開分發包的目錄,進入該目錄。 5.??? 從[2.1.3節,“怎樣獲得MySQL”](# "2.1.3.?How to Get 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節,“典型配置選項****”](# "2.8.2.?Typical configure Options")討論一些很有用的選項。 如果**configure**失敗,你將向MySQL郵件目錄發送包含你認為能幫你解決該問題的包含“config.log”中所有行的郵件,也要包括**configure**的最后幾行輸出。用**mysqlbug**腳本郵寄錯誤報告。請參見[1.7.1.3節,“如何通報缺陷和問題”](# "1.7.1.3.?How to Report Bugs or Problems")。 如果編譯失敗,參見[2.8.4節,“處理MySQL編譯問題”](# "2.8.4.?Dealing with Problems Compiling 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節,“使用選項文件”](# "4.3.2.?Using Option Files")和[15.2.3節,“InnoDB配置”](# "15.2.3.?InnoDB Configuration")。 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”](# "2.9.2.2.?Starting and Stopping MySQL Automatically")中找到。 24.如果安裝了DBI和DBD::mysqlPerl模塊,可以使用**bin/mysql_setpermission**腳本增加新賬戶。關于說明,參見[2.13節,“Perl安裝注意事項”](# "2.13.?Perl Installation Notes")。 在所有東西被安裝以后,你應當使用該命令初始化并且測試你的分發版: ~~~ shell> /usr/local/mysql/bin/mysqld_safe --user=mysql & ~~~ 如果這個命令提示mysqld daemon ended并馬上失敗,那么你能在數據目錄中的文件“hostname'.err”找到一些信息。 關于**mysqld_safe**的詳細信息參見[5.1.3節,“mysqld_safe:MySQL服務器啟動腳本”](# "5.1.3.?mysqld_safe — MySQL Server Startup Script")。 **注釋:**MySQL授權表中的賬戶開始沒有密碼。啟動服務器后,你應當使用[2.9節,“安裝后的設置和測試”](# "2.9.?Post-Installation Setup and Testing")中的說明來設置密碼。 ### 2.8.2.?典型配置選項**** **configure**腳本給你一個很大的控制權來控制如何配置MySQL源碼分發版。一般使用**configure**命令行的選項來進行。你也可以用某些環境變量作用于**configure**。請參見[附錄F:*環境變量*](# "Appendix?F.?Environment Variables")。要查看**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節,“使用選項文件”](# "4.3.2.?Using Option Files")。 - 如果你正在使用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``”](# "A.4.5.?How to Protect or Change the MySQL Socket File /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/](http://www.mysql.com/)提供的二進制均已經編譯過并進行了優化,對于大多數用戶應當比較完善。請參見[2.1.2.5節,“MySQL AB編譯的MySQL二進制版本”](# "2.1.2.5.?MySQL Binaries Compiled by MySQL AB")。其中有一些配置設定值,可以選用來構建更快的二進制,但是只適用高級用戶。請參見[7.5.4節,“編譯和鏈接怎樣影響MySQL的速度”](# "7.5.4.?How Compiling and Linking Affects the Speed of MySQL")。 如果構造失敗并且產生有關編譯器或鏈接器的錯誤,不能創建共享庫“libmysqlclient.so.#”(“#”是一個版本號), 你可以通過為**configure**指定--disable-shared選項來解決此問題。在這種情況下,**configure**將不構造一個共享libmysqlclient.so.#庫。 - 默認地,MySQL使用latin1(cp1252)字符集。為了改變 默認設置,使用--with-charset選項: - shell> **./configure -- with-charset=*CHARSET*** *CHARSET*可以是big5、cp1251、cp1257、czech、danish、dec8、dos、euc_kr、gb2312、gbk、german1、hebrew、hp8、hungarian、koi8_ru、koi8_ukr、latin1、latin2、sjis、swe7、tis620、ujis、usa7或win1251ukr。請參見[5.10.1節,“數據和排序用字符集”](# "5.10.1.?The Character Set Used for Data and Sorting")。 可以指定默認校對規則。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語法”](# "13.5.3.?SET Syntax")。 **警告:**如果你在創建了任何數據庫表之后改變字符集,你將必須對每個表運行**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服務器”](# "E.1.?Debugging a MySQL Server")。 ·???????? 如果客戶端程序使用線程,還必須使用--enable-thread-safe-client配置選項來編譯線程安全版的MySQL客戶端庫。將創建一個libmysqlclient_r庫,可以用來連接應用程序線程。請參見[25.2.15節,“如何生成線程式客戶端”](# "25.2.15.?How to Make a Threaded Client")。 ·???????? 可以使用--with-big-tables選項構建支持大數據庫表的MySQL。 該選項使變量用來將表行數保存到unsigned long long中而不是unsigned long。結果是允許表有大約1.844E+19 ((232)2)行而不是232 (~4.295E+09) 行。在以前,要完成該功能必須手動將-DBIG_TABLES傳遞給編譯器。 屬于特定系統的選項可在本章特定系統的小節里找到。請參見[2.12節,“具體操作系統相關的注意事項”](# "2.12.?Operating System-Specific Notes") ### 2.8.3.?從開發源碼樹安裝 **注意**:如果你想幫助我們測試新代碼,應當閱讀本節。如果你只想在系統上安裝并運行MySQL,應當使用標準發布分發版(二進制或源碼分發版)。 要想獲得我們的最新開發源碼樹,應使用說明: 1.??? 從[http://www.bitmover.com/bk-client.shar下載BitKeeper](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](http://cygwin.com/)下載并安裝Cygwin。 ·???????? 確保**gcc**和**make**已經安裝到Cygwin。可以用**which gcc**和 ** which make**命令進行測試。如果任何一個沒有安裝,運行 Cygwin安裝包管理器,選擇**gcc、make并**安裝。 ·???????? 在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/](http://dev.mysql.com/doc/)提供了許多格式。我們每天更新你可以下載的格式(HTML、PDF等),因此你沒有必要從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 **make****、autoconf** 2.58 (或更新版)、**automake** 1.8、**libtool** 1.5和**m4**來運行后面的命令。盡管許多操作系統安裝了**make**,很可能編譯失敗,出現許多奇怪的缺陷消息。因此,強烈建議你使用GNU **make**(有時名為**gmake**)。 幸運的是,大量的操作系統預裝了GNU工具鏈或提供了可安裝軟件包。你可以隨時從下面的地址下載: ·???????? [ http://www.gnu.org/software/autoconf/](http://www.gnu.org/software/autoconf/) ·???????? [ http://www.gnu.org/software/automake/](http://www.gnu.org/software/automake/) ·???????? [ http://www.gnu.org/software/libtool/](http://www.gnu.org/software/libtool/) ·???????? [ http://www.gnu.org/software/m4/](http://www.gnu.org/software/m4/) ·???????? [ http://www.gnu.org/software/make/](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) ~~~ 使用將目錄改為innobase和bdb/dist目錄的命令行來配置InnoDB和 Berkeley DB (BDB)儲存引擎。如果你不需要InnoDB或BDB支持,你可以省略這些命令行。 如果在該階段你遇到一些奇怪的錯誤,請確認你是否已經安裝了 **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測試套件”](# "27.1.2.?MySQL Test Suite")。 14.如果你已經進入**make**階段而分發版不編譯,請報告給我們的[http://bugs.mysql.com/](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郵件列表”](# "1.7.1.1.?The MySQL Mailing Lists")。并且,如果你有更好的思想,請向上述地址發送郵件。 17.BitKeeper免費客戶端預裝了源碼。免費客戶端可用的唯一文檔是源碼本身。 你還可以在線瀏覽更改集、注釋和源碼。要想瀏覽MySQL 5.1的相關信息,請到[http://mysql.bkbits.net:8080/mysql-5.1](http://mysql.bkbits.net:8080/mysql-5.1)。 ### 2.8.4.?處理MySQL編譯問題 所有MySQL程序在Solaris或Linux上使用**gcc**編譯并且沒有任何警告。在其它系統上,由于系統包含文件的差別可能會發生警告。對于使用MIT-pthreads時發生的警告。請參見[2.8.5節,“MIT-pthreads注意事項”](# "2.8.5.?MIT-pthreads Notes")。其它問題,檢查下面的表。 許多問題的解決方案涉及重新配置。如果你確實需要重新配置,注意下列事項: - 如果**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** 可以工作,因為**gcc**象**g++**一樣編譯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 ~~~ 已知Solaris和FreeBSD的make程序有問題。 已知GNU make 3.75能工作。 ·???????? 如果你想要定義C或C++編譯器所使用的標志,把標志加到CFLAGS和CXXFLAGS環境變量中即可。也可以使用CC和CXX來指定編譯器名字。例如: ~~~ ·??????????????? 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二進制版本”](# "2.1.2.5.?MySQL Binaries Compiled by MySQL AB")。 ·???????? 如果你遇到象如下的一條錯誤消息,則需要升級**gcc**編譯器: ~~~ ·??????????????? client/libmysql.c:273: parse error before `__attribute__' ~~~ **gcc**2.8.1已知可以工作,但是我們推薦使用**gcc** 2.95.2或**egcs** 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 ~~~ - 更改XXX為size_t或int,取決于你的操作系統。(注意:每次運行**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**版本不完善的跡象。你可能需要安裝**bison**(GNU的**yacc**)并使用它。 ·???????? 在Debian Linux 3.0上, 如果你編譯的MySQL 5.1要支持Berkeley DB,需要安裝gawk代替默認的mawk。 ·???????? 如果你需要調試mysqld或MySQL客戶端,運行**configure**,使用--with-debug選項,然后重新編譯并且將客戶端程序鏈接到新的客戶端庫。請參見[E.2節,“調試MySQL客戶端”](# "E.2.?Debugging a MySQL Client")。 ·???????? 如果你在Linux(例如,SuSE Linux 8.1或Red 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注意事項”](# "2.12.1.?Linux Notes")。 如果你的系統不提供原生的線程支持,將需要使用MIT-pthreads包構造**MySQL**。這包括大多數FreeBSD系統、SunOS 4.x、Solaris 2.4和更早版本及其它,參見[2.1.1節,“MySQL支持的操作系統”](# "2.1.1.?Operating Systems Supported by MySQL")。 MIT-pthreads不是MySQL 5.1源碼分發版的一部分。如果你需要該安裝包,需要單獨從[http://www.mysql.com/Downloads/Contrib/pthreads-1_60_beta6-mysql.tar.gz](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,不能用SIGINT(break)中斷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(...)' - 我們還沒有讓readline在MIT-pthreads上工作。(這不需要,但是可能某些人會感興趣。) ### 2.8.6.?在Windows下從源碼安裝MySQL [ 2.8.6.1. 使用VC++構建MySQL](#)[ 2.8.6.2. 從最新的開發源碼創建Windows源碼安裝包](#) 下面的說明描述了如何在Windows下從5.1版源碼構建MySQL二進制。說明用于從包含最新開發源碼的標準源碼分發版或從BitKeeper樹來構建二進制。 **注釋:**本文檔中的說明嚴格限于在Windows下從最新源碼分發版或從BitKeeper樹來測試MySQL的用戶。作為產品使用時,MySQL AB不建議使用你自己從源碼構建的MySQL服務器。一般情況,最好使用MySQL AB預編譯的對性能進行優化的適用Windows的MySQL二進制分發版。安裝二進制分發版的說明參見[2.3節,“在Windows上安裝MySQL”](# "2.3.?Installing MySQL on Windows")。 要想在Windows中從源碼構建MySQL,Windows系統中應有下面的編譯器和資源: ·???????? Visual Studio 2003編譯器系統(VC++ 7.0)。 ·???????? 3到5GB的硬盤空間。 ·???????? Windows 2000或更高版本。 確切的系統需求見:[http://msdn.microsoft.com/vstudio/productinfo/sysreqs/default.aspx](http://msdn.microsoft.com/vstudio/productinfo/sysreqs/default.aspx) 還需要適用Windows的MySQL源碼分發版。有兩種方法可以獲得MySQL 5.1 源碼分發版: 1.??? 獲得MySQL AB打包的源碼分發版軟件包。預打包的源碼分發版可從 [ http://dev.mysql.com/downloads/](http://dev.mysql.com/downloads/)獲得。 2.??? 你可以用最新BitKeeper開發源碼樹構建源碼分發版。如果你計劃構建,必須在Unix系統中創建安裝軟件包,并將它轉移到Windows系統。(這樣操作的理由是部分配置和構建步驟需要只能在Unix中工作的工具)。BitKeeper方法需要: ·???????? 運行Unix或類似Unix的系統,例如Linux。 ·???????? 該系統上安裝的BitKeeper 3.0。關于如何下載和安裝BitKeeper的說明參見[2.8.3節,“從開發源碼樹安裝”](# "2.8.3.?Installing from the Development Source Tree")。 如果你使用Windows源碼分發版,你可以直接跳到[2.8.6.1節,“使用VC++構建MySQL”](# "2.8.6.1.?Building MySQL Using VC++")。要想從BitKeeper樹構建,繼續[2.8.6.2節,“從最新的開發源碼創建Windows源碼安裝包”](# "2.8.6.2.?Creating a Windows Source Package from the Latest Development Source")。 如果你發現某些組件不能按預料的工作,或者你有好的建議可以改進目前的在Windows中的構建過程,請向win32郵件列表發送消息。請參見[1.7.1.1節,“The MySQL郵件列表”](# "1.7.1.1.?The MySQL Mailing Lists")。 #### 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_debug和lib_debug目錄。程序和庫的發布版本位于client_release和lib_release目錄。請注意如果你想要構建調試版本和發布版本,可以從Build菜單選擇Build All選項。 11.測試服務器。使用前面的說明構建服務器時,默認MySQL基本目錄和數據目錄位于C:\mysql和C:\mysql\data。如果你想要使用源碼樹根目錄和數據目錄作為基本目錄和數據目錄來測試服務器,需要告訴服務器其路徑名。可以在命令行用--basedir和--datadir選項來完成,或將相應選項放入選項文件(在Windows目錄或C:\my.cnf中的my.ini文件)。如果想要使用的數據目錄在其它地方,可以指定其路徑名。 12.根據你想要使用的服務器,從client_release或client_debug目錄啟動服務器。常用服務器啟動說明見[2.3節,“在Windows上安裝MySQL”](# "2.3.?Installing MySQL on Windows")。如果想要使用其它基本目錄或數據目錄,需要相應地更改指令。 13.當服務器根據你的配置獨立運行或作為服務時,嘗試從client_release或client_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安裝注意事項”](# "2.13.?Perl Installation Notes")。 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.3.?Installing MySQL on Windows")。 #### 2.8.6.2.?從最新的開發源碼創建Windows源碼安裝包 要想從當前的BitKeeper源碼樹創建Windows源碼安裝包,使用下面的說明。請注意必須在運行Unix或類Unix操作系統的系統上執行該過程。例如,已知該過程在Linux上工作得很好。 1.??? 復制MySQL 5.1的BitKeeper源碼樹。關于如何復制源碼樹的詳細信息,相關說明參見[2.8.3節,“從開發源碼樹安裝”](# "2.8.3.?Installing from the Development Source Tree")。 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.6.1.?Building MySQL Using VC++")中的說明。 ### 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.?安裝后的設置和測試 [ 2.9.1. Windows下安裝后的過程](#)[ 2.9.2. Unix下安裝后的過程](#)[ 2.9.3. 使初始MySQL賬戶安全](#) 安裝完MySQL后,有一些問題你應當處理。例如,在Unix中,你應當初始化數據目錄并創建MySQL授權表。對于所有平臺,一個重要安全問題是 授權表中的初始賬戶沒有密碼。你應當指定密碼以防止未授權訪問MySQL服務器。你可以創建時區表以識別命名的時區。(目前,只在Unix上裝了這些表。不久將在Windows中解決該問題)。 下面章節包括適用Windows系統和Unix系統的安裝后的過程。另一節,[2.9.2.3節,“啟動MySQL服務器以及其故障診斷和排除”](# "2.9.2.3.?Starting and Troubleshooting the MySQL Server"),適用所有平臺;它描述了啟動服務器時遇到問題時如何解決。[2.9.3節,“使初始MySQL賬戶安全”](# "2.9.3.?Securing the Initial MySQL Accounts")也適用所有平臺。你應當按照說明確保你已經正確地為你的MySQL賬戶指定密碼來保護其安全。 如果你準備創建其它用戶賬戶,你可以在[5.7節,“MySQL訪問權限系統”](# "5.7.?The MySQL Access Privilege System")和[5.8節,“MySQL用戶賬戶管理”](# "5.8.?MySQL User Account Management")找到關于MySQL訪問控制系統和賬戶管理的信息。 ### 2.9.1.?Windows下安裝后的過程 在Windows中,不需要創建數據目錄和授權表。MySQL Windows分發版包括在數據目錄下的MySQL數據庫中的一套預初始化的賬戶的 授權表。不要運行Unix中使用的**mysql_install_db**腳本。但是,如果你沒有使用Windows Installation Wizard(安裝幫助)來安裝MySQL,應當為賬戶指定密碼。請參見[2.3.4.1節,“前言”](# "2.3.4.1.?Introduction")。在[2.9.3節,“使初始MySQL賬戶安全”](# "2.9.3.?Securing the Initial MySQL Accounts")。 設置密碼前,你可能想要運行一些客戶端程序來確保你能夠連接服務器,并且操作正確。確保服務器在運行(參見[2.3.10節,“首次啟動服務器”](# "2.3.10.?Starting the Server for the First Time")),然后發出下面的命令來驗證你可以從服務器獲取信息。輸出應當類似于: ~~~ 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.3.12.?Starting MySQL as a Windows Service")。 ### 2.9.2.?Unix下安裝后的過程 [ 2.9.2.1. 與運行mysql_install_**db有關的問題**](#)[ 2.9.2.2. 自動啟動和停止MySQL](#)[ 2.9.2.3. 啟動MySQL服務器以及其故障診斷和排除](#) 在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”](# "2.9.2.2.?Starting and Stopping MySQL Automatically")。 你完成過程并讓服務器運行后,你應當為**mysql_install_db**創建的賬戶指定密碼。[2.9.3節,“使初始MySQL賬戶安全”](# "2.9.3.?Securing the Initial MySQL Accounts")中列出了相關說明。 在本節的例子中,服務器用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數據庫和可以用來測試MySQL的test數據庫。腳本為root賬戶和匿名用戶賬戶創建 授權表條目。賬戶一開始沒有密碼。[2.9.3節,“使初始MySQL賬戶安全”](# "2.9.3.?Securing the Initial MySQL Accounts")中描述了初始權限。簡單說,這些權限允許MySQL root用戶執行任何操作,允許任何人使用test名創建或使用數據庫或用test_啟動。 一定要確保由mysql登錄賬戶擁有數據庫目錄和文件,以便在以后運行時 服務器具有讀、寫訪問權限。為此,如果你用root用戶運行**mysql_install_db**,應當使用--user選項。否則,當以mysql登錄時,應當執行腳本,你可以省略命令中的--user選項。 **mysql_install_db**在mysql數據庫中創建幾個表,包括user、db、host、 tables_priv、columns_priv和func以及其它。[5.7節,“MySQL訪問權限系統”](# "5.7.?The MySQL Access Privilege System")中有完整的列表和描述。 如果你不想要test數據庫,啟動服務器后,可以用**mysqladmin -u root drop test**卸掉。 如果有**mysql_install_db**相關問題,參見[2.9.2.1節,“與運行mysql_install_**db有關的問題**”](# "2.9.2.1.?Problems Running mysql_install_db")。 有一些選擇運行**mysql_install_db**腳本,正如MySQL分發版中所提供的: ·???????? 如果想讓初始權限與標準默認值不同,你可以在運行前修改**mysql_install_db**。然而,最好是在設置 授權表后使用GRANT和REVOKE來更改權限。換句話說,你可以運行**mysql_install_db**,然后通過MySQL root用戶使用mysql -u rootMySQL來連接服務器,以便發出GRANT和REVOKE命令。 如果你想要在幾個機器上用相同的權限安裝MySQL,可以將GRANT和REVOKE語句放入一個文件中,以腳本方式執行文件,運行**mysql_install_db**之后使用mysql。例如: ~~~ shell> bin/ mysql_install_db --user=mysql ~~~ ~~~ shell> bin/mysql -u root < your_script_file ~~~ ~~~ ? ~~~ 這樣,你就可以避免在每臺機器上手動發出命令。 ·???????? 完全可以重新創建授權表。如果你剛剛知道如何使用GRANT和REVOKE,并且運行**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-privileges**或**mysqladmin 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”](# "A.3.2.?How to Run MySQL as a Normal User")中給出了非特權用戶運行MySQL的說明。 如果在執行該步前你忘記了創建授權表,當你啟動服務器時,在錯誤日志文件中將出現下面的消息: ~~~ mysqld: Can't find file: 'host.frm' ~~~ 如果啟動服務器時遇到其它問題,查閱[2.9.2.3節,“啟動MySQL服務器以及其故障診斷和排除”](# "2.9.2.3.?Starting and Troubleshooting the MySQL Server")。 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服務器以及其故障診斷和排除”](# "2.9.2.3.?Starting and Troubleshooting the MySQL Server")。 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/](http://www.cpan.org/))獲得這些模塊。請參見[2.13.1節,“在Unix中安裝Perl”](# "2.13.1.?Installing Perl on Unix")。 ?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賬戶安全”](# "2.9.3.?Securing the Initial MySQL Accounts")中的說明來指定密碼。 MySQL 5.1安裝過程在MySQL數據庫中創建時區表。但是,必須手動裝載表。相關說明參見[5.10.8節,“MySQL服務器時區支持”](# "5.10.8.?MySQL Server Time Zone Support")。 #### 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節,“如何通報缺陷和問題”](# "1.7.1.3.?How to Report Bugs or Problems")。 ·???????? **已經有一個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服務器”](# "5.12.?Running Multiple MySQL Servers on the Same Machine")。 ·???????? **你沒有****“ /tmp ”****的寫權限** 如果你沒有寫權限在默認位置(在“/tmp”里)創建一個Unix套接字文件,或沒有在“/tmp”創建臨時文件的許可,在運行**mysql_install_db**或**mysqld**服務器時,你將遇到一個錯誤。 你可以在開始**mysql_install_db**或**mysqld**之前執行以下命令指定一個不同的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``”](# "A.4.5.?How to Protect or Change the MySQL Socket File /tmp/mysql.sock")。請參見[附錄F:*環境變量*](# "Appendix?F.?Environment Variables")。 #### 2.9.2.2.?自動啟動和停止MySQL 通常你可以用以下方法啟動**mysqld**服務器: ·???????? 直接調用**mysqld**。該方法適合任何平臺。 ·???????? 作為Windows服務運行MySQL服務器。可以在支持服務的Windows版本(例如 NT、2000、XP和2003)上實現。可以將服務設置為在Windows 啟動時自動啟動服務器,或根據需要啟動的手動服務。相關說明參見[2.3.12節,“以Windows服務方式啟動MySQL”](# "2.3.12.?Starting MySQL as a Windows Service")。 ·???????? 調用**mysqld_safe**,可以為**mysqld**確定正確的選項然后使用這些選項來運行。該腳本適用于基于BSD Unix的系統。請參見[5.1.3節,“mysqld_safe:MySQL服務器啟動腳本”](# "5.1.3.?mysqld_safe — MySQL Server Startup Script")。 ·???????? 調用**mysql.server**。該腳本主要用于使用系統V-style運行目錄的系統的啟動和關閉,它通常安裝到mysql下。**mysql.server**腳本調用**mysqld_safe**來啟動服務器。請參見[5.1.4節,“mysql.server:MySQL服務器啟動腳本”](# "5.1.4.?mysql.server — MySQL Server Startup Script")。 ·???????? 你可以在Mac OS X上安裝一個單獨的MySQL Startup Item安裝包來使系統啟動時自動啟動MySQL。Startup Item調用**mysql.server**來啟動服務器。詳細介紹參見 [ 2.5節,“在Mac OS X上安裝MySQL”](# "2.5.?Installing MySQL on Mac OS X")。 **mysql.server**和**mysqld_safe**腳本和Mac OS X Startup Item可以用來手動啟動服務器,或自動啟動系統。**mysql.server**和Startup Item還可以用來停止服務器。 mysql.server腳本可以被用來啟動或停止服務器,通過用start或stop參數調用它: ~~~ 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”](# "2.4.?Installing MySQL on Linux")。 一些供應商提供的RPM軟件包安裝的啟動腳本名字不同,例如**mysqld**。 如果從不自動安裝**mysql.server**的源碼分發版或二進制分發版格式來安裝MySQL,可以手動安裝它。可以在MySQL安裝目錄下或MySQL 源碼樹的support-files目錄中找到腳本。 要想手動安裝**mysql.server**,用名稱**mysql**將它復制到/etc/init.d目錄,然后將它變為可執行文件。只需要將位置更改為**mysql.server**is所在并執行這些命令的相應目錄: ~~~ 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腳本使用下列變量:basedir、datadir和pid-file。定義后,必須將它們放到選項文件中,不能放到命令行。**mysql.server**只識別start和stop命令行參數。 下面的表顯示了服務器和每個啟動腳本從選項文件讀取哪個選項組: <table border="1" cellpadding="0" id="table8"><tr><td width="140"> <p><strong> <span>腳本</span></strong></p></td> <td width="309"> <p><strong> <span>選項組</span></strong></p></td> </tr><tr><td width="140"> <p><strong> <span>mysqld</span></strong></p></td> <td width="309"> <p> <span>[mysqld]</span><span>, </span> <span>[server]</span><span>, </span> <span>[mysqld-major-version]</span></p></td> </tr><tr><td width="140"> <p><strong> <span>mysql.server</span></strong></p></td> <td width="309"> <p> <span>[mysqld]</span><span>, </span> <span>[mysql.server]</span><span>, </span> <span>[server]</span></p></td> </tr><tr><td width="140"> <p><strong> <span>mysqld_safe</span></strong></p></td> <td width="309"> <p> <span>[mysqld]</span><span>, </span> <span>[server]</span><span>, </span> <span>[mysqld_safe]</span></p></td> </tr></table> [mysqld-major-version]意味著名為[mysqld-5.0]的組,[mysqld-5.1]用于版本為5.0.x、5.1.x等的服務器。該特性可以用來指定只被給定發布系列的服務器讀取的選項。 為了向后兼容,**mysql.server**還讀取[mysql_server]組,**mysqld_safe**還讀取[safe_mysqld]組。然而,當使用MySQL 5.1時,你應當更新選項文件,使用[mysql.server]和[mysqld_safe]組。 參見[4.3.2節,“使用選項文件”](# "4.3.2.?Using Option Files")。 #### 2.9.2.3.?啟動MySQL服務器以及其故障診斷和排除 如果啟動服務器時有問題,可以嘗試: ·???????? 指定你使用的儲存引擎需要的任何特殊選項。 ·???????? 確保服務器知道從哪里找到數據目錄。 ·???????? 確保服務器可以使用數據目錄。數據目錄和內容的所有權和允許必須設置成服務器可以訪問和修改它們。 ·???????? 檢查錯誤日志查看服務器為何不啟動。 ·???????? 驗證服務器想要使用的網絡接口可用。 一些儲存引擎有一些選項可以控制其行為。你可以創建一個my.cnf文件并為計劃使用的引擎設置啟動選項。如果你將要使用支持事務處理表 (InnoDB,BDB)的儲存引擎,應確保啟動服務器之前按照你的期望對它們進行了配置: ·???????? 如果你正使用InnoDB表,參閱InnoDB-specific啟動選項。如果你未指定選項,InnoDB使用默認值作為配置選項。請參見[15.2.3節,“InnoDB配置”](# "15.2.3.?InnoDB Configuration")。 ·???????? 如果你正使用BDB (Berkeley DB)表,你應當熟悉不同的BDB-specific啟動選項。請參見[15.5.3節,“BDB啟動選項”](# "15.5.3.?BDB Startup Options")。 當**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_name*是MySQL服務器主機的名稱。 如果啟動**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\data,Unix二進制分發版為/usr/local/mysql/data,Unix源碼分發版為/usr/local/var)。查找數據目錄中的*host_name*.err和*host_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選項啟動**mysqld**,Berkeley 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服務器”](# "5.12.?Running Multiple MySQL Servers on the Same Machine")中發現相關信息)。 如果沒有其它服務器在運行,嘗試執行命令 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節,“創建跟蹤文件”](# "E.1.2.?Creating Trace Files")。 關于在Windows安裝中排錯的詳細信息,參見[2.3.14節,“在Windows環境下對MySQL安裝的故障診斷與排除”](# "2.3.14.?Troubleshooting a MySQL Installation Under Windows")。 ### 2.9.3.?使初始MySQL賬戶安全 MySQL安裝過程包括設置含有授權表的MySQL數據庫: ·???????? Windows分發版包含預初始化的授權表,可以自動安裝。 ·???????? 在Unix中,用**mysql_install_db**程序來安裝 授權表。可以通過一些安裝方法來運行該程序。否則你需要手動執行。詳細信息參見[2.9.2節,“Unix下安裝后的過程”](# "2.9.2.?Unix Post-Installation Procedures")。 授權表定義了初始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 PASSWORD或UPDATE。在兩種情況中,一定要使用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列指定一個值。在Windows和Unix中的過程是相同的。下面的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; ~~~ 可以在Windows和Unix中使用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*。這是你指定匿名賬戶密碼的主機名。 要想使用**mysqladmin**為root賬戶指定密碼,執行下面的命令: ~~~ ? shell> mysqladmin -u root password "newpwd" ~~~ ~~~ ? shell> mysqladmin -u root -h host_name password "newpwd" ~~~ 上述命令適用于Windows和Unix。用服務器主機名替換第二個命令中的*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語句適用于Windows和Unix。 設置完密碼后,當你連接服務器時你必須提供相應密碼。例如,如果你想要用**mysqladmin**關閉服務器,可以使用下面的命令: ~~~ shell> mysqladmin -u root -p shutdown ~~~ ~~~ Enter password: (enter root password here) ~~~ **注釋:**如果你設置了root密碼后忘記了密碼,從[A.4.1節,“如何復位根用戶密碼”](# "A.4.1.?How to Reset the Root Password")中查閱重設密碼的方法。 你可以使用GRANT語句設置新賬戶。相關說明參見[5.8.2節,“向MySQL增加新用戶賬戶”](# "5.8.2.?Adding New User Accounts to MySQL")。 ### 2.10.?升級MySQL [ 2.10.1. 從5.0版升級](#)[ 2.10.2. 升級授權表](#)[ 2.10.3. 將MySQL數據庫拷貝到另一臺機器](#) 做為一般原則,我們建議從一個發布系列升級到另一個發布系列時,你應當先升級到它的下一個系列而不要跳過。例如,如果你目前正運行MySQL 3.23,想要升級到較新的系列,要升級到MySQL 4.0而不要升級到5.0或5.1。 下面的項列出了升級時的相關信息: ·???????? 從MySQL 5.0升級到5.1前,請閱讀[2.10.1節,“從5.0版升級”](# "2.10.1.?Upgrading from Version 5.0")和[附錄D:*MySQL變更史*](# "Appendix?D.?MySQL Change History")。其中提供了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”](# "2.3.15.?Upgrading MySQL on Windows")。 ·???????? 從MySQL 5.0升級到5.1更改MySQL數據庫中的 授權表;增加了列和表以支持新功能。為了充分利用這些特性,應確保授權表是最新的。升級授權表的過程參見[2.10.2節,“升級授權表”](# "2.10.2.?Upgrading the Grant Tables")。在升級前,你可能想要使用**mysqldump**來轉儲表;升級后,可以使用**mysql**或mysqlimport重建、重裝 授權表來重載dump(備份)文件。 ·???????? 如果你正復制,關于升級復制設置的信息參見[6.6節,“升級復制設置”](# "6.6.?Upgrading a Replication Setup")。 ·???????? 如果安裝包括**mysqld**-max****服務器的MySQL-Max分發版,則后面要升級到非Max版的MySQL,**mysqld_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.?Upgrading the Grant Tables")。 ### 2.10.2.?升級授權表 一些發布對授權表(MySQL數據庫中的表)的結構進行了更改以增加新的權限或特性。當你更新到新版本 MySQL時,要想確保授權表最新,應當運行**mysql_fix_privilege_tables**腳本來更新 授權表。相關過程參見[5.4節,“mysql_fix_privilege_tables:升級MySQL系統表”](# "5.4.?mysql_fix_privilege_tables — Upgrade MySQL System Tables")。 如果你從MySQL 4.1或更早版本升級,授權表升級過程為CREATE VIEW和SHOW VIEW權限增加了視圖相關的列。這些權限位于全局和數據庫 級。在這種情況下,MySQL 5.1版MySQL**_fix_privilege_ tables**將user表中的Create_priv值復制到Create_view_priv和 Show_view_priv列。 ### 2.10.3.?將MySQL數據庫拷貝到另一臺機器 你可以在支持相同浮點格式的不同架構之間為MyISAM表復制.frm、.MYI和.MYD文件。(MySQL關注所有字節交換問題)。請參見[15.1節,“MyISAM存儲引擎”](# "15.1.?The MyISAM Storage Engine")。 如果你需要在不同的架構之間轉移數據庫,可以使用**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 ~~~ 還可以使用**mysqldump**和**mysqlimport**來轉移數據庫。對于大的表,比只是使用**mysqldump**要快得多。在下面的命令中,DUMPDIR代表用來保存**mysqld**ump****輸出的目錄全路徑名。 首先,創建保存輸出文件的目錄并備份數據庫: ~~~ 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”](# "2.10.?Upgrading MySQL")。 ·???????? 如果該版本有降級部分,你也應當閱讀。 只要MySQL版本屬于相同的發布系列,你總是可以在不同的版本之間的相同架構上移動MySQL格式文件和數據文件。目前的產品發布系列是5.1。 如果你從一個發布系列降級到另一個發布系列,表儲存格式可能不兼容。在這種情況下,你可以在降級嵌使用**mysqldump**來轉儲表。降級后,使用**mysql**或mysqlimport重載轉儲文件來重新創建表。請參見[2.10.3節,“將MySQL數據庫拷貝到另一臺機器”](# "2.10.3.?Copying MySQL Databases to Another Machine")。 表格式不向下兼容的一般跡象是降級時不能打開表。在這種情況下,使用下面的過程: 1.??? 停止你想要降級到的舊的MySQL服務器。 2.??? 重新啟動將被降級的新的MySQL服務器。 3.??? 使用**mysqldump**創建一個dump(轉儲)文件來轉儲不能被舊服務器訪問的所有表。 4.??? 停止新MySQL服務器,重新啟動舊MySQL服務器。 將dump(轉儲)文件重載入舊服務器。表應當可訪問。 ### 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.12.1.?Linux注意事項 [ 2.12.1.1. Linux操作系統注意事項](#)[ 2.12.1.2. Linux二進制分發版說明](#)[ 2.12.1.3. Linux源碼分發版說明](#)[ 2.12.1.4. Linux后期安裝注意事項](#)[ 2.12.1.5. Linux x86注意事項](#)[ 2.12.1.6. Linux SPARC注意事項](#)[ 2.12.1.7. Linux Alpha注意事項](#)[ 2.12.1.8. Linux PowerPC注意事項](#)[ 2.12.1.9. Linux MIPS注意事項](#)[ 2.12.1.10. Linux IA-64注意事項](#) 本節討論發現的在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二進制分發版說明 MySQL的Linux-Intel二進制和RPM發布配置為最高的可能速度。我們一直在嘗試使用可用的最快的穩定的編譯器。 二進制發布用-staticis連接,說明一般情況你不需要關心系統庫的版本。你也不需要安裝LinuxThreads。用-staticis連接的程序稍微大于動態連接程序,但也稍微快一些(3-5%)。但是,靜態連接程序的一個問題是你不能使用用戶定義函數(UDF)。如果你將要寫或使用UDF(只適用于C或C++ 編程人員),你必須使用動態鏈接自己編譯MySQL。 二進制分發版的一個已知問題是在使用libc的舊的Linux系統(例如Red Hat 4.x或Slackware)上,你會遇到一些(非致命)主機名解析問題。如果系統使用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**進程的用戶ID,**mysqld**不再需要這樣做。 另一個解決辦法可以解決兩個問題,即不使用二進制分發版。獲得MySQL源碼分發版(RPM或tar.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限制的大量并行連接或表設置,在大多數情況下,我們的二進制仍然是最佳選擇。閱讀下面的內容后,如果你不清楚怎樣做,先試用我們的二進制看它是否滿足你的需求。如果你發現它不夠完善,那么你可以嘗試你自己的構建。在這種情況下,我們很希望能看到相關注釋,以便我們下次可以構建更好的二進制。 ** MySQL**在Linux上使用 LinuxThreads 。如果你正在使用一個沒有glibc2的老的Linux版本,你必須在嘗試編譯**MySQL**前安裝LinuxThreads。你可以從[ http://dev.mysql.com/downloads/os-linux.html](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為默認值2MB,MySQL有600-1000個連接時不穩定)。 ·???????? 重新編譯LinuxThreads,生成新的libpthreads.a庫,并重新連接MySQL。 可以從[http://www.volano.com/linuxnotes.html](http://www.volano.com/linuxnotes.html)查閱關于LinuxThreads線程限制的詳細信息。 還有一個問題會嚴重影響MySQL的性能,特別是在SMP系統中。在glibc 2.1的LinuxThreads中,對于擁有很多只是短時間內占有互斥體的線程的程序,不能很好地執行互斥。結果出現荒謬的現象:在許多情況下,如果你使用未修改的LinuxThreads連接MySQL,從SMP中去掉卸載處理器實際上會提高MySQL的性能。我們提供了一個glibc 2.1.3的補丁來糾正該行為([http://www.mysql.com/Downloads/Linux/linuxthreads-2.1-patch](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](http://www.mysql.com/Downloads/Linux/linuxthreads-2.2.2.patch)下載。它集成高旋的糾正、線程最大數目和堆棧空間于一體。你需要用補丁patch -p0 </tmp/linuxthreads-2.2.2.patch在LinuxThreads目錄下使用。我們 希望在將來的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”](# "2.9.2.2.?Starting and Stopping MySQL Automatically")。 如果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。 LinuxThreads的STACK_SIZE常數控制在尋址空間中線程堆棧的占用空間。它需要足夠大,以保證每個線程堆棧有足夠的空間,但是應足夠小,防止某些線程的堆棧運行全局**mysqld**數據。遺憾的是,根據我們的發現,如果你用mmap()映射目前正使用的尋址,Linux成功運行? 后不會映射映射區,將會清空整個地址頁上的數據而不會返回錯誤信息。因此,**mysqld**或其它線程應用程序的安全依靠創建線程的代碼的“紳士”行為。用戶必須采取措施以確保在任何時間運行線程的數目相對線程堆棧應足夠低,以防止全局堆內存。使用**mysqld**時,你應當為max_connections變量設置合理的值強制該行為。 如果你自己構建MySQL,你可以為LinuxThreads打補丁以便更好地使用堆棧。請參見[2.12.1.3節,“Linux源碼分發版說明”](# "2.12.1.3.?Linux Source Distribution Notes")。如果你不想為LinuxThreads打補丁,你應當將max_connections的值設置為不超過500。如果你有大的關鍵字緩沖區、大的堆內存表,或其它使**mysqld**分配大量內存的東西,或如果你用2GB的補丁運行2.2內核,max_connections的值應當更低。如果你正使用我們的二進制或RPM版本,可以安全地將max_connections設置為1500(假定沒有大的關鍵字緩沖區或有大量數據的堆內存表。將LinuxThreads中的STACK_SIZE降低得越低,可以安全地創建越多的線程。我們推薦的值的范圍為128KB到256KB。 如果你正使用大量的并行連接,在2.2內核中你可能會遇到一個“特性”,即通過對進程的分支或克隆子進程的行為進行罰分,來試圖防止轟炸攻擊。這樣你增加并行客戶端的數量時,MySQL不能正確響應。在單CPU系統中,我們已經發現該現象,即線程創建地很慢;連接MySQL的時間很長(長達1分鐘),并且關閉的時間也很長。在多CPU系統中,我們已經觀察到隨著客戶端數目的增加,查詢速度逐漸下降。在尋求解決辦法的過程中,我們收到了一個用戶的內核補丁,他聲稱該補丁可以解決他的問題。從[http://www.mysql.com/Downloads/Patches/linux-fork.patch](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_safe**加renice -20 $$命令來實現。在四-CPU系統中的測試中,提高優先級在400個客戶時會使吞吐量增加60%。 我們目前還想搜集關于MySQL在four-way和eight-way系統上用2.4內核執行的性能的更詳細信息。如果你訪問了這些系統并進行了一些基準測試,請將結果用email發送到<[benchmarks@mysql.com](#)>。我們將對它們進行審查以包括進手冊中。 如果用**ps**運行**mysqld**服務器進程時發現進程死掉了,一半是MySQL中有缺陷或數據庫表崩潰了。請參見[A.4.2節,“如果MySQL依然崩潰,應作些什么”](# "A.4.2.?What to Do If MySQL Keeps Crashing")。 如果**mysqld**死掉并給出SIGSEGV信號,要想在Linux中對內核進行調試,你可以用--core-file選項啟動**mysqld**。注意你還可能需要通過向**mysqld_safe**添加**ulimit -c 1000000**或用--core-file-size=1000000啟動**mysqld_safe**來加大內核文件的大小。請參見[5.1.3節,“mysqld_safe:MySQL服務器啟動腳本”](# "5.1.3.?mysqld_safe — MySQL Server Startup Script")。 #### 2.12.1.5.?Linux x86注意事項 MySQL需要5.4.12或更新版本的libc。已知它可以在libc 5.4.46中工作。glibc 2.0.6和更新版本應當也可以工作。Red Hat的glibc RPM有一些問題,因此如果你遇到問題,應看看是否有更新版。已知glibc 2.0.7-19和2.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=192K)。 在MySQL 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 definiti在of `_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-SMP、Compaq C編譯器(V6.2-505)和Compaq C++編譯器(V6.3-006)構建MySQL二進制軟件包。 你可以從[ http://www.support.compaq.com/alpha-tools/](http://www.support.compaq.com/alpha-tools/)找到上述編譯器。使用這些編譯器,得到的MySQL性能比**gcc**要好9-14%。 在Alpha版MySQL中,我們在編譯選項中使用-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注意事項 為了使MySQL在Qube2(Linux Mips)上工作,需要最新的glibc庫。已知glibc-2.0.7-29C2可以工作。還必須使用**egcs** C++編譯器(**egcs** 1.0.2-9、**gcc** 2.95.2或更新版)。 #### 2.12.1.10.?Linux IA-64注意事項 要想讓MySQL在Linux 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客戶端庫的鏈接問題”](# "A.3.1.?Problems Linking to the MySQL Client Library")。 ### 2.12.2.?Mac OS X注意事項 [2.12.2.1. Mac OS X 10.x (Darwin)](#)[2.12.2.2. Mac OS X Server 1.2 (Rhapsody)](#) 在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_timeout、interactive_timeout和net_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.5.?Installing MySQL on Mac OS X")。 #### 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.5.?Installing MySQL on Mac OS X")。 ### 2.12.3.?Solaris注意事項 [ 2.12.3.1. Solaris 2.7/2.8注意事項](#)[ 2.12.3.2. Solaris x86注意事項](#) 在Solaris中,甚至在解壓縮MySQL分發版時,你也會遇到問題,因為Solaris **tar**不能處理長文件名。這說明解壓縮MySQL分發版時會遇見錯誤。 如果出現這種問題,必須使用GNU **tar**(**gtar**)來解壓縮分發版。可以從[http://dev.mysql.com/downloads/os-solaris.html](http://dev.mysql.com/downloads/os-solaris.html)找到預編譯的Solaris版本。 Sun原生線程只在Solaris 2.5和更高版本中工作。對于版本2.4和更早版本,MySQL自動使用MIT-pthreads。請參見[2.8.5節,“MIT-pthreads注意事項”](# "2.8.5.?MIT-pthreads Notes")。 如果你運行**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.2或3.2。可以從[http://gcc.gnu.org/](http://gcc.gnu.org/)下載。請注意**egcs** 1.1.1和**gcc** 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系統,在CFLAGS和CXXFLAGS環境變量中加上-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二進制,在CFLAGS和CXXFLAGS中增加-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 儲存引擎時將會造成嚴重的性能下降。 如果fdatasync或sched_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加到CFLAGS和CXXFLAGS上并重新編譯。 如果你正使用**gcc**的SFW版本(在Solaris 8安裝包內),運行**configure**之前你必須將/opt/sfw/lib加到環境變量LD_LIBRARY_PATH上。 如果你正使用從sunfreeware.com下載的**gcc**,會遇到許多問題。要想避免,應當在運行機器上重新編譯**gcc**和GNU 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不提供靜態版本的系統庫(libpthreads和libdl),因此你不能用--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/S99**mysql.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.7和2.8中使用Solaris 2.6二進制。大多數Solaris 2.6發布也適用Solaris 2.7和2.8。 MySQL應當能夠自動檢測到新的Solaris版本并解決下面的問題。 Solaris 2.7/2.8的include文件中有一些缺陷。當使用**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上使用**gcc**或**egcs**,并且你碰到了在裝載時的內核轉儲問題,應該使用下列**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環境下調試m**ysqld**”](# "E.1.3.?Debugging mysqld under gdb")。 ### 2.12.4.?BSD注意事項 [ 2.12.4.1. FreeBSD注意事項](#)[ 2.12.4.2. NetBSD注意事項](#)[ 2.12.4.3. OpenBSD 2.5版注意事項](#)[ 2.12.4.4. BSD/OS 2.x版注意事項](#)[ 2.12.4.5. BSD/OS 3.x版注意事項](#)[ 2.12.4.6. BSD/OS 4.x版注意事項](#) 本節提供在各種BSD Unix中使用MySQL的相關信息。 #### 2.12.4.1.?FreeBSD注意事項 對于運行MySQL,推薦使用FreeBSD 4.x或更新版本,因為其線程包更加完整。要想遇到一個安全、穩定的系統,你應當只使用標記-RELEASE的FreeBSD內核。 最容易因此是比較受喜歡的安裝方法是使用**mysql-server**和mysql-client移植,可從[http://www.freebsd.org](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中的MySQL同LinuxThreads庫連接,這樣可以避免一些原生FreeBSD線程執行時的問題。為了更好地將LinuxThreads同原生線程進行對比,參見Jeremy Zawodny的文章*FreeBSD or Linux for your MySQL Server?*地址:[http://jeremy.zawodny.com/blog/archives/000697.html](http://jeremy.zawodny.com/blog/archives/000697.html)。 在FreeBSD使用LinuxThreads的已知問題有: ·???????? 連接時間(wait_timeout、interactive_timeout和net_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注意事項”](# "2.8.5.?MIT-pthreads Notes")。 如果你從**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節,“文件未找到”](# "A.2.17.?File Not Found")。使用--open-files-limit選項執行**mysqld_safe**啟動服務器,或在/etc/login.conf為**mysqld**用戶提高限制并用cap_mkdb /etc/login.conf重建它。如果你不使用默認名(即使用chpass mysqld-user-name),還要保證為該用戶設置在密碼文件中的相應級別。請參見[5.1.3節,“mysqld_safe:MySQL服務器啟動腳本”](# "5.1.3.?mysqld_safe — MySQL Server Startup Script")。 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:*環境變量*](# "Appendix?F.?Environment Variables")。 #### 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**,試試換到**csh**或**sh**;一些BSDI用戶報告了使用**bash**和**ulimit**有問題。 如果你正在使用**gcc**,可能必須為**configure**使用--with-low-memory標志才能編譯“sql_yacc.cc”。 如果MySQL的當前日期有問題,設置TZ變量將會有幫助。請參見[附錄F:*環境變量*](# "Appendix?F.?Environment Variables")。 #### 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**,試試換到**csh**或**sh**;一些BSDI用戶報告了使用**bash**和**ulimit**會有問題。 #### 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版注意事項](#)[ 2.12.5.2. HP-UX 11.x版注意事項](#)[ 2.12.5.3. IBM-AIX注意事項](#)[ 2.12.5.4. SunOS 4注意事項](#)[ 2.12.5.5. Alpha-DEC-UNIX(Tru64)版注意事項](#)[ 2.12.5.6. Alpha-DEC-OSF/1注意事項](#)[ 2.12.5.7. SGI Irix注意事項](#)[ 2.12.5.8. SCO UNIX和OpenServer 5.0.x版注意事項](#)[ 2.12.5.9. SCO UnixWare 7.1.x和OpenUNIX 8.0.0版注意事項](#)[ 2.12.5.10. SCO OpenServer 6.0.x版注意事項](#) #### 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.h:184和/usr/include/sys/pthreads.h:440中的原型沖突。 一個解決辦法是將/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 C和C++編譯器的路徑前是否有到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/](http://dev.mysql.com/downloads/)提供的MySQL二進制,這是我們已經構建并測試過的。我們也收到了MySQL的HP-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/](http://www-frec.bull.com/)找到上述編譯MySQL分發版的選項。 如果你將前面的**configure**行中的-O3改為-O2,必須刪掉-qstrict選項。這是對IBM C編譯器的限制。 如果你正在使用**gcc**或**egcs**編譯**MySQL**,**必須**使用-fno-exceptions標志,因為**gcc/egcs**的異常處理不是對線程安全的!(已經用**egcs**1.1測試過)。IBM匯編程序也有一些已知問題,當使用**gcc**時可以生成壞的代碼。 在 AIX 上使用**egcs**和**gcc**** 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。一般情況可能需要使用power2、power或powerpc。另外,你可能需要使用604或604e。我們不能絕對肯定但懷疑power一般應安全,即使在power2機器上也安全。 如果你不知道你的CPU是什么樣的,可以執行uname -m命令。可以產生類似000514676700的字符串,格式為xxyyyyyymmss,其中xx和ss總是00,yyyyyy是唯一的系統ID,mm是CPU Planar的ID。從[http://www16.boulder.ibm.com/pseries/en_US/cmds/aixcmds5/uname.htm](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 kill**或**mysqladmin shutdown**殺死在一個連接上“睡眠”的客戶端。相反,當客戶端發出下一個命令時,它將死掉。 在AIX的一些版本上用libbind.a鏈接使得getservbyname()內核轉儲,這是AIX的一個缺陷并且應該報告IBM。 對于AIX 4.2.1和**gcc**,進行下面的更改。 配置完后,編輯config.h和include/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](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,因為**egcs**在DEC上有一些嚴重缺陷! 當在Digital UNIX下編譯線程程序時,文檔推薦對于**cc**和**cxx**使用-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服務器啟動腳本”](# "5.1.3.?mysqld_safe — MySQL Server Startup Script")。 如果編譯mysys/get_opt.c時遇到問題,只需要從啟動文件刪掉#define _NO_PROTO行。 如果使用Compaq的CC編譯器,下面的**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******CC**和**gcc**,嘗試這樣運行**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/](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 kill**或**mysqladmin 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_ALLOC和HAVE_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](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](http://support.sgi.com/surfzone/patches/patchset/6.2_posix.rps.html) 如果在編譯“mysql.cc”時,遇到類似于下面的錯誤: ~~~ "/usr/include/curses.h", line 82: error(1084): ~~~ ~~~ invalid combinati在of type ~~~ 那么應在**MySQL**源碼樹的頂級目錄輸入下列命令: ~~~ extra/replace bool curses_bool < /usr/include/curses.h > include/curses.h ~~~ ~~~ make ~~~ 應該也有安排上的問題報告。如果只有一個線程正在運行,事情會變慢的。通過啟動另外一個客戶端來避免它,這可以導致此后其它線程的執行速度增加2到10倍。這是Irix線程難以理解的問題;可能必須臨時準備找出解決方案直到它能被修正。 ? 如果你正在用gcc編譯,可以使用下列**configure**命令: ? ~~~ CC=gcc CXX=gcc CXXFLAGS=-O3 \ ~~~ ~~~ ./configure --prefix=/usr/local/mysql --enable-thread-safe-client \ ~~~ ~~~ ??? --with-named-thread-libs=-lpthread ~~~ 在用原生Irix C和C++編譯器7.3.1.2的Irix 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.6O的penServer Execution Environment Supplement oss646B和oss656B,OpenSource庫位于 gwxlibs。所有OpenSource工具位于opensrc目錄。可以從[ftp://ftp.sco.com/pub/openserver5/opensrc/](#)獲得。 我們建議使用最新的MySQL產品發布。 SCO提供的操作系統補丁:OpenServer 5.0.[0-6]:[ftp://ftp.sco.com/pub/openserver5](#),OpenServer 5.0.7:[ftp://ftp.sco.com/pub/openserverv5/507](#)。 SCO提供的關于安全修復的信息:Server 5.0.x:[ftp://ftp.sco.com/pub/security/OpenServer](#)。 OpenSever 5.0.x系統上最大的文件的大小為2GB。 在OpenServer 5.0.x上,可供串緩沖區、clist和鎖定記錄分配的總內存不能超出60MB。 串緩沖區的分配單位為4096 字節的頁,clists為70字節,鎖定記錄為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 aio或Hardware/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應當為4096或2048。 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數據庫引擎。 NOFILES和MAXUP至少應達到2048。 MAXPROC至少應當設置到3000/4000(取決于用戶數)或更大值。 建議使用下面的公式來計算SEMMSL、SEMMNS和SEMMNU的值: ~~~ 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](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能用帶tcpip的SCO UNIX 4.2編譯,或使用OpenServer 3.0或Open Desktop 3.0(OS 3.0 ODT 3.0),安裝帶有使用一個GCC 2.5.X的SCO開發系統。對ODT或OS 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.a”和“libgthreads.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會掛起。 ·???????? SCO在[ftp://ftp.sco.com/pub/openserver5](#)提供了OpenServer 5.0.x的操作系統補丁。 ·???????? SCO在[ftp://ftp.sco.com/pub/security/sse](#)和[ftp://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.2和libresolv.so.1的telnetd修復,以及在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.4或OpenServer 6.0.0中的Berkeley DB版本。MySQL使用自己的Berkeley DB。用來構建靜態和動態庫的**configure命令**在*src_directory*/bdb/build_unix/中,但是它不在MySQL自己的BDB版本中。工作區如下所示。 1.??? 按常規配置MySQL。 2.??? 進入(cd)bdb/build_unix/ 3.??? 將 -p Makefile復制(cp)到Makefile.sav 4.??? 使用同樣的選項并運行**../dist/configure**。 5.??? 運行**gmake**。 6.??? cp -p Makefile.sav Makefile 7.??? 進入頂級源目錄并運行**gmake**。 允許生成共享和動態庫并工作。 SCO在[ftp://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提供的安全修復相關信息:OpenUNIX見[ftp://ftp.sco.com/pub/security/OpenUNIX](#),UnixWare見 [ 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數據庫引擎。 SFNOLIM和HFNOLIM至少應達到2048。 NPROC至少應當設置到3000/4000(取決于用戶數)。 建議使用下面的公式來計算SEMMSL、SEMMNS和SEMMNU的值: ~~~ 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**,必須使用**gcc**2.95.3或更新版。 ~~~ CC=gcc CXX=g++ ./configure --prefix=/usr/local/mysql ~~~ 當構建MySQL時不使用UnixWare 7.1.4或OpenServer 6.0.0中的Berkeley DB版本。MySQL使用自己的Berkeley DB。用來構建靜態和動態庫的**configure命令**在*src_directory*/bdb/build_unix/中,但是它不在MySQL自己的BDB版本中。工作區如下所示。 1.??? 按常規配置MySQL。 2.??? 進入(cd)bdb/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.guess的config.guess的補丁。你可以從[ftp://ftp.zenez.com/pub/zenez/prgms/mysql-4.1.12-osr6-patches.tar.gz](#)和[ftp://ftp.zenez.com/pub/zenez/prgms/mysql-4.x.x-osr6-patches](#)下載補丁。有一個README文件可以提供幫助。 SCO在[ftp://ftp.sco.com/pub/openserver6](#)提供了OpenServer6的操作系統補丁。 SCO在[ftp://ftp.sco.com/pub/security/OpenServer](#)提供關于安全修復的信息。 默認情況,在OpenServer6.0.0系統的最大文件大小為1TB。一些操作系統工具的限制是2GB。在UnixWare 7中最大文件大小可以是1TB(用 VXFS或HTFS)。 默認情況,/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數據庫引擎。 SFNOLIM和HFNOLIM至少應達到2048。 NPROC至少應當設置到3000/4000(取決于用戶數)。 建議使用下面的公式來計算SEMMSL、SEMMNS和SEMMNU的值: ~~~ 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**必須安裝在支持長文件名的一個分區上,如HPFS、FAT32等等。 “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安裝注意事項 [ 2.13.1. 在Unix中安裝Perl](#)[ 2.13.2. 在Windows下安裝ActiveState Perl](#)[ 2.13.3. 使用Perl DBI/DBD接口的問題``](#) Perl對**MySQL**的支持借助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](http://search.cpan.org)獲得Unix需要的模塊,或在Windows中使用ActiveState **ppm**程序。以下章節描述了如何做。 如果你想要運行MySQL基準腳本,必須安裝Perl支持。請參見[7.1.4節,“MySQL基準套件”](# "7.1.4.?The MySQL Benchmark Suite")。 ### 2.13.1.?在Unix中安裝Perl **MySQL** Perl支持也要求你安裝了**MySQL**客戶端編程支持(庫和頭文件)。大多數安裝中安裝了必要的文件。但是,如果你在Linux中從RPM文件安裝MySQL,確保安裝了開發者RPM。客戶端程序在客戶端RPM中,但是客戶端編程支持在開發者RPM。 如果你想要安裝Perl支持,需要的文件能從[http://search.cpan.org](http://search.cpan.org)的CPAN (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](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 Perl的MySQL DBD模塊: ·???????? 從[http://www.activestate.com/Products/ActivePerl/](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.so的**make**的輸出)。-L選項應指定libgcc.a在系統中的安裝目錄的路徑名。 該問題的另一個原因是Perl和MySQL沒有用**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 ~~~ 這些更改是必需的,因為用**icc**或**cc**編譯的Perl動態裝載器不裝載DBI模塊。 如果你想要在不支持動態鏈接(例如 SCO)的系統中使用Perl模塊,可以生成一個包括DBI和DBD::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 ~~~ 然后必須安裝新的Perl。**make 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 ~~~ 最后,應當安裝新的Perl。**make perl的**輸出指示了使用的命令。 這是MySQL參考手冊的翻譯版本,關于MySQL參考手冊,請訪問[dev.mysql.com.](http://dev.mysql.com/doc/mysql/en)。原始參考手冊為英文版,與英文版參考手冊相比,本翻譯版可能不是最新的。
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看