• Aucun résultat trouvé

Remarques pour Solaris

Dans le document Manuel MySQL pdf enjeux et pratiques (Page 154-158)

2.6 Notes sp´ecifiques aux syst`emes d’exploitation

2.6.3 Remarques pour Solaris

Sous Solaris, vous pouvez renontrer des probl`emes avant mˆeme d’avoir d´esarchiv´e la distri- bution MySQL! Le programme tar de Solaris ne peut pas manipuler de noms de fichiers longs, provoquant les messages suivants quand vous d´ecompressez MySQL :

x mysql-3.22.12-beta/bench/Results/ATIS-mysql_odbc-NT_4.0-cmp-db2,\ informix,ms-sql,mysql,oracle,solid,sybase, 0 bytes, 0 tape blocks tar: directory checksum error

Dans ce cas, vous devez utiliser GNU tar (gtar) pour d´esarchiver la dis- tribution. Vous pouvez en trouver une copie pr´ecompil´ee pour Solaris sur http://www.mysql.com/downloads/os-solaris.html.

La gestion native des threads Sun fonctionne uniquement depuis Solaris 2.5. Pour les versions 2.4 et ant´erieures, MySQL utilisera automatiquement les MIT-pthreads. Voir Sec- tion 2.3.6 [MIT-pthreads], page 95.

Vous pouvez rencontrer les erreurs suivantes lors du configure:

checking for restartable system calls... configure: error can not run test programs while cross compiling

Cela signifie que l’installation de votre compilateur est d´efectueuse! Dans ce cas, vous devez mettre `a jour votre compilateur en faveur d’une version plus r´ecente. Vous pouvez aussi r´esoudre le probl`eme en in´erant la ligne suivante dans le fichier ‘config.cache’ :

ac_cv_sys_restartable_syscalls=${ac_cv_sys_restartable_syscalls=’no’} Si vous utilisez Solaris sur une architecture SPARC, nous recommandons gcc 2.95.2 comme compilateur. Vous pouvez le trouver sur http://gcc.gnu.org/. Notez que egcs 1.1.1 et gcc 2.8.1 ne fonctionnent pas correctement sur SPARC!

La ligne configure recommand´ee dans le cas de l’utilisation de gcc 2.95.2 est: CC=gcc CFLAGS="-O3" \

CXX=gcc CXXFLAGS="-O3 -felide-constructors -fno-exceptions -fno-rtti" \ ./configure --prefix=/usr/local/mysql --with-low-memory --enable-assembler Si vous avez une machine UltraSPARC, vous pouvez gagner 4% de performances suppl´ementaires en ajoutant "-mcpu=v8 -Wa,-xarch=v8plusa" `a CFLAGS et CXXFLAGS.

Si vous utilisez le compilateur Forte 5.0 (et sup´erieur) de Sun, vous pouvez lancer configure de la fa¸con suivante :

CC=cc CFLAGS="-Xa -fast -native -xstrconst -mt" \ CXX=CC CXXFLAGS="-noex -mt" \

./configure --prefix=/usr/local/mysql --enable-assembler Vous pouvez cr´eer un binaire 64 bits avec :

CC=cc CFLAGS="-Xa -fast -native -xstrconst -mt -xarch=v9" \ CXX=CC CXXFLAGS="-noex -mt -xarch=v9" \

./configure --prefix=/usr/local/mysql --enable-assembler

Lors de bancs de tests MySQL, nous avons gagn´e 4% en vitesse sur une UltraSPARC en utilisant Forte 5.0 en mode 32 bits plutˆot que gcc 3.2 avec les marqueurs -mcpu.

Si vous cr´eez un binaire 64 bits, il est de 4% plus lent que le binaire 32 bits, mais en contrepartie vous pouvez g´erer davantage de treads et de m´emoire.

Si vous rencontrez des probl`emes avec fdatasync ou sched_yield, vous pouvez les r´esoudre en ajoutant LIBS=-lrt `a la ligne configure.

Le paragraphe suivant ne s’applique qu’aux compilateurs plus anciens que WorkShop 5.3 : Vous pouvez avoir `a modifier le script configure et changer la ligne :

#if !defined(__STDC__) || __STDC__ != 1 en :

