Automatic detection of xlC
is missing from
Autoconf, so a number of variables need to be set before
running configure. The following example
uses the IBM compiler:
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
The preceding options are used to compile the MySQL
distribution that can be found at
https://www-frec.bull.com/.
If you change the -O3
to -O2
in the preceding configure line, you must
also remove the -qstrict
option. This is a
limitation in the IBM C compiler.
If you are using gcc or
egcs to compile MySQL, you
must use the
-fno-exceptions
flag, because the exception
handling in gcc/egcs is
not thread-safe! (This is tested with egcs
1.1.) There are also some known problems with IBM's assembler
that may cause it to generate bad code when used with
gcc.
We recommend the following configure line
with egcs and gcc 2.95
on AIX:
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
The -Wa,-many
option is necessary for the
compile to be successful. IBM is aware of this problem but is
in no hurry to fix it because of the workaround that is
available. We don't know if the
-fno-exceptions
is required with
gcc 2.95, but because MySQL doesn't use
exceptions and the option generates faster code, we recommend
that you should always use it with egcs /
gcc.
If you get a problem with assembler code, try changing the
-mcpu=xxx
option
to match your CPU. Typically power2
,
power
, or powerpc
may
need to be used. Alternatively, you might need to use
604
or 604e
. We are not
positive but suspect that power
would
likely be safe most of the time, even on a power2 machine.
If you don't know what your CPU is, execute a uname
-m
command. It produces a string that looks like
000514676700
, with a format of
xxyyyyyymmss
where xx
and ss
are always 00
,
yyyyyy
is a unique system ID and
mm
is the ID of the CPU Planar. A chart of
these values can be found at
https://www16.boulder.ibm.com/pseries/en_US/cmds/aixcmds5/uname.htm.
This gives you a machine type and a machine model you can use
to determine what type of CPU you have.
If you have problems with signals (MySQL dies unexpectedly
under high load), you may have found an OS bug with threads
and signals. In this case, you can tell MySQL not to use
signals by configuring as follows:
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
This doesn't affect the performance of MySQL, but has the side
effect that you can't kill clients that are
“sleeping” on a connection with
mysqladmin kill or mysqladmin
shutdown. Instead, the client dies when it issues
its next command.
On some versions of AIX, linking with
libbind.a
makes
getservbyname()
dump core. This is an AIX
bug and should be reported to IBM.
For AIX 4.2.1 and gcc, you have to make the
following changes.
After configuring, edit config.h
and
include/my_config.h
and change the line
that says this:
#define HAVE_SNPRINTF 1
to this:
#undef HAVE_SNPRINTF
And finally, in mysqld.cc
, you need to
add a prototype for initgroups()
.
#ifdef _AIX41
extern "C" int initgroups(const char *,int);
#endif
If you need to allocate a lot of memory to the
mysqld process, it's not enough to just use
ulimit -d unlimited. You may also have to
modify mysqld_safe to add a line something
like this:
export LDR_CNTRL='MAXDATA=0x80000000'
You can find more information about using a lot of memory at
https://publib16.boulder.ibm.com/pseries/en_US/aixprggd/genprogc/lrg_prg_support.htm.
Users of AIX 4.3 should use gmake instead
of the make utility included with AIX.