The world's most popular open source database
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
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 http://www-frec.bull.com/.
If you change the
the preceding configure line, you must also
-qstrict option. This is a limitation in
the IBM C compiler.
If you are using gcc to compile MySQL, you
must use the
flag, because the exception handling in gcc is
not thread-safe! There are also some known problems with IBM's
assembler that may cause it to generate bad code when used with
Use the following configure line with 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
-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
-fno-exceptions is required with
gcc 2.95, but because MySQL doesn't use
exceptions and the option generates faster code, you should always
use it with gcc.
If you get a problem with assembler code, try changing the
-mcpu= option to
match your CPU. Typically
powerpc may need to
be used. Alternatively, you might need to use
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
-m command. It produces a string that looks like
000514676700, with a format of
ss are always
yyyyyy is a unique system ID and
mm is the ID of the CPU Planar. A chart of these
values can be found at
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 threads on AIX 5.3, you should upgrade AIX 5.3 to technology level 7 (5300-07).
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
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
include/my_config.h and change the line that
#define HAVE_SNPRINTF 1
And finally, in
mysqld.cc, you need to add a
#ifdef _AIX41 extern "C" int initgroups(const char *,int); #endif
For 32-bit binaries, if you need to allocate a lot of memory to the mysqld process, it is not enough to just use ulimit -d unlimited. You may also have to modify mysqld_safe to add a line something like this:
You can find more information about using a lot of memory at http://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.
As of AIX 4.1, the C compiler has been unbundled from AIX as a separate product. gcc 3.3.2 can be obtained here: ftp://ftp.software.ibm.com/aix/freeSoftware/aixtoolbox/RPMS/ppc/gcc/
The steps for compiling MySQL on AIX with gcc
3.3.2 are similar to those for using gcc 2.95 (in
particular, the need to edit
my_config.h after running
configure). However, before running
configure, you should also patch the
curses.h file as follows:
/opt/freeware/lib/gcc-lib/powerpc-ibm-aix22.214.171.124/3.3.2/include/curses.h.ORIG Mon Dec 26 02:17:28 2005 --- /opt/freeware/lib/gcc-lib/powerpc-ibm-aix126.96.36.199/3.3.2/include/curses.h Mon Dec 26 02:40:13 2005 *************** *** 2023,2029 **** #endif /* _AIX32_CURSES */ ! #if defined(__USE_FIXED_PROTOTYPES__) || defined(__cplusplus) || defined (__STRICT_ANSI__) extern int delwin (WINDOW *); extern int endwin (void); extern int getcurx (WINDOW *); --- 2023,2029 ---- #endif /* _AIX32_CURSES */ ! #if 0 && (defined(__USE_FIXED_PROTOTYPES__) || defined(__cplusplus) || defined (__STRICT_ANSI__)) extern int delwin (WINDOW *); extern int endwin (void); extern int getcurx (WINDOW *);