top
Loading...
2.12.5.3.IBM-AIX注意事項
2.12.5.3. IBM-AIX注意事項

Autoconf中沒有了xlC自動檢測,因此運行configure,需要設置許多變量。以下例子使用IBM編譯器:

export CC="xlc_r -ma -O3 -qstrict -qoptimize=3 -qmaxmem=8192 "
export CXX="xlC_r -ma -O3 -qstrict -qoptimize=3 -qmaxmem=8192"
export CFLAGS="-I /usr/local/include"
export LDFLAGS="-L /usr/local/lib"
export CPPFLAGS=$CFLAGS
export CXXFLAGS=$CFLAGS
 
./configure --prefix=/usr/local 
                --localstatedir=/var/mysql 
                --sbindir='/usr/local/bin' 
                --libexecdir='/usr/local/bin' 
                --enable-thread-safe-client 
                --enable-large-files
 

可以從http://www-frec.bull.com/找到上述編譯MySQL分發版的選項。

如果你將前面的configure行中的-O3改為-O2,必須刪掉-qstrict選項。這是對IBM C編譯器的限制。

如果你正在使用gccegcs編譯MySQL必須使用-fno-exceptions標志,因為gcc/egcs的異常處理不是對線程安全的!(已經用egcs1.1測試過)。IBM匯編程序也有一些已知問題,當使用gcc時可以生成壞的代碼。

AIX 上使用egcsgcc 2.95,我們推薦下列configure行:

CC="gcc -pipe -mcpu=power -Wa,-many" 
CXX="gcc -pipe -mcpu=power -Wa,-many" 
CXXFLAGS="-felide-constructors -fno-exceptions -fno-rtti" 
./configure --prefix=/usr/local/mysql --with-low-memory

為了成功編譯,需要使用-Wa,-many選項。IBM知道該問題,但是由于工作區的原因,不急于修復它。我們不知道gcc 2.95是否需要-fno-exceptions選項,但是因為MySQL不使用例外,并且該選項可以產生快速的代碼,我們建議使用egcs/gcc時使用該選項。

如果匯編碼有問題,試試更改-mcpu=xxx選項以匹配你的CPU。一般情況可能需要使用power2powerpowerpc。另外,你可能需要使用604604e。我們不能絕對肯定但懷疑power一般應安全,即使在power2機器上也安全。

如果你不知道你的CPU是什么樣的,可以執行uname -m命令。可以產生類似000514676700的字符串,格式為xxyyyyyymmss,其中xxss總是00,yyyyyy是唯一的系統IDmmCPU PlanarID。從http://www16.boulder.ibm.com/pseries/en_US/cmds/aixcmds5/uname.htm可以找到這些值的圖表。

該圖表可以給出你可以使用的機器類型和機器型號,確定CPU的類型。

如果遇到信號問題(MySQL在高負載下出人意料地死掉),你可能已經發現了與線程和信號有關的一個OS 缺陷。在這種情況下,你可以用如下配置告訴MySQL不使用信號:

CFLAGS=-DDONT_USE_THR_ALARM CXX=gcc 
CXXFLAGS="-felide-constructors -fno-exceptions -fno-rtti 
-DDONT_USE_THR_ALARM" 
./configure --prefix=/usr/local/mysql --with-debug 
    --with-low-memory

這不影響MySQL的性能,但是有副作用,就是不能用mysqladmin killmysqladmin shutdown殺死在一個連接上“睡眠”的客戶端。相反,當客戶端發出下一個命令時,它將死掉。

AIX的一些版本上用libbind.a鏈接使得getservbyname()內核轉儲,這是AIX的一個缺陷并且應該報告IBM

對于AIX 4.2.1gcc,進行下面的更改。

配置完后,編輯config.hinclude/my_config.h,將下面的行:

#define HAVE_SNPRINTF 1

更改為:

#undef HAVE_SNPRINTF

最后需要在mysqld.cc中為initgroups ()添加:

#ifdef _AIX41
extern "C" int initgroups(const char *,int);
#endif

如果你需要為mysqld進程分配大量內存,只使用ulimit -d unlimited是不夠的。還可以需要修改mysqld_safe,增加下面的行:

export LDR_CNTRL='MAXDATA=0x80000000'

關于使用大量內存的信息請查閱http://publib16.boulder.ibm.com/pseries/en_US/aixprggd/genprogc/lrg_prg_support.htm

作者:mysql.com
來源:http://dev.mysql.com/doc/refman/5.1/zh/installing.html
北斗有巢氏 有巢氏北斗