• Aucun résultat trouvé

2.6 Notes spécifiques aux systèmes d'exploitation

2.6.3 Remarques pour Solaris

Sous Solaris, vous pouvez renontrer des problèmes avant même d'avoir désarchivé la distribution MySQL! Le programme tar

de Solaris ne peut pas manipuler de noms de fichiers longs, provoquant les messages suivants quand vous décompressez 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ésarchiver la distribution. Vous pouvez en trouver une copie précompilée pour Solaris sur http://www.mysql.com/Downloads/ .La gestion native des threads Sun fonctionne uniquement depuis Solaris 2.5. Pour les versions 2.4 et

antérieures, MySQL utilisera automatiquement les MIT−pthreads. Remarques sur MIT−pthreads . 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éfectueuse! Dans ce cas, vous devez mettre à jour votre compilateur en faveur d'une version plus récente. Vous pouvez aussi résoudre le

problème en inérant 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ée 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émentaires en ajoutant "−mcpu=v8 −Wa,−xarch=v8plusa" à CFLAGS et CXXFLAGS.Si vous utilisez le

compilateur Forte 5.0 (et supérieur) de Sun, vous pouvez lancer configure

de la façon suivante :

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

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

Vous pouvez créer 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é 4% en vitesse sur une UltraSPARC en utilisant Forte 5.0 en mode 32 bits plutôt que gcc 3.2 avec les marqueurs −mcpu.

Si vous créez un binaire 64 bits, il est de 4% plus lent que le binaire 32 bits, mais en contrepartie vous pouvez gérer davantage de treads et de mémoire.

Si vous rencontrez des problèmes avec fdatasync

ou sched_yield

, vous pouvez les résoudre en ajoutant

LIBS=−lrt

à la ligne configure.

Le paragraphe suivant ne s'applique qu'aux compilateurs plus anciens que WorkShop 5.3 : Vous pouvez avoir à 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êtes pthread.h

de Solaris. C'est un bogue de Sun (compilateur ou fichier d'inclusion défectueux). Si mysqld

génère les messages d'erreur suivants lorsque vous le lancez, cela est du au fait que vous avez compilé MySQL avec le compilateur de Sun sans activer l'option multi−threads ( −mt

):

libc internal error: _rmutex_unlock: rmutex not held

Ajoutez −mt

à CFLAGS

et CXXFLAGS

puis réessayez.

Si vous utilisez la version SFW de gcc (fournie avec Solaris 8), vous devez ajouter /opt/sfw/lib

à 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èmes. Vous devriez recompiler gcc et les GNU binutils sur la machine à partir de laquel vous les utiliserez, afin d'éviter tout souci.

Si vous obtenez l'erreur suivante lorsque vous compilez MySQL avec gcc

, cela signifie que votre gcc

n'est pas configuré 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 à faire dans ce cas est d'obtenir la version la plus récente 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ème ( 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ès rapidement à mysqld

, vous verrez cette erreur dans le journal MySQL :

Error in accept: Protocol error

Pour éviter cela, vous pouvez lancer le serveur avec l'option −−set−variable back_log=50

. Veuillez noter que

−−set−variable

est déprécié depuis MySQL 4.0, utilisez uniquement −−back_log=50

. Options en ligne de commande de mysqld

.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ème peut être évité avec l'une des méthodes suivantes : Liez le client avec le marqueur suivant (à la place de −Lpath

) : −Wl,r/full−path−to−libmysqlclient.so . • Copiez libmysqclient.so dans /usr/lib . •

Ajoutez le chemin du répertoire où libmysqlclient.so

est installé à 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é

zlib

, vous avez deux solutions :

Si vous voulez utiliser le protocole compresseé 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èmes en chargeant la fonction UDF

dans MySQL, essayez d'ajouter −lgcc

à 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éer 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 à 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ées de Solaris 2.6 s'appliquent aussi à Solaris 2.7 et 2.8.

Notez que la version 3.23.4 de MySQL et plus doivent être capables de détecter automatiquement les nouvelles versions de Solaris et d'activer les parades pour résoudre les problèmes suivants !

Solaris 2.7 / 2.8 ont quelques bogues dans les fichiers inclus. Vous verrez peut−être 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ésoudre ce problème :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 éditer directement le fichier /usr/include/widec.h

. De toutes façons, après avoir apporté la correction, vous devez effacer config.cache

et exécuter configure

à nouveau !Si vous obtenez des erreurs comme celles qui suivent quand vous exécutez make

, c'est parce que configure

n'a pas détecté le fichier curses.h

(probablement à 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é plus haut et ré−exécutez configure.

Effacez la ligne #define HAVE_TERM

di fichier config.h

et exécutez make

à 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ème est probablement que votre fichier libz.so

est installé dans /usr/local/lib

. Vous pouvez corriger ceci en utilisant l'une des méthodes suivantes : Ajoutez /usr/local/lib

à LD_LIBRARY_PATH

.

Ajoutez un lien vers libz.so

à partir de /lib

.

Si vous utilisez Solaris 8, vous pouvez installer la zlib optionnelle à 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écutez 'strip'. Si vous utilisez gcc

ou egcs

sous Solaris x86 et que vous rencontrez des problèmes avec des coredumps, lorsqu'il y a de la charge, il est recommandé 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 éviter les problèmes avec la librairie libstdc++

et avec les exceptions C++.

Si cela ne vous aide pas, il est recommandé de compiler une version de débogage, et de l'exécuter avec un fichier de trace sous gdb

. Déboguer mysqld sous gdb .