| 5.1 Scripts serveur MySQL et utilitaires
 5 Administration du serveur
 Manuel de Référence MySQL 4.1 : Version Française
 
 . Présentation des scripts serveurs et des utilitaires
 . mysqld-max , la version étendue du serveur mysqld
 . safe_mysqld , le script père de mysqld
 . Le script de démarrage mysql.server
 ->mysqld_multi , un programme pour gérer plusieurs serveurs MySQL
 
 
 | 
  5.1.5 mysqld_multi , un programme pour gérer plusieurs serveurs MySQL 
    mysqld_multi
  sert à gérer plusieurs serveurs  
mysqld
 
qui utilisent différentes sockets Unix et ports TCP/IP. 
Le programme va rechercher les groupes nommés  
[mysqld#]
  dans le fichier
 
my.cnf
  (ou le fichier appelé  
--config-file=...
 ),
où  
#
  peut être n'importe quel nombre positif, supérieur ou égal à 1.
Ce nombre est appelé le numéro de groupe d'options. Les numéros de groupe
permettent de distinguer un groupe d'options d'un autre, et sont utilisés
comme argument du script  
mysqld_multi
  pour spécifier quel serveur vous
voulez démarrer, arrêter ou examiner. Les options listées dans ces groupes 
doivent être les mêmes que celle que vous utiliseriez dans une section
dédiée au démon  
[mysqld]
 . Voyez, par exemple,  Lancer et arrêter automatiquement MYSQL .
Cependant, pour  
mysqld_multi
 , vous devez vous assurer que chaque groupe
contient des valeurs pour les options telles que port, socket, etc., qui seront
utilisées par chaque processus  
mysqld
 . Pour plus d'informations
sur sur les options de chaque serveur dans un environnement à serveurs multiples,
voyez la section  Utiliser plusieurs serveurs sur la même machine .
mysqld_multi
  est utilisé ave la syntaxe suivante : start
 ,  
stop
  et  
report
  indique le type d'opération que vous
voulez faire. Vous pouvez faire une opération sur un serveur unique ou plusieurs serveurs,
en fonction de la liste  
GNR
  qui suit le nom de l'opération.
S'il n'y a pas de liste,  
mysqld_multi
  effectue l'opération sur tous les serveurs
du fichier d'options.Chaque  
GNR
  représente un numéro de groupe d'options. Vous pouvez démarrer,
arrêter ou examiner n'importe quel numéro de groupe d'options, ou même plusieurs
d'entre eux en même temps. Par exemple, le groupe  
GNR
  pour le groupe
appelé  
[mysqld17]
  est  
17
 . Pour spécifier un intervalle de nombres,
séparez le premier et le dernier numéro par un tiret. La valeur  
GNR
 
10-13
  représente les groupes de  
[mysqld10]
  à  
[mysqld13]
 .  Les
groupes multiples ou les intervalles de groupes peuvent être spécifiées en ligne
de commande, séparés par virgules. Il ne doit pas y avoir d'espace blanc
entre deux éléments de la liste : tout ce qui sera après un espace sera ignoré.| 
shell> mysqld_multi [options] {start|stop|report} [GNR[,GNR]...]
 | 
 
Cette commande lance un serveur unique, avec le groupe d'options  
[mysqld17]
  :
 Cette commande arrête plusieurs serveurs, en utilisant les groupes d'options
 
[mysql8]
  et  
[mysqld10]
  à  
[mysqld13]
  :| 
shell> mysqld_multi start 17
 | 
 Pour afficher un exemple de configurations, utilisez cette commande :| 
shell> mysqld_multi start 8,10-13
 | 
 Les valeurs de numéro de groupe d'options peuvent être une liste de valeurs
séparées par une virgule ou un tiret. Dans ce dernier cas, toutes les
numéro de groupe d'options situés entre les deux numéros seront alors affectés.
Sans numéro de groupe d'options spécifié, tous les numéros de groupes du 
fichier d'options sont affectés. Notez que vous ne devez pas avoir d'espace
dans la liste des numéros de groupe d'options. Tout ce qui est placé au-delà
de l'espace sera ignoré.| 
shell> mysqld_multi --example
 | 
 
mysqld_multi
  supporte les options suivantes : 
 
Quelques notes pour  
mysqld_multi
  :
     --config-file=name
     
Un fichier de configuration alternatif. Note : cela ne va pas modifier
les options de ce programme ( 
[mysqld_multi]
 ), mais uniquement les
groupes  
[mysqld#]
 . Sans cette option, tout sera lu dans le fichier
d'options traditionnel  
my.cnf
 . Cette option n'affecte pas la façon
avec laquelle  
mysqld_multi
  lit ses options, qui sont toujours prises dans
le groupe  
[mysqld_multi]
  du fichier  
my.cnf
  habituel.
      
     --example
     
Affiche un exemple de fichier de configuration.
      
     --help
     
Affiche l'aide et quitte.
      
     --log=name
     
Fichier de log. Le chemin complet et le nom du fichier sont nécessaires.
      
     --mysqladmin=prog_name
     
L'exécutable  
mysqladmin
  à utiliser lors de l'arrêt du serveur.
      
     --mysqld=prog_name
     
L'exécutable  
mysqld
  à utiliser. Notez que vous pouvez donner
cette option à  
safe_mysqld
 . Ces options sont passées à 
 
mysqld
 . Assurez-vous que vous avez bien  
mysqld
  dans votre
variable d'environnement  
PATH
  ou corrigez  
safe_mysqld
 .
      
     --no-log
     
Affiche les données d'historique à l'écran plutôt que dans le fichier de log.
Par défaut, le fichier de log est activé.
      
     --password=password
     
Le mot de passe de l'utilisateur  
mysqladmin
 .
      
     --tcp-ip
     
Connexion au serveur MySQL via le port TCP/IP au lieu de la socket Unix.
Cela affecte l'arrêt et le rapport. Si le fichier de socket
manque, le serveur peut continuer de tourner, mais il n'est plus accessible
que par port TCP/IP. Par défaut, les connexions sont faites avec les sockets
Unix.
      
     --user=user_name
     
L'utilisateur MySQL pour  
mysqladmin
 .
      
     --version
     
Affiche le numéro de version et quitte.
      
Assurez-vous que l'utilisateur MySQL, qui stoppe les services 
 
mysqld
  (e.g en utilisant la commande  
mysqladmin
 ), a les mêmes
nom d'utilisateur et mot de passe pour tous les dossiers de données
utilisés. Et assurez-vous que cet utilisateur a bien les droits de  
SHUTDOWN
 !
Si vous avez de nombreux dossiers de données et de nombreuses bases  
mysql
 
avec différents mots de passe pour le serveur  
root
  MySQL, 
vous souhaiterez peut être créer un utilisateur commun  
multi_admin
  à chaque 
base, avec le même mot de passe (voir ci-dessous). Voici comment faire : 
 
Comment le système de droits fonctionne .
Vous devrez utiliser la même commande pour chaque serveur  
mysqld
  qui fonctionne :
changez simplement la socket,  
-S=...
 ).| 
shell> mysql -u root -S /tmp/mysql.sock -proot_password -e"GRANT SHUTDOWN ON *.* TO multi_admin@localhost IDENTIFIED BY 'multipass'"
 | 
pid-file
  est très important, si vous utilisez  
safe_mysqld
 
pour démarrer  
mysqld
  (e.g.,  
--mysqld=safe_mysqld
 ). Chaque
 
mysqld
  doit avoir son propre fichier  
pid-file
 . L'avantage
d'utiliser  
safe_mysqld
  au lieu de  
mysqld
  est que 
 
safe_mysqld
  ``surveille'' tous les processus  
mysqld
  et les
redémarrera si un processus  
mysqld
  s'arrête suite à la reception
d'un signal  
kill -9
 , ou pour toute autre raison comme
une erreur de segmentation (que MySQL ne devrait jamais faire, bien sûr !).
Notez bien que le script  
safe_mysqld
  vous imposera peut être d'être
démarré depuis un dossier spécial. Cela signifie que vous devrez probablement
utiliser la commande shell  
cd
  jusqu'à un certain dossier avant de pouvoir
exécuter  
mysqld_multi
 . Si vous avez des problèmes pour démarrer, voyez
le script  
safe_mysqld
 . Vérifiez notamment ces lignes :  
safe_mysqld
, le script père de 
mysqld
 .
Le test ci-dessus devrait fonctionner, ou bien vous rencontrerez probablement
des problèmes.| 
----------------------------------------------------------------MY_PWD=`pwd`
 # Check if we are starting this relative (for the binary release)
 if test -d $MY_PWD/data/mysql -a -f ./share/mysql/english/errmsg.sys -a \
 -x ./bin/mysqld
 ----------------------------------------------------------------
 | 
Le fichier de socket et le port TCP/IP doivent être différents pour chaque  
mysqld
 .
Vous pouvez utiliser l'option  
--user
  de  
mysqld
 , mais 
afin de faire cela, vous devez exécuter le script  
mysqld_multi
  en tant
que  
root
  Unix. Placer cette option dans le fichier de configuration
ne changera rien : vous obtiendrez une alerte, si vous n'êtes pas le super
utilisateur, et les démons  
mysqld
  seront démarrés avec vos droits
Unix. 
Important
  : assurez-vous bien que le fichier de données
et le fichier de  
pid-file
  sont accessibles en lecture et écriture
(et exécution pour le dernier) à l'utilisateur Unix qui lance les processus
 
mysqld
 .  
N'utilisez pas
  le compte root Unix pour cela, à moins que
vous ne  
sachiez
  ce que vous faîtes.
Très important
  : assurez-vous de bien comprendre la signification des
options que vous passez à  
mysqld
 s et  
pourquoi
  vous avez besoin
de plusieurs processus  
mysqld
 . Méfiez vous des pièges des serveurs 
multiples  
mysqld
  dans le même dossier de données. Utilisez des dossiers
de données à moins que vous ne  
sachiers
  ce que vous faîtes. 
Démarrer plusieurs serveurs  
mysqld
 s dans le même 
dossier  
ne vous donnera aucun
  gain de performance dans un système threadé.
 Utiliser plusieurs serveurs sur la même machine . 
Voici un exemple de fichier de configuration fourni par  
mysqld_multi
 .
 Utiliser les fichiers d'options .| 
# This file should probably be in your home dir (~/.my.cnf) or /etc/my.cnf# Version 2.1 by Jani Tolonen
 
 [mysqld_multi]
 mysqld     = /usr/local/bin/safe_mysqld
 mysqladmin = /usr/local/bin/mysqladmin
 user       = multi_admin
 password   = multipass
 
 [mysqld2]
 socket     = /tmp/mysql.sock2
 port       = 3307
 pid-file   = /usr/local/mysql/var2/hostname.pid2
 datadir    = /usr/local/mysql/var2
 language   = /usr/local/share/mysql/english
 user       = john
 
 [mysqld3]
 socket     = /tmp/mysql.sock3
 port       = 3308
 pid-file   = /usr/local/mysql/var3/hostname.pid3
 datadir    = /usr/local/mysql/var3
 language   = /usr/local/share/mysql/swedish
 user       = monty
 
 [mysqld4]
 socket     = /tmp/mysql.sock4
 port       = 3309
 pid-file   = /usr/local/mysql/var4/hostname.pid4
 datadir    = /usr/local/mysql/var4
 language   = /usr/local/share/mysql/estonia
 user       = tonu
 
 [mysqld6]
 socket     = /tmp/mysql.sock6
 port       = 3311
 pid-file   = /usr/local/mysql/var6/hostname.pid6
 datadir    = /usr/local/mysql/var6
 language   = /usr/local/share/mysql/japanese
 user       = jani
 | 
 |