- 論壇徽章:
- 0
|
2.12.3. Solaris注意事項
2.12.3.1. Solaris 2.7/2.8注意事項
2.12.3.2. Solaris x86注意事項
在Solaris中,甚至在解壓縮MySQL分發(fā)版時,你也會遇到問題,因為Solaris tar不能處理長文件名。這說明解壓縮MySQL分發(fā)版時會遇見錯誤。
如果出現(xiàn)這種問題,必須使用GNU tar(gtar)來解壓縮分發(fā)版。可以從http://dev.mysql.com/downloads/os-solaris.html找到預編譯的Solaris版本。
Sun原生線程只在Solaris 2.5和更高版本中工作。對于版本2.4和更早版本,MySQL自動使用MIT-pthreads。請參見2.8.5節(jié),“MIT-pthreads注意事項”。
如果你運行configure時遇到下面的錯誤,說明編譯器安裝得有問題:
checking for restartable system calls... configure: error can notrun 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/下載。請注意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系統(tǒng),在CFLAGS和CXXFLAGS環(huán)境變量中加上-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 編譯器創(chuàng)建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創(chuàng)建64-位Solaris二進制,在CFLAGS和CXXFLAGS中增加-m64,并從configure行刪掉--enable-assembler。
在MySQL基準測試中,在UltraSPARC上使用32位模式的Forte 5.0,同使用帶-mcpu標記的gcc 3.2比較,速度提高了4%。
如果創(chuàng)建了64位的mysqld二進制,速度要比32-位二進制慢4%,但是可以處理更多的線程和內(nèi)存。
當為x86_64使用Solaris 10時,你應當安裝用forcedirectio選項保存InnoDB文件的文件系統(tǒng)。(默認情況不用該選項來安裝)。如果不這樣做,當在該平臺上使用InnoDB 儲存引擎時將會造成嚴重的性能下降。
如果fdatasync或sched_yield出現(xiàn)問題,你可以在configure行加LIBS=-lrt修復該問題。
對于早于WorkShop 5.3的編譯器,你可能需要編輯configure腳本。應將該行:
#if !defined(__STDC__) || __STDC__ != 1更該為:
#if !defined(__STDC__)如果你用-Xc 選項打開__STDC__,Sun 編譯器不能用Solaris pthreads.h 頭文件編譯。這是一個Sun 缺陷(中斷的編譯器或include文件)。
如果運行mysqld時出現(xiàn)下面的錯誤消息,原因是你企圖不啟用-mt multi-thread選項而用Sun編譯器編譯MySQL:
libc internal error: _rmutex_unlock: rmutex not held
將-mt加到CFLAGS和CXXFLAGS上并重新編譯。
如果你正使用gcc的SFW版本(在Solaris 8安裝包內(nèi)),運行configure之前你必須將/opt/sfw/lib加到環(huán)境變量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不提供靜態(tài)版本的系統(tǒng)庫(libpthreads和libdl),因此你不能用--static編譯MySQL。如果你試圖這樣做,會遇到下面的錯誤:
ld: fatal: library -ldl: not foundundefined reference to `dlopen'cannot find -lrt如果你連接你自己的MySQL客戶端程序,運行時會出現(xiàn)下面的錯誤:
ld.so.1: fatal: libmysqlclient.so.# pen failed: No such file or directory可以通過下面的方法避免該問題:
· 用-Wl,r/full/path/to/libmysqlclient.so標記而不要用-Lpath)連接客戶端。
· 將libmysqclient.so復制到/usr/lib。
· 運行客戶端程序前,將libmysqlclient.so目錄的路徑名加到LD_RUN_PATH環(huán)境變量上。
如果你未安裝zlib用 -lz連接時configure出現(xiàn)問題,你有兩個選則:
· 如果你想要使用壓縮通信協(xié)議,你需要從ftp.gnu.org獲得并安裝zlib。
· 構(gòu)建MySQL時用--with-named-z-libs=no選項運行configure。
如果你正使用gcc,向MySQL調(diào)用用戶定義函數(shù)(UDF)時出現(xiàn)問題,嘗試向UDF連接行添加-lgcc到。
如果想讓MySQL自動啟動,可以將support-files/mysql.server復制到/etc/init.d,并創(chuàng)建/etc/rc3.d/S99mysql.server符號連接。
如果有太多進程試圖快速連接mysqld,你應當能再MySQL日志只看見錯誤:
Error in accept: Protocol error可以嘗試用--back_log=50選項啟動服務(wù)器來解決該問題。(在MySQL 4以前的版本中使用-O back_log=50)。
Solaris不支持setuid() 應用程序所需的內(nèi)核文件,因此如果你使用--user選項你不能從mysqld遇到內(nèi)核文件。
2.12.3.1. Solaris 2.7/2.8注意事項
一般情況,可以在Solaris 2.7和2.8中使用Solaris 2.6二進制。大多數(shù)Solaris 2.6發(fā)布也適用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 previousdefinition如果出現(xiàn)該問題,修復的辦法是將/usr/include/widec.h復制到.../lib/gcc-lib/os/gcc-version/include,并將41行從:
#if !defined(lint) && !defined(__lint)更改為:
#if !defined(lint) && !defined(__lint) && !defined(getwc)另外,可以直接編輯/usr/include/widec.h。用任何一種方法修復后,應當刪掉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配置。
· 根據(jù)前面的討論編輯/usr/include/widec.h并重新configure。
· 刪掉config.h文件中的#define HAVE_TERM行并重新運行make。
如果鏈接客戶端程序時連接器找不到-lz,問題可能是libz.so文件安裝到了/usr/local/lib?梢杂孟旅嫒魏我环N方法解決該問題:
· 向LD_LIBRARY_PATH增加/usr/local/lib。
· 增加到libz.so from /lib的連接。
· 如果使用Solaris 8,可以安裝Solaris 8 CD分發(fā)版中的可選項zlib。
· 構(gòu)建MySQL時用--with-named-z-libs=no選項運行configure。
2.12.3.2. Solaris x86注意事項
在x86 Solaris 8上, 如果使用strip刪除調(diào)試符號,mysqld轉(zhuǎn)儲內(nèi)核。
如果正在 Solaris x86上使用gcc或egcs,并且你碰到了在裝載時的內(nèi)核轉(zhuǎn)儲問題,應該使用下列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++異常處理來避免這個問題。
如果這沒有幫助,你應該編譯一個調(diào)試版本并且用一個蹤跡文件運行它或在gdb下運行它。請參見E.1.3節(jié),“在gdb環(huán)境下調(diào)試mysqld”。 |
|