Installer MySQL 5.0.19 sous Solaris 10
Accueil  Informatique  Tutoriels et marches à suivre  Installer MySQL 5.0.19 sous Solaris 10
Dans cette section:
Prérequis
Les variables d'environnement
La compilation
Configurer MySQL
Qu'est-ce que le FMRI sous Solaris 10?
MySQL pris en charge par le FMRI
Problème de compilation sous Solaris 10
Sujets connexes:
Installer MySQL 5.0.19 sous Solaris 10
Installer PHP 5.1.2 sous Solaris 10
Les commandes SMTP
Trucs et astuces variés
Les incontournables:
Le Nikon D700
Le Nikon D3S
Le Nikon D300
Jouer avec les courbes du Nikon D70/D70s
Galeries d'images
Cette section vous donne la marche à suivre pour compiler et installer le serveur de base de données MySQL 5.0.19 à partir du code source, et de profiter des nouveautés de Solaris 10 pour inclure le démarrage, la fermeture et le monitoring de MySQL dans le "FMRI" (Fault Management Resource Identifier), pour en augmenter la fiabilité.

Prérequis haut
 

Évidemment, ça vous prend au moins une machine avec Solaris 10 d'installé et de fonctionnel, sur laquelle vous aurez les droits d'administrateur (donc, l'usager "root"). Je prends également pour acquis que vous aurez une version complète de Solaris 10 (donc, avec le cluster "Entire System" ou "Entire System + OEM Support"), parce que dans le cas contraire, il vous manquera des outils importants, tels que le compilateur GCC, etc.

Ça vous prend également les sources pour MySQL (dans ce cas-ci, la version 5.0.19, mais une version 5.0.XX plus récente s'installera vraisemblablement de manière identique), que vous pouvez optenir en la téléchargeant à l'adresse suivante:

http://dev.mysql.com/downloads/mysql/5.0.html

Également, par défaut, l'installation complète de Solaris 10 inclut une version déjà installée de MySQL.  Personnellement, je la désinstalle et préfère l'installer à mon goût, à partir des sources (le pourquoi de ce tutoriel, évidemment!).  Pour désinstaller la version MySQL "bundlée" avec Solaris 10, exécutez la commande suivante: 

 
# for p in `pkginfo | grep -i mysql | awk '{print $2}'`; do pkgrm $p; done
 
Une foit MySQL désinstallé, assurez-vous que votre système possède l'usager "mysql":
 
# finger mysql
Login name: mysql
Directory: /var/empty                   Shell: /bin/sh
Never logged in.
No unread mail
No Plan.
 
Si ce n'est pas le cas, créez le avec la commande suivante:
 
# groupadd mysql
# useradd -g mysql -s /bin/false -d /var/empty mysql
 
Les variables d'environnement haut
 
Avant de procéder à la compilation, assurez-vous d'avoir les bonnes variables d'environnement, surtout au niveau des librairies (via la variable "LD_LIBRARY_PATH"):
 
# echo $LD_LIBRARY_PATH
/usr/local/lib:/usr/lib:/usr/lib/sparcv9:/usr/sfw/lib:
/usr/sfw/lib/gcc
 

Si, contrairement au résultat ci-haut, vous n'obtenez pas au moins les chemins d'accès (ou "paths") affichés, à savoir:

  • /usr/local/lib
  • /usr/lib
  • /usr/lib/sparcv9
  • /usr/sfw/lib
  • /usr/sfw/lib/gcc
ajoutez alors celles-ci avec la commande suivante:
 
# LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/lib:\
/usr/lib:\
/usr/lib/sparcv9:\
/usr/sfw/lib:\
/usr/sfw/lib/gcc
# export LD_LIBRARY_PATH
 
Note: j'ai réalisé le tout sur une machine Sun Enterprise 250: il s'agit donc d'une plateforme SPARC 64-bit. Si vous désirez compiler le tout sur une plateforme Intel/AMD, il faudra vraisemblablement mettre d'autres variables que celles ci-dessus, notamment ne pas mettre celles contenant "sparcv9"!
 
La dernière étape pour les variables d'environnement est d'ajouter les bons "flags" pour le compilateur GCC, de manière suivante:
 
# CFLAGS="-O3"
# CXX=gcc
# CXXFLAGS="-O3 -felide-constructors -fno-exceptions -fno-rtti"
# export CFLAGS CXX CXXFLAGS
 
Et vous voilà prêt pour la compilation!!  :)
 
La compilation haut
 

La compilation de MySQL est très très standard au modèle GNU.  La seule chose, selon votre cas et vos besoins spécifiques, je recommande de bien lire le fichier "README" avant de procéder, parce qu'étant donné le caractère assez pointu de l'application (dans ce cas-ci, une base de données), si vous projetez rendre celle-ci disponible à un usage important, certains paramètres à passer à la commande "./configure" pourront se révéler cruciaux pour vous.

Pour ma part, j'ai choisi d'installer les binaires et exécutables de MySQL sous "/usr/local/mysql", mais j'ai décidé de loger les bases de données et autres fichiers d'utilisation (donc le "data") sous "/export/data1", et j'ai choisi activer le mode "assembleur", ce qui rend les binaires compilés plus rapides à l'exécution pour le type de système que j'utilise.   Ce ne serait peut-être pas le cas pour vous, et c'est pourquoi je vous recommande de lire les fichiers de documentation au moins pour la section des options du "./configure".

Donc, ma commande "./configure" a donc cet aspect-ci: 

 
# ./configure --prefix=/usr/local/mysql \
--localstatedir=/export/data1 \
--enable-assembler
 

La commande "./configure", sur mon Sun Enterprise 250 qui a 1 Go. de RAM et 2 processeurs UltraSPARC-II à 300 MHz, a pris en tout 8 minutes pour s'exécuter.

L'étape suivante est de faire "make": 

 
# make
 
qui a pris, quant à elle, environ 1 heure 25 minutes à s'exécuter sans erreur, suivi du traditionnel "make install":
 
# make install
 
qui a pris seulement environ 5 minutes à compléter.  C'est ainsi que, si toutes ces étapes, dans votre cas, se sont également déroulées sans embûches, vous avez maintenant compilé avec succès votre serveur MySQL!  Il faut maintenant le configurer...
 
Configurer MySQL haut
 

L'étape de la configuration n'est pas nécessairement longue, mais elle comporte de nombreuses étapes.  Celles-ci sont généralement bien documentées dans les fichiers d'installations de MySQL (les "README", etc., et sur le site web de MySQL, dans la section "Developper").

La première étape de la configuration consiste à mettre en place le fichier global de configuration, qui est lu par le daemon lors de son lancement (manuellement, ou au démarrage du système).  Dans mon cas, étant donné qu'il ne sagit pas d'un MySQL sur un poste de travail, mais que je n'ai pas des centaines de milliers d'usagers non plus, j'ai choisi le fichier "my-medium.cnf" pour mon installation.  Ce dernier est situé dans le répertoire décompressé des sources, sous le sous-répertoire "support-files".  Il faut placer ce fichier sous "/etc" de Solaris 10.  Placez-vous donc à la racine du répertoire des sources décompressé, à l'endroit où vous aurez exécuté les commandes "./configure", "make", et "make install", et tapez la commande suivante:

 
# cp support-files/my-medium.cnf /etc/my.cnf
 

L'étape suivante consiste maintenant à "créer" votre serveur de base de données MySQL, proprement dit.  De ce fait, jusqu'à maintenant, on n'a mis en place que les fichiers binaires.  Maintenant, il faut mettre en place la structure et les tables MySQL de base, pour l'administration du serveur de base de données.

Pour se faire, rendez-vous d'abord dans l'arborescence sous laquelle vous avez décidé de loger les fichiers binaires (dans mon cas, ça a été sous "/usr/local/mysql": 

 
# cd /usr/local/mysql
 
et lancez l'installation du serveur de base de données avec la commande "bin/mysql_install_db --user=mysql":
 

# bin/mysql_install_db --user=mysql
Installing all prepared tables
Fill help tables

To start mysqld at boot time you have to copy
support-files/mysql.serverto the right place for your system

PLEASE REMEMBER TO SET A PASSWORD FOR THE MySQL root USER !
To do so, start the server, then issue the following commands:
/usr/local/mysql/bin/mysqladmin -u root password 'new-password'
/usr/local/mysql/bin/mysqladmin -u root -h polaris password 'new-password'
See the manual for more instructions.

You can start the MySQL daemon with:
cd /usr/local/mysql ; /usr/local/mysql/bin/mysqld_safe &

You can test the MySQL daemon with the benchmarks in the
'sql-bench' directory:
cd sql-bench ; perl run-all-testsPlease report any problems with the /usr/local/mysql/bin/mysqlbug script!

The latest information about MySQL is available on the web at
http://www.mysql.com
Support MySQL by buying support/licenses at https://order.mysql.com

 

La commande génère pas mal de choses, mais ce sont de judicieux conseils, notamment concernant l'ajout d'un mot de passe pour l'administrateur du serveur MySQL (l'usager "root") et pour le changement de propriété au niveau du groupe, pour les fichiers binaires d'exécution du serveur.

Donc, pour effectuer les premières étapes de ces configurations, il faut maintenant démarrer le serveur MySQL manuellement.  On le fait avec la commande suivante:

 
# /usr/local/mysql/bin/mysqld_safe &
 
ensuite, il faut mettre un mot de passe pour l'usager "root", pour ainsi sécuriser l'accès en mode administratif à votre nouveau serveur MySQL. Il faut le faire à 2 niveaux: au niveau "local" et en provenance de tous les autres systèmes: c'est pourquoi il faut faire la commande 2 fois. Dans l'exemple ci-dessous, remplacez "password" par votre mot de passe d'administrateur, et "srv" par le nom de votre machine (hostname):
 
# /usr/local/mysql/bin/mysqladmin -u root password 'password'
# /usr/local/mysql/bin/mysqladmin -u root -h srv password 'password'
 
et pour finir, toujours sous l'arborescence de vos fichiers binaires du serveur MySQL, exécutez la commande suivante, pour que les fichiers et répertoires qui y sont présents soient propriété du groupe "mysql":
 
# chgrp -R mysql .
 
En principe, votre nouveau serveur "MySQL" configuré et prêt à opérer comme les plus solides pièces d'une architecture de type 3-tiers!
 
Qu'est-ce que le FMRI sous Solaris 10? haut
 

L'une des nouveautés excitantes de Solaris 10 est sans nul doute l'avènement du FMRI - pour "Fault Management Resource Identifier" - c'est-à-dire un remaniement complet de la manière dont Solaris démarre et termine un service de type "daemon", et l'ajout de la "surveillance" (en quelque sorte) de ce service de type daemon.

De ce fait, Solaris gère normalement le démarrage et la fermeture de ses services daemon selon le principe du "système V", donc via un démarrage séquentiel basé sur l'ordre croissant des débuts de noms de fichier (ex.: "S40openssh" démarre normalement avant "S70apache" - "S" identifiant la commande "start", suivi de "40" qui est un chiffre plus bas que "70", donc devant démarrer avant, etc.), et situés dans des répertoires propres à chacun des "init levels" pour lesquels on désire le démarrage de chacun de ces services.

Maintenant, avec l'arrivée de Solaris 10, les choses changent drastiquement.  Évidemment, on peut encore y aller avec les fichiers à la "système V" (donc via "/etc/init.d", etc. pour démarrer un service) pour des raisons évidentes de compatibilité, mais Sun nous dit que ça va éventuellement disparaître.  La nouvelle solution consiste:

  • à quand même créer un script de démarrage/fermeture fonctionnant avec l'argument "start" ou "stop", selon ce que l'on veuille démarrer ou fermer l'application;
  • à créer un fichier "xml" en plus pour indiquer où est ce script de démarrage/fermeture, ainsi qu'à identifier les dépendances de ce service à démarrer;
  • à ajouter ce service dans le "repository" des ressources à rendre plus disponibles.

Entre autres avantages, cette nouvelle gymnastique plus complexe, j'en conviens, permet d'augmenter la rapidité du démarrage du serveur, et la résistance des services à des erreurs de système ou même la tolérance à des bris physiques.

De ce fait, le démarrage du serveur peut être considérablement augmenté, parce que dorénavant, le système ne les gère plus séquenciellement en ordre (1) de "init levels" et (2) de nom de fichiers: si les services n'ont pas de dépendance d'identifiée dans leur fichier "xml", il les démarre tous en même temps!  Il n'attend donc plus qu'un service soit démarré complètement pour poursuivre.

Également, le fait que soit maintenant ajouté le service au "repository" du FMRI fait que, si par exemple sur un système multiprocesseurs, le processeur, sur lequel le processus du service tourne, devait mourrir, le FMRI redémarrerait ce service sur un autre processeur.  Il en va de même pour une erreur logicielle ou autre: le FMRI tente de redémarrer le service, quelle que soit l'erreur éprouvée, et selon les paramètres fournis dans le fichier "xml".

Voilà pour l'explication rapide de la nouvelle façon de fonctionner sous Solaris 10.  Évidemment, c'est un peu "simplifié", parce que le sujet de cette section-ci n'est pas d'expliquer le tout, mais de l'appliquer à MySQL.

 
MySQL pris en charge par le FMRI haut
 
La procédure qui suit consiste donc, tel que décrit ci-haut, à rendre le nouveau serveur MySQL sous la charge du FMRI.  Pour se faire, vous allez commencer par créer un répertoire au sein de l'arborescence des services du FMRI, sous "/var/svc/manifest":
 
# mkdir /var/svc/manifest/application/database
 
et vous allez ensuite ajouter le script "xml" suivant sous "/var/svc/manifest/application/database", script que vous nommerez "mysql.xml":
 
<?xml version="1.0"?>
<!DOCTYPE service_bundle SYSTEM "/usr/share/lib/xml/dtd/service_bundle.dtd.1">
<!--
    Copyright 2005 Sun Microsystems, Inc.  All rights reserved.
    Use is subject to license terms.
    MySQL.xml : MySQL manifest, Scott Fehrman, Systems Engineer
    updated: 2005-09-16
-->

<service_bundle type='manifest' name='MySQL'>
<service name='application/database/mysql' type='service' version='1'>

<single_instance />

    <dependency
        name='filesystem'
        grouping='require_all'
        restart_on='none'
        type='service'>
        <service_fmri value='svc:/system/filesystem/local' />
    </dependency>

    <exec_method
        type='method'
        name='start'
        exec='/usr/local/mysql/share/mysql/mysql.server start'
        timeout_seconds='120' />

    <exec_method
        type='method'
        name='stop'
        exec='/usr/local/mysql/share/mysql/mysql.server stop'
        timeout_seconds='120' />

    <instance name='default' enabled='false' />

    <stability value='Unstable' />

    <template>
        <common_name>
            <loctext xml:lang='C'>MySQL RDBMS 5.0.19</loctext>
        </common_name>
        <documentation>
            <manpage title='mysql' section='1' manpath='/usr/local/mysql/man' />
        </documentation>
    </template>

</service>
</service_bundle>
 
Une fois le script ajouté au bon endroit, faites-en la validation, pour être certain qui est correct pour vos besoin.  Cette validation est effectuée par le biais de la commande "svccfg":
 
# svccfg validate /var/svc/manifest/application/database/mysql.xml
 
si la commande ne retourne rien, c'est que tout est parfait!  L'étape suivante est donc l'ajout de votre script "xml" au "repository" du FMRI.  C'est encore via la commande "svccfg" que le tout est réalisé:
 
# svccfg import /var/svc/manifest/application/database/mysql.xml
 
Une fois que votre script "xml" est ajouté au repository du FMRI, votre service est là, mais désactivé.  Vous voulez le voir?  Facile!  Allez-y avec la commande "svcs":
 
# svcs mysql
STATE          STIME    FMRI
disabled       20:06:30 svc:/application/database/mysql:default
 
Il ne vous reste plus maintenant qu'à démarrer votre service, toujours via le FMRI, pour que votre serveur MySQL soit en fonction!  Cette fois, c'est avec la commande "svcadm" que vous devez le faire:
 
# svcadm enable mysql
 
Si tout s'est encore une fois déroulé comme prévu, vous devriez voir votre nouvelle instance MySQL présente sur votre système, comme si de rien n'était:
 
# ps -ef | grep mysql
    root 25549     1   0 20:10:15 ?           0:00 /bin/sh /usr/local/mysql/bin/mysqld_safe --datadir=/export/data1 --pid-file=/ex
   mysql 25572 25549   1 20:10:16 ?           0:01 /usr/local/mysql/libexec/mysqld --basedir=/usr/local/mysql --datadir=/export/da
    root 25573 15891   0 20:10:19 pts/1       0:00 grep mysql
 
Problème de compilation sous Solaris 10 haut
 

En tentant de compiler sous Solaris 10, même si vous avez bien défini toutes les variables d'environnement ci-haut (notamment $LD_LIBRARY_PATH, $CFLAGS, $CXX et $CXXFLAGS), il est possible que vous éprouviez quelques difficultés lors de la portion "make" du processus.  C'est ce qui m'est arrivé en tentant de compiler MySQL 5.0.24a dernièrement.

De ce fait, après avoir suivi toutes les étapes ci-haut, j'ai eu l'erreur de compilation suivante lors du "make" (et ce sur 2 serveurs différents, un Sun Enterprise 250 et un Sun Ultra 60): 

 
libtool: link: `/usr/sfw/lib/gcc/sparc-sun-solaris2.10/3.4.3/
../../..//libstdc++.la' is not a valid libtool archive
make[3]: *** [liboptions.la] Error 1
make[3]: Leaving directory `/export/home/baudet/downloads/mysql-5.0.27/
server-tools/instance-manager'
make[2]: *** [all-recursive] Error 1
make[2]: Leaving directory `/export/home/baudet/downloads/
mysql-5.0.27/server-tools'
make[1]: *** [all-recursive] Error 1
make[1]: Leaving directory `/export/home/baudet/downloads/mysql-5.0.27'
make: *** [all] Error 2

 

En fouillant un peu sur le web, j'ai trouvé que Solaris 10 aurait visiblement un bug avec deux librairies dont MySQL dépend pour sa compilation et son exécution.  Ces librairies sont situées sous l'arborescence OpenSource de Solaris, soit:

  • /usr/sfw/lib/libstdc++.la
  • /usr/sfw/lib/64/libstdc++.la

Il s'agit en fait de la même librairie, nommée "libstdc++.la", mais pour 32 bits (la première) et 64 bits (la deuxième).

Le problème est que, si vous éditez ces deux librairies, les fichiers sont tout simplement *vides*!!

La solution consiste à éditer, donc, chacun des deux fichiers, et à y placer le contenu suivant, et à sauvegarder chacun de ces fichiers:

Contenu du fichier "/usr/sfw/lib/libstdc++.la" 

 
# libstdc++.la - a libtool library file
# Generated by ltmain.sh - GNU libtool 1.4a-GCC3.0 (1.641.2.256 2001/05/28 20:09:07 with GCC-local changes)
#
# Please DO NOT delete this file!
# It is necessary for linking the library.
 
# The name that we can dlopen(3).
dlname='libstdc++.so.6'
 
# Names of this library.
library_names='libstdc++.so.6.0.3 libstdc++.so.6 libstdc++.so'
 
# The name of the static archive.
old_library='libstdc++.a'
 
# Libraries that this one depends upon.
dependency_libs='-lc -lm -L/usr/sfw/lib -lgcc_s'
 
# Version information for libstdc++.
current=6
age=0
revision=3
 
# Is this an already installed library?
installed=yes
 
# Files to dlopen/dlpreopen
dlopen=''
dlpreopen=''
 
# Directory that this library needs to be installed in:
libdir='/usr/sfw/lib'
 
Contenu du fichier "/usr/sfw/lib/64/libstdc++.la"
 
# libstdc++.la - a libtool library file
# Generated by ltmain.sh - GNU libtool 1.4a-GCC3.0 (1.641.2.256 2001/05/28 20:09:07 with GCC-local changes)
#
# Please DO NOT delete this file!
# It is necessary for linking the library.
 
# The name that we can dlopen(3).
dlname='libstdc++.so.6'
 
# Names of this library.
library_names='libstdc++.so.6.0.3 libstdc++.so.6 libstdc++.so'
 
# The name of the static archive.
old_library='libstdc++.a'
 
# Libraries that this one depends upon.
dependency_libs='-L/lib/64 -lc -lm -L/usr/sfw/lib/64 -lgcc_s'
 
# Version information for libstdc++.
current=6
age=0
revision=3
 
# Is this an already installed library?
installed=yes
 
# Files to dlopen/dlpreopen
dlopen=''
dlpreopen=''
 
# Directory that this library needs to be installed in:
libdir='/usr/sfw/lib/64'
 
 
Version imprimable

Accueil Photographie Aviation Informatique Autres trucs Galeries d'images Liens

Copyright © 2017, Benoit Audet (www.benoitaudet.com), tous droits réservés.
Protégé par les lois du copyright des États-Unis et du Canada et par des traités internationaux.
Benoit Audet