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編譯器的限制。
如果你正在使用gcc或egcs編譯MySQL,必須使用-fno-exceptions標志,因為gcc/egcs的異常處理不是對線程安全的!(已經用egcs1.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可以找到這些值的圖表。
該圖表可以給出你可以使用的機器類型和機器型號,確定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 。