La détection automatique de xlC
est
absente de Autoconf, ce qui fait qu'un commande
configure
comme celle qui suit est requise
lors de la compilation de MySQL (Cet exemple utilise le
compilateur 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 \ --sysconfdir=/etc/mysql \ --sbindir='/usr/local/bin' \ --libexecdir='/usr/local/bin' \ --enable-thread-safe-client \ --enable-large-files
Ce sont les options utilisées pour compiler la distribution de MySQL qui peut être trouvée sur http://www-frec.bull.com/.
Si vous changez le -O3
en
-O2
dans la ligne précédente, vous devez
aussi enlever l'option -qstrict
(c'est une
limitation du compilateur IBM C).
Si vous utilisez gcc
ou
egcs
pour compiler MySQL, vous
devez utiliser l'option
-fno-exceptions
, vu que la gestion des
exceptions de gcc
/egcs
n'est pas sûre pour les threads ! (Cela est testé avec
egcs
1.1.) Il y a aussi quelques problèmes
connus avec l'assembleur d'IBM, qui peuvent lui faire
générer du mauvais code lors de son utilisation avec gcc.
Nous recommandons la ligne de configure
suivante avec egcs
et gcc
2.95
sur 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
Le -Wa,-many
est nécessaire pour que la
compilation se passe sans problèmes. IBM est au courant de ce
problème mais n'est pas pressé de le corriger à cause de
l'existence du palliatif. Nous ne savons pas si
-fno-exceptions
est requise avec
gcc 2.95
, mais comme MySQL n'utilise pas
les exeptions et que l'option en question génère un code
plus rapide, nous vous recommandons de toujours utiliser cette
option avec egcs / gcc
.
Si vous obtenez un problème avec le code de l'assembleur essayez en changeant l'option -mcpu=xxx pour l'adapter à votre processeur. Le plus souvent, on a besoin de power2, power, ou powerpc, et sinon 604 ou 604e. Je ne suis pas positif mais je pense que l'utilisation de "power" sera sûre la plupart du temps, même sur une machine power2.
Si vous ne savez pas quel est votre processeur, exécutez "uname -m", cela vous renverra une chaîne comme "000514676700", avec un format xxyyyyyymmss où xx et ss sont toujours des zéros, yyyyyy est un identifiant unique du système et mm est l'identifiant du CPU Planar. Une liste de ces valeurs peut être trouvée sur http://publib.boulder.ibm.com/doc_link/en_US/a_doc_lib/cmds/aixcmds5/uname.htm. Cela vous donnera un type et un modèle de machine que vous pouvez utiliser pour déterminer quel type de processeur vous avez.
Si vous avez des problèmes avec les signaux (MySQL se termine de manière imprévue lors des montées en charge) vous avez peut-être trouvé un bogue du système avec les threads et les signaux. Dans ce cas, vous pouvez demander à MySQL de ne pas utiliser les signaux en configuration avec :
shell>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
Cela n'affecte pas les performances de MySQL, mais comporte un
effet secondaire faisant en sorte que vous ne pourrez tuer les
clients en état ``sleeping'' sur une connexion avec
mysqladmin kill
ou mysqladmin
shutdown
. A la place, le client se terminera
lorsqu'il émmetra sa prochaine commande.
Sur quelques versions de AIX, lier avec
libbind.a
fait vider son noyau à
getservbyname
(core dump). Il s'agit d'un
bogue AIX et doit être remonté à IBM.
Pour AIX 4.2.1 et gcc vous devez apporter les modifications suivantes :
Après la configuration, éditez config.h
et include/my_config.h
et changez la
ligne qui comporte
#define HAVE_SNPRINTF 1
en
#undef HAVE_SNPRINTF
Et finalement, dans mysqld.cc
vous devez
ajouter un prototype pour initgoups.
#ifdef _AIX41 extern "C" int initgroups(const char *,int); #endif
Si vous avez besoin d'allouer beaucoup de mémoire au
processus mysqld, il ne suffit pas de configurer 'ulimit -d
unlimited'. Vous aurez aussi à configurer dans
mysqld_safe
quelque chose comme :
export LDR_CNTRL='MAXDATA=0x80000000'
Vous trouverez plus d'informations sur l'utilisation d'une grande quantité de mémoire sur : http://publib16.boulder.ibm.com/pseries/en_US/aixprggd/genprogc/lrg_prg_support.htm.
This is a translation of the MySQL Reference Manual that can be found at dev.mysql.com. The original Reference Manual is in English, and this translation is not necessarily as up to date as the English version.