#if !defined(__STDC__)

Si vous activez __STDC__ avec l’option -Xc, le compilateur Sun ne peut pas compiler avec le fichier d’entˆetes ‘pthread.h’ de Solaris. C’est un bogue de Sun (compilateur ou fichier d’inclusion d´efectueux).

Si mysqld g´en`ere les messages d’erreur suivants lorsque vous le lancez, cela est du au fait que vous avez compil´e MySQL avec le compilateur de Sun sans activer l’option multi-threads (-mt):

libc internal error: _rmutex_unlock: rmutex not held Ajoutez -mt `a CFLAGS et CXXFLAGS puis r´eessayez.

Si vous utilisez la version SFW de gcc (fournie avec Solaris 8), vous devez ajouter ‘/opt/sfw/lib’ `a la variable d’environnement LD_LIBRARY_PATH avant de lancer le configure.

Si vous utilisez le gcc disponible sur sunfreeware.com, vous pouvez rencontrer de nombreux probl`emes. Vous devriez recompiler gcc et les GNU binutils sur la machine `a partir de laquel vous les utiliserez, afin d’´eviter tout souci.

Si vous obtenez l’erreur suivante lorsque vous compilez MySQL avec gcc, cela signifie que votre gcc n’est pas configur´e pour votre version de Solaris :

shell> gcc -O3 -g -O2 -DDBUG_OFF -o thr_alarm ... ./thr_alarm.c: In function ‘signal_hand’:

./thr_alarm.c:556: too many arguments to function ‘sigwait’

La meilleure chose `a faire dans ce cas est d’obtenir la version la plus r´ecente de gcc et de compiler avec votre gcc actuel! Au moins pour Solaris 2.5, la plupart des versions binaires de gcc ont d’anciens fichiers d’inclusion inutilisables qui planteront les programmes qui utilisent les threads (ainsi probablement d’autres programmes)!

Solaris ne fournit pas de versions statiques de toutes les librairies syst`eme (libpthreads et libdl), vous ne pouvez donc pas compiler MySQL avec --static. Si vous tentez de le faire, vous obtiendrez l’erreur :

ld: fatal: library -ldl: not found ou

undefined reference to ‘dlopen’ ou

cannot find -lrt

Si de nombreux processus essaient de se connecter tr`es rapidement `a mysqld, vous verrez cette erreur dans le journal MySQL :

Error in accept: Protocol error

Pour ´eviter cela, vous pouvez lancer le serveur avec l’option --set-variable back_log=50. Veuillez noter que --set-variable est d´epr´eci´e depuis MySQL 4.0, utilisez uniquement - -back_log=50. Voir Section 4.1.1 [Command-line options], page 192.

Si vous liez votre propre client MySQL, vous pouvez avoir l’erreur suivante quand vous le lancez :

ld.so.1: ./my: fatal: libmysqlclient.so.#: open failed: No such file or directory

Le probl`eme peut ˆetre ´evit´e avec l’une des m´ethodes suivantes :

