top
Loading...
2.12.1.3.Linux源碼分發版說明
2.12.1.3. Linux源碼分發版說明
下面關于glibc的注意事項只適用你自己構建MySQL時。如果在x86機器上運行Linux,在大多數情況下最好使用我們的二進制。我們將二進制連接到了我們能找到的打了最好補丁的glibc版本,并使用了最優的編譯器選項,盡力使它適合高負荷服務器。對于典型用戶,即使對于超過2GB限制的大量并行連接或表設置,在大多數情況下,我們的二進制仍然是最佳選擇。閱讀下面的內容后,如果你不清楚怎樣做,先試用我們的二進制看它是否滿足你的需求。如果你發現它不夠完善,那么你可以嘗試你自己的構建。在這種情況下,我們很希望能看到相關注釋,以便我們下次可以構建更好的二進制。

MySQLLinux上使用 LinuxThreads 。如果你正在使用一個沒有glibc2的老的Linux版本,你必須在嘗試編譯MySQL前安裝LinuxThreads。你可以從 http://dev.mysql.com/downloads/os-linux.html獲得LinuxThreads

注意:當你執行INSERT DELAYED時,所用的包括2.1.1及以前的glibc版本在pthread_互斥_timedwait()處理上有一個致命錯誤,如果你正在使用INSERT DELAYED,我們建議先升級glibc

請注意Linux 內核和LinuxThreads庫默認情況下最多可以處理1,024個線程。如果你計劃使用超過1,000個并行連接,需要對LinuxThreads進行一些更改,如下所示:

·         sysdeps/unix/sysv/linux/bits/local_lim.h中的PTHREAD_THREADS_MAX 增加到4096,將LinuxThreads/internals.h 中的STACK_SIZE減少到256KB。路徑相對于glibc的根目錄。(請注意如果STACK_SIZE為默認值2MBMySQL600-1000個連接時不穩定)

·         重新編譯LinuxThreads,生成新的libpthreads.a庫,并重新連接MySQL

可以從http://www.volano.com/linuxnotes.html 查閱關于LinuxThreads線程限制的詳細信息。

還有一個問題會嚴重影響MySQL的性能,特別是在SMP系統中。在glibc 2.1LinuxThreads中,對于擁有很多只是短時間內占有互斥體的線程的程序,不能很好地執行互斥。結果出現荒謬的現象:在許多情況下,如果你使用未修改的LinuxThreads連接MySQL,從SMP中去掉卸載處理器實際上會提高MySQL的性能。我們提供了一個glibc 2.1.3的補丁來糾正該行為(http://www.mysql.com/Downloads/Linux/linuxthreads-2.1-patch )

glibc 2.2.2,MySQL使用修改后的互斥,這樣甚至比打了補丁的glibc 2.1.3還要好得多。但是,需要注意的是在某些條件下,當前glibc 2.2.2中的互斥代碼會高旋,影響了MySQL的性能。通過優化mysqld進程到最高優先級,可以降低在這種情況下出現這種問題的可能性。我們還可以通過補丁來糾正高旋問題,可以從http://www.mysql.com/Downloads/Linux/linuxthreads-2.2.2.patch下載。它集成高旋的糾正、線程最大數目和堆棧空間于一體。你需要用補丁patch -p0 </tmp/linuxthreads-2.2.2.patchLinuxThreads目錄下使用。我們 希望在將來的glibc 2.2發布中能以某種形式將它包括進來。在任何情況下,如果你連接glibc 2.2.2,仍然需要糾正STACK_SIZE PTHREAD_THREADS_MAX我們希望在將來能將默認值糾正到某種程度上可以接受的值,適合高負荷MySQL設置,因此用來產生你自己的構建的  命令可以簡化到到./configure; make; make install

我們建議你使用這些補丁來構建專用的libpthreads.a靜態版本,并只使用它同MySQL實現靜態鏈接。我們知道這些補丁對于MySQL很安全 并大大改善了它的性能,但是我們還不能斷言它在其它應用程序上的效果如何。如果你需要將其它使用LinuxThreads的應用程序同打了補丁的靜態版本的庫連接,或構建一個打了補丁的共享版本,并將它安裝到系統中,你將自己承擔風險。

如果你在安裝MySQL的過程中遇到任何奇怪的問題,或一些常用實用工具被懸掛起來,很可能是庫或編譯器相關問題。在這種情況下,使用我們的二進制來解決。

如果你連接你自己的MySQL客戶端程序,運行時你會看見下面的錯誤:

ld.so.1: fatal: libmysqlclient.so.#:
open failed: No such file or directory

使用下面的方法可以避免該問題:

·         -Wl,r/full/path/to/libmysqlclient.so標記連接客戶端,不要使用-Lpath)

·         libmysqclient.so復制到/usr/lib

·         運行客戶端程序前,將libmysqlclient.so所在目錄的路徑名增加到LD_RUN_PATH環境變量。

如果使用Fujitsu編譯器 (fcc/FCC),編譯MySQ時可能會出現一些問題,因為Linux頭文件主要面向gcc。以下的configure行應當結合fcc/FCC使用:

CC=fcc CFLAGS="-O -K fast -K lib -K omitfp -Kpreex -D_GNU_SOURCE 
    -DCONST=const -DNO_STRTOLL_PROTO" 
CXX=FCC CXXFLAGS="-O -K fast -K lib 
    -K omitfp -K preex --no_exceptions --no_rtti -D_GNU_SOURCE 
    -DCONST=const -Dalloca=__builtin_alloca -DNO_STRTOLL_PROTO 
    '-D_EXTERN_INLINE=static __inline'" 
./configure 
    --prefix=/usr/local/mysql --enable-assembler 
    --with-mysqld-ldflags=-all-static --disable-shared 
    --with-low-memory
作者:mysql.com
來源:http://dev.mysql.com/doc/refman/5.1/zh/installing.html
北斗有巢氏 有巢氏北斗