• Liez le client avec le marqueur suivant (`a la place de -Lpath) : -Wl,r/full-path-to-

libmysqlclient.so.

• Copiez ‘libmysqclient.so’ dans ‘/usr/lib’.

• Ajoutez le chemin du r´epertoire o`u ‘libmysqlclient.so’ est install´e `a la variable d’environnement LD_RUN_PATH avant de lancer votre client.

Si vous avez des soucis avec configure qui essaie de lier avec -lz et que vous n’avez pas install´e zlib, vous avez deux solutions :

• Si vous voulez utiliser le protocole compresse´e de communication, vous devrez vous

procurer et installer zlib sur ftp.gnu.org.

• Configurez avec --with-named-z-libs=no.

Si vous utilisez gcc et rencontrez des probl`emes en chargeant la fonction UDF dans MySQL, essayez d’ajouter -lgcc `a la ligne de liaison de la fonction UDF.

Si vous voulez que MySQL se lance automatiquement, vous pouvez copier ‘support-files/mysql.server’ dans ‘/etc/init.d’ et cr´eer un lien symbolique pointant dessus et s’appelant ‘/etc/rc3.d/S99mysql.server’.

Comme Solaris ne supporte pas les fichiers core pour les applications setuid(), vous ne pouvez pas obtenir un fichier core de mysqld si vous utilisez l’option --user.

2.6.3.1 Notes relatives `a Solaris 2.7/2.8

Vous pouvez normalement utiliser les binaires Solaris 2.6 sur Solaris 2.7 et 2.8. La plupart des fonctionnalit´ees de Solaris 2.6 s’appliquent aussi `a Solaris 2.7 et 2.8.

Notez que la version 3.23.4 de MySQL et plus doivent ˆetre capables de d´etecter automatique- ment les nouvelles versions de Solaris et d’activer les parades pour r´esoudre les probl`emes suivants !

Solaris 2.7 / 2.8 ont quelques bogues dans les fichiers inclus. Vous verrez peut-ˆetre l’erreur suivante en utilisant gcc :

/usr/include/widec.h:42: warning: ‘getwc’ redefined

/usr/include/wchar.h:326: warning: this is the location of the previous definition

Si cela arrive, vous pouvez faire ce qui suit pour r´esoudre ce probl`eme :

Copiez /usr/include/widec.h vers .../lib/gcc-lib/os/gcc-version/include et changez la ligne 41 de :

#if !defined(lint) && !defined(__lint) en

#if !defined(lint) && !defined(__lint) && !defined(getwc)

Alternativement, vous pouvez ´editer directement le fichier ‘/usr/include/widec.h’. De toutes fa¸cons, apr`es avoir apport´e la correction, vous devez effacer ‘config.cache’ et ex´ecuter configure `a nouveau !

Si vous obtenez des erreurs comme celles qui suivent quand vous ex´ecutez make, c’est parce que configure n’a pas d´etect´e le fichier ‘curses.h’ (probablement `a cause de l’erreur dans ‘/usr/include/widec.h’) :

In file included from mysql.cc:50:

/usr/include/term.h:1060: syntax error before ‘,’ /usr/include/term.h:1081: syntax error before ‘;’ La solution est de faire l’une des choses qui suit :

• Configurez avec CFLAGS=-DHAVE_CURSES_H CXXFLAGS=-DHAVE_CURSES_H ./configure.

• Editez ‘/usr/include/widec.h’ comme indiqu´e plus haut et r´e-ex´ecutez configure. • Effacez la ligne #define HAVE_TERM di fichier ‘config.h’ et ex´ecutez make `a nouveau.

Si vous obtenez une erreur disant que votre programme de liaison ne peut trouver -lz lors de la liaison du programme de votre client, le probl`eme est probablement que votre fichier ‘libz.so’ est install´e dans ‘/usr/local/lib’. Vous pouvez corriger ceci en utilisant l’une des m´ethodes suivantes :

• Ajoutez ‘/usr/local/lib’ `a LD_LIBRARY_PATH. • Ajoutez un lien vers ‘libz.so’ `a partir de ‘/lib’.

• Si vous utilisez Solaris 8, vous pouvez installer la zlib optionelle `a partir de votre CD

Solaris 8.

• Configurez MySQL avec l’option --with-named-z-libs=no.

2.6.3.2 Remarques pour Solaris x86

Sous Solaris 2.8 sur x86, mysqld va crasher (core dump) si vous l’ex´ecutez ’strip’.

Si vous utilisez gcc ou egcs sous Solaris x86 et que vous rencontrez des probl`emes avec des coredumps, lorsqu’il y a de la charge, il est recommand´e d’utiliser la commande de configure suivante :

CC=gcc CFLAGS="-O3 -fomit-frame-pointer -DHAVE_CURSES_H" \ CXX=gcc \

CXXFLAGS="-O3 -fomit-frame-pointer -felide-constructors -fno-exceptions \ -fno-rtti -DHAVE_CURSES_H" \

./configure --prefix=/usr/local/mysql

Cela va ´eviter les probl`emes avec la librairie libstdc++ et avec les exceptions C++.

Si cela ne vous aide pas, il est recommand´e de compiler une version de d´ebogage, et de l’ex´ecuter avec un fichier de trace sous gdb. Voir Section E.1.3 [Using gdb on mysqld], page 816.

Dans le document Manuel MySQL pdf enjeux et pratiques (Page 154-158)