Accueil
Rechercher:
sur developpez.com sur les forums
Forums | Tutoriels | F.A.Q's | Participez | Hébergement | Contacts
Accueil Conception Java DotNET Visual Basic  C  C++ Delphi MS-Office SQL & SGBD Oracle  4D  Business Intelligence
Club Emploi Blogs   TV   Dév. Web PHP XML Python Autres 2D-3D-Jeux Sécurité Windows Linux PC Mac
ACCUEIL MYSQL FORUM MYSQL F.A.Q MYSQL TUTORIELS MYSQL OUTILS MYSQL LIVRES MYSQL

Installation et configuration de MySQL 5.0

Date de publication : 19/01/2006

Par Maximilian (Autres articles)
 

Ce tutoriel vous explique pas à pas comment installer un serveur de bases de données MySQL 5 sous Windows et Linux, et comment effectuer les paramétrages post-installation de base.


Introduction
1. Choix préalables
1.1 Licence
1.2 Version
1.3 Distribution
2. Procédure d'installation
2.1 Windows
2.2 Linux
3. Configuration
3.1 Options, variables et fichiers de configuration
3.2 Réglages de sécurité
3.3 Mode SQL
3.4 Paramétrer InnoDB
Conclusion


Introduction

Les concepteurs de MySQL ont l'habitude d'affirmer que ce SGBD peut être installé et configuré en une dizaine de minutes seulement. Même si ce chiffre est à prendre avec précaution, il est vrai que son déploiement reste simple par rapport aux ténors du marché et qu'il ne requiert pas de talents d'administrateur extraordinaires.
Voyons comment effectuer l'opération dans la pratique.


1. Choix préalables


1.1 Licence

C'est à l'évidence la gratuité et la liberté d'utilisation qui font pencher la balance en faveur de MySQL dans de nombreux cas. Pourtant, il ne faut pas perdre de vue que ce SGBD se décline en deux produits distincts qui, tout en ayant la même base, sont assortis de leurs licences respectives :

  • MySQL Community Edition est publié sous licence open source GPL. Pour faire court, ce serveur est téléchargeable et utilisable librement tant que vous ne le distribuez pas, sauf dans le cadre d'une application elle-même sous licence GPL.
    C'est bien entendu celui-ci que nous emploierons dans ce tutoriel.
  • MySQL Pro Certified Server est accessible via un abonnement à MySQL Network (comprenant un support utilisateur à l'année) ou une licence commerciale simple. Il s'agit de la variante payante du serveur, qui a été soumise à divers contrôles de qualité externes. Il est nécessaire de l'acquérir pour distribuer une application propriétaire non-GPL basée sur MySQL ou incluant un de ses pilotes.

1.2 Version

Pour une nouvelle installation, je ne saurais trop vous conseiller d'opter pour la dernière version stable (5.0.15 à l'heure où cet article est écrit). La légère augmentation en termes d'encombrement et de consommation de ressources par rapport aux moutures précédentes est largement compensée par une robustesse accrue et des nouvelles fonctionnalités importantes.

En ce qui nous concerne, nous utiliserons donc MySQL 5.0 au long des lignes qui suivent. Néanmoins les indications données sont également valables pour la version 4.1 dont la procédure d'installation est assez similaire.

Au cas où pour des raisons de compatibilité avec l'existant vous seriez forcé d'installer une version inférieure à la 4.1, reportez-vous au tutoriel d'installation de Florian.


1.3 Distribution

MySQL est téléchargeable en version binaire ou source, cette dernière étant réservée à ceux qui veulent jouer les mécaniciens avec le moteur du SGBD ou simplement compiler eux-mêmes le serveur en fonction de leur environnement et de leurs besoins.
Comme vous pouvez le voir sur la page downloads de mysql.com, il existe plusieurs distributions binaires compilées avec différentes options et incluant plus ou moins d'éléments annexes.

Sous Linux :

  • La distribution Standard fournit une configuration simple et classique.
  • La version Max, elle, est compilée avec entre autres le support supplémentaire des moteurs Blackhole, BDB et NDB (cluster). A noter qu'avant de déployer MySQL-Max il faut avoir installé la Standard.
  • Enfin, la distribution Debug, peu recommandée pour une utilisation en production, fournit des informations de débogage additionnelles.

Sous Windows :

  • Standard et Max sont inclus de base dans tous les packages.
  • Par rapport à la distribution Windows complète, la version Essentials ne contient pas le serveur MySQL embarqué (embedded server) ni de la suite de tests (benchmark suite). Elle est à privilégier dans la plupart des cas.
  • Troisième choix possible, l'archive Noinstall est un simple zip délesté de l'assistant d'installation et de configuration de MySQL que nous allons voir tout de suite.

2. Procédure d'installation


2.1 Windows

Une fois votre choix fait (pour nous, Windows Essentials) et le package téléchargé ici, exécutez l'installeur.

1. - 2. On retrouve tout d'abord les trois modes classiques dans ce genre d'installation : typique, complet et personnalisé. Choisissons personnalisé pour voir les différents composants qu'il est possible de sélectionner.

3. On constate que les éléments sont sensiblement les mêmes d'un mode à l'autre, hormis les bibliothèques C qui ne sont pas installées par défaut.

4. Cliquez sur Install pour lancer le déploiement.

5. Une fois cette étape terminée, vous pouvez enregistrer votre installation de MySQL. Pour ce faire, vous avez la possibilité de créer un compte sur le site mysql.com ou d'utiliser un compte existant.

6. L'installeur a fini son travail et vous demande si vous souhaitez lancer l'assistant de configuration du serveur.

Ce wizard vous permet de préparer le terrain en personnalisant votre serveur à travers une série d'écrans, même si pour une configuration plus fine vous serez amené à modifier les paramètres manuellement par la suite. Les petits curieux pourront examiner les réglages effectués par l'assistant en consultant le modèle my-template.ini situé dans le répertoire d'installation de MySQL.

Laissez la case cochée et cliquez sur Finish.

7. - 8. Vous avez maintenant le choix entre une configuration détaillée et une configuration standard. Nous choisirons la détaillée, qui intercale une dizaine d'étapes de paramétrage en plus de celles de base.

9. Type de serveur. Cet écran détermine l'ordre de grandeur de la RAM qui sera allouée aux différents caches mémoire de MySQL selon que la machine est un poste de développement/test, un serveur multi-usages ou un serveur dédié. L'assistant affinera par la suite la taille de ces caches en fonction du nombre d'accès concurrents que vous préciserez.

10. Utilisation de la base de données. Il s'agit ici de paramétrer le support des transactions avec le moteur de stockage InnoDB. De base, InnoDB est activé mais on peut en faire le moteur principal par défaut en choisissant l'option "Transactional Database Only". Le troisième choix désactive InnoDB, ce qui économise quelques ressources (paramètre skip-innodb qui peut être retiré plus tard du fichier de configuration).

11. Si vous avez opté pour un des deux premiers choix dans l'écran précédent, vous devez configurer l'emplacement où sont stockés les fichiers de données (tablespaces) InnoDB.

12. Accès concurrents. Pour un serveur peu sollicité (20 connexions simultanées), choisissez la première option. La deuxième convient à une charge plus conséquente avec plusieurs centaines de connexions. Vous pouvez aussi paramétrer manuellement le nombre approximatif d'utilisateurs connectés simultanément.

Concrètement, cet écran influe sur des variables serveur comme max_connections (100 pour la première option, 800 pour la deuxième sur un serveur dédié par exemple), thread_cache_size, key_buffer_size, query_cache_size (cache de requêtes activé seulement si on opte pour le deuxième ou troisième choix de l'écran), innodb_buffer_pool_size...

13. L'étape suivante permet de spécifier si on autorise les connexions TCP/IP extérieures et sur quel port, ainsi que le mode SQL choisi (voir le point 3.3).

14. Configuration du jeu de caractères par défaut (variable default-character-set). Si votre base doit contenir des données dans de multiples langues et alphabets, le charset UTF-8 (deuxième choix) est conseillé. Sinon laissez l'option sélectionnée par défaut, Latin1 étant adapté au français.

15. Options relatives à l'environnement Windows. Vous avez maintenant la possibilité d'enregistrer MySQL comme service Windows (attention, il peut y avoir conflit avec un service MySQL déjà existant).
La deuxième option est bien pratique si vous vous servez du client mysql en ligne de commande, puisqu'elle permet d'enregistrer son chemin dans la variable PATH afin de pouvoir le lancer directement depuis l'invite MS-DOS sans avoir à se placer dans le répertoire d'installation de MySQL.

16. Il est fortement conseillé dans cet écran de modifier le mot de passe du compte root (administrateur ayant tous les privilèges sur les bases) qui est vide par défaut.
En revanche il est rarement utile de permettre à des utilisateurs de se connecter anonymement au serveur, je vous conseille donc de laisser la deuxième case décochée.

17. L'assistant tente d'écrire le fichier de configuration, de démarrer le service MySQL et enfin d'appliquer les paramètres de sécurité (changement du password root et création éventuelle d'un compte anonyme).
Notez que les deux dernières étapes ont des chances d'échouer, notamment s'il y a un conflit avec une installation MySQL précédente, ou un firewall qui bloque l'accès au serveur sur le port spécifié. Le cas échéant, faites les modifications nécessaires puis relancez l'assistant MySQL Instance Config Wizard (via les Programmes du menu Démarrer).


Le déploiement est maintenant terminé. Pour lancer le serveur, vous avez diverses possibilités :

  • La plus pratique est d'utiliser MySQL System Tray Monitor (inclus avec le serveur), qui se loge dans la barre des tâches et indique le statut actuel du serveur tout en permettant de le démarrer/arrêter rapidement.
  • Vous pouvez démarrer le service MySQL et opter pour une exécution automatique au démarrage de Windows, en passant par la MMC Services (Panneau de configuration->Outils d'administration->Services).
  • L'outil MySQL Administrator permet également de lancer MySQL de manière graphique.
  • Enfin, les adeptes de la vieille école pourront toujours exécuter directement mysqld ou mysqld-nt depuis les commandes MS-DOS.

2.2 Linux

La section downloads de mysql.com propose les binaires suivants :

  • des packages RPM spécifiques pour Suse Linux et Red Hat Linux Enterprise
  • des RPM génériques (utilisables sous Fedora ou Mandriva par exemple)
  • des archives tar.gz standard
Les amateurs de distributions avec un système de gestion de paquetages non-RPM opteront pour cette dernière solution ou trouveront un package au format adéquat sur leur repository préféré.

Nous nous intéresserons au déploiement du RPM générique disponible sur http://dev.mysql.com/downloads/mysql/5.0.html ("Linux x86 generic RPM downloads"), sur une distribution Fedora Core 4.

Après avoir téléchargé les packages Server et Clients, connectez-vous en super-utilisateur et installez-les :
[root@localhost]# rpm -i MySQL-server-5.0.15-0.glibc23.i386.rpm

PLEASE REMEMBER TO SET A PASSWORD FOR THE MySQL root USER !
To do so, start the server, then issue the following commands:
/usr/bin/mysqladmin -u root password 'new-password'
/usr/bin/mysqladmin -u root -h localhost.localdomain password 'new-password'
See the manual for more instructions.
				
Please report any problems with the /usr/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
Starting MySQL................................................[FAILED]

[root@localhost]# rpm -i MySQL-client-5.0.16-0.glibc23.i386.rpm
[root@localhost]#
La procédure d'installation effectue un certain nombre d'opérations :

  • Création du groupe mysql et du user du même nom qui sera amené à exécuter le serveur.
  • Par défaut, les bases, fichiers de configuration et logs sont placés dans /var/lib/mysql, les exécutables dans /usr/bin et /usr/sbin.
  • Initialisation des tables de privilèges (ce qui dans une installation manuelle non-RPM doit être réalisé séparément avec mysql_install_db).
  • Un script mysql est rajouté au répertoire /etc/init.d pour lancer le serveur (via l'utilitaire mysqlmanager) au démarrage de la machine.

Il n'existe pas pour l'instant d'assistant de configuration de MySQL sous Linux, vous devez donc tout paramétrer manuellement (ce qui est de toute façon recommandé pour un serveur de production).

info Dans notre exemple, le serveur refuse de démarrer (d'où le [FAILED] à l'issue de l'installation). Après consultation du forum mysql.com, il suffit d'assouplir la stratégie de sécurité mise en place par le système SELinux (modification du fichier /etc/selinux/config) pour que tout fonctionne.
Pour démarrer/arrêter le serveur MySQL, un simple /etc/init.d/mysql start | stop suffit. Par défaut, il est exécuté avec l'option --user=mysql ce qui est un gage de sécurité puisque l'utilisateur Linux mysql a des droits limités.
Vous pouvez également utiliser directement mysqlmanager ou le démon mysqld_safe / mysqladmin shutdown ainsi que l'outil graphique MySQL Administrator pour lancer et stopper le serveur.


3. Configuration


3.1 Options, variables et fichiers de configuration

Nous ne décrirons pas ici les nombreux paramètres système et options qu'il est possible d'appliquer au serveur. Les points 3.2, 3.3 et 3.4 en présentent quelques exemples et vous pouvez à tout moment accéder à leur liste et leur valeur courante avec la commande sql SHOW VARIABLES. En revanche, penchons-nous sur les différents moyens de mettre en oeuvre ces paramètres.

  • Vous pouvez passer des options au démarrage du serveur en ligne de commande : mysqld --option1 --option2 ...
  • En cours d'exécution, les variables système sont manipulables via la commande sql SET GLOBAL variable=valeur ;
  • Tous ces éléments peuvent être placés dans un fichier de configuration que le serveur va lire au démarrage.
    Il s'agit par défaut de <dossier d'installation>\my.ini sous Windows et de /etc/my.cnf (global) ou /var/lib/mysql/my.cnf (options serveur uniquement) sous Linux. On peut également spécifier un fichier de configuration différent avec l'option --defaults-file=nom_fichier et/ou un fichier supplémentaire grâce à --defaults-extra-file=nom_fichier.
Le fichier de configuration a la forme suivante :
[mysqld]
param1=valeur1
param2=valeur2
param3
...
[client]
param4=valeur4
param5
...
[mysql]
param6=valeur6
...
[mysqldump]
param7
...
[...]
La rubrique [mysqld] (ou [server]) contient les variables et options destinées au serveur.
On place dans [client] les éléments communs à tous les exécutables et utilitaires clients MySQL, mais il est aussi possible de paramétrer un programme client (mysql, mysqldump, etc.) de manière individuelle en spécifiant son nom entre crochets.

Pour avoir une idée des différents paramétrages possibles, inspirez-vous des fichiers d'exemples my-small, my-medium, my-large et my-huge.cnf/.ini que vous trouverez dans le répertoire d'installation de MySQL.


3.2 Réglages de sécurité

La première chose à faire (si vous ne l'avez pas déjà effectué à travers l'utilitaire de configuration sous Windows) est de donner un mot de passe à l'utilisateur root :
mysql> SET PASSWORD FOR root@localhost = PASSWORD('monpasse');
Query OK, 0 rows affected (0.00 sec)

Certains poussent la vigilance jusqu'à changer le nom du user root par un autre moins "détectable" :
mysql> UPDATE mysql.user SET user='nouveau_nom' WHERE user='root';
Query OK, 1 row affected (0.02 sec)
Rows matched: 1  Changed: 1  Warnings: 0
						
mysql> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.00 sec)

Sauf si vous n'avez pas coché la case correspondante dans l'assistant d'installation sous Windows, deux users anonymes sont également présents par défaut. Sous Linux, ils correspondent à la même personne autorisée à se connecter en local (localhost et localhost.localdomain). Sous Windows, l'un est un utilisateur local ayant tous les droits et l'autre un utilisateur distant avec des privilèges sur la base test. Vous pouvez aisément les supprimer :
mysql> DELETE FROM mysql.user WHERE user='';
Query OK, 2 rows affected (0.02 sec)
								
mysql> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.00 sec)

Il peut également s'avérer judicieux de bloquer les connexions venant de l'extérieur (en particulier si les applications amenées à se connecter à MySQL s'exécutent uniquement en local sur la même machine). Pour ce faire, rajoutez à votre fichier de configuration dans la section [mysqld] le paramètre skip-networking.

Puis sous Windows, ajoutez dans la même section enable-named-pipes pour activer les canaux nommés qui sont une alternative aux connexions TCP/IP.
Sous Linux, placez le paramètre socket=/tmp/mysql.sock (ou un autre socket) à la fois sous [mysqld] et [client] dans le fichier de configuration. L'utilisateur exécutant le serveur MySQL doit avoir les droits nécessaires pour créer le fichier /tmp/mysql.sock.

Vous avez aussi la possibilité de laisser les connexions TCP/IP activées tout en forçant le serveur à écouter seulement en local (paramètre bind-address 127.0.0.1), ce qui a grosso modo le même effet.


3.3 Mode SQL

Le mode SQL est un paramétrage permettant de régler le degré de tolérance du serveur MySQL envers la syntaxe et les valeurs qui lui sont envoyées.
Vous pouvez l'afficher avec la commande SELECT @@SQL_MODE, et le modifier au démarrage du serveur (--sql-mode= " modes "), dans le fichier de configuration (sql_mode= " modes ") ou à la volée (SET GLOBAL sql_mode= " modes ").

" modes " correspond à une série de paramètres séparés par des virgules. Voici quelques-uns des plus importants :

  • STRICT_ALL_TABLES : en cas de valeur manquante ou invalide (ex : INSERT où on ne précise pas la valeur d'une colonne NOT NULL qui n'a pas de valeur par défaut), le comportement par défaut de MySQL est de renvoyer un simple warning et d'effectuer quand même l'opération. Cette option génère une erreur et fait avorter la requête à la place.
  • STRICT_TRANS_TABLES : idem sauf pour les tables non transactionnelles lorsque la valeur invalide se trouve dans la deuxième ligne pour une requête affectant plusieurs lignes.
  • ERROR_FOR_DIVISION_BY_ZERO : retourne une erreur au lieu d'un warning en cas de tentative de division par zéro.
  • IGNORE_SPACE : autorise la présence d'un espace entre le nom d'une fonction et la parenthèse ouvrante (ex : CURDATE () au lieu de CURDATE()).
  • NO_ZERO_DATE : interdit la valeur '0000-00-00' dans les colonnes de type date.
  • ...
Par ailleurs il existe des alias qui résument un ensemble de modes dans un but de compatibilité avec une norme ou un autre système de gestion de bases de données : ANSI, ORACLE, POSTGRESQL, TRADITIONAL, etc.
Ils s'utilisent comme des modes normaux en termes de syntaxe.

Vous trouverez une description précise de tous les modes SQL dans le manuel MySQL.


3.4 Paramétrer InnoDB

Contrairement au moteur de stockage classique MyISAM, le fonctionnement du moteur transactionnel InnoDB nécessite quelques explications et éventuellement un paramétrage.

Si l'option skip_innodb n'est pas activée, le moteur InnoDB devrait être disponible. Pour vous en assurer, exécutez la commande suivante :
mysql> show variables like 'have_innodb';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| have_innodb   | YES   |
+---------------+-------+
1 row in set (0.33 sec)

Alors que pour les tables MyISAM les index et les données sont dans deux fichiers séparés (nom_table.myi et nom_table.myd), avec InnoDB tout est rassemblé dans un seul fichier appelé tablespace. Par défaut, il s'agit de ibdata1 dans le répertoire de données de MySQL ou dans C:\MySQL Datafiles si vous avez utilisé l'assistant de configuration Windows.
Le répertoire où se trouve le ou les fichiers tablespace peut être spécifié grâce à l'option innodb_data_home_dir.

Si on ne précise rien, le fichier ibdata1 fait 10 Mo à l'origine et s'étend de façon automatique lorsque les données dépassent cette taille.
Mais on peut également paramétrer de façon entièrement manuelle les fichiers tablespace en plaçant dans le fichier de configuration de MySQL une variable innodb_data_file_path formatée comme suit :
nom_ fichier1:taille[:autoextend];nom_ fichier2:taille[:autoextend] ; ...

Par exemple, pour spécifier qu'on veut dans le répertoire /usr/innodb/data deux fichiers de données nommés ibdata1 et ibdata2, le premier d'une longueur fixe de 50 Mo et le second de 100 Mo auto-extensible, on mettra dans my.cnf :
[mysqld]
innodb_data_home_dir = /usr/innodb/data
innodb_data_file_path=ibdata1:50M;ibdata2:100M:autoextend

Ceci a un gros inconvénient en termes de taille. En effet, les fichiers tablespace prennent tout l'espace disque qui leur est alloué sans se limiter à la taille des données qu'ils contiennent réellement. Par conséquent, ce n'est pas parce que vous supprimez des données des tables InnoDB que l'espace disque occupé va se réduire.

Pour plus de commodité, il est possible de modifier le comportement du moteur en précisant qu'on veut un fichier tablespace par table. Il faut utiliser pour cela le paramètre innodb_file_per_table.
Les données et index des tables InnoDB créées à partir du prochain redémarrage du serveur seront alors placés soit dans leur propre fichier au sein du répertoire data/nom_base, soit au même endroit que les données MyISAM.
Ainsi, supprimer une table aura pour conséquence d'effacer le fichier correspondant ce qui libèrera autant d'espace ; de plus on pourra déplacer ou sauvegarder chaque table individuellement.

InnoDB utilise également des fichiers logs afin de tenir un journal des transactions. Par défaut, le moteur fonctionne alternativement avec 2 logs nommés ib_logfile0 et ib_logfile1 dans le répertoire data.
Ce répertoire peut être paramétré avec la variable innodb_log_group_home_dir et le nombre de fichiers dépend de l'option innodb_log_files_in_group. Il est recommandé de dimensionner les fichiers logs (innodb_log_file_size) à une valeur élevée, idéalement 25 à 100 % de la taille de la mémoire tampon InnoDB (innodb_buffer_pool_size).
Par ailleurs, il peut être intéressant en termes de performances de placer les fichiers journaux sur un disque différent de celui où se trouvent les données.
Voici l'exemple de fichier de configuration décrit précédemment auquel on a rajouté des paramètres concernant les logs :
[mysqld]
innodb_buffer_pool_size=100M
									
innodb_data_home_dir = /usr/innodb/data
innodb_data_file_path=ibdata1:50M;ibdata2:100M:autoextend
									
innodb_log_group_home_dir = /repertoire_autre_disque/innodb/logs
innodb_log_files_in_group = 2
innodb_log_file_size=50M

Enfin, si vous n'avez pas ou plus besoin du moteur InnoDB, vous pouvez toujours le couper avec l'option skip-innodb.

Pour plus de précisions, je vous renvoie au tutoriel d'Olivier Miossec sur InnoDB.


Conclusion

Votre serveur est maintenant fin prêt.

Il ne reste plus qu'à vous y connecter avec le client mysql en ligne de commande (mysql -u root -p depuis l'invite MS-DOS ou une console Linux) ou en installant un des nombreux clients graphiques disponibles pour MySQL.



Merci à pcaboche et Arkham46 pour la relecture de cet article.



Valid XHTML 1.1!Valid CSS!

Copyright © Maximilian. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts. Cette page est déposée à la SACD.

Responsable bénévole de la rubrique MySql : Jean-marc Richon - Contacter par EMail :
Vos questions techniques : forum d'entraide MySql - Publiez vos articles, tutoriels et cours
et rejoignez-nous dans l'équipe de rédaction du club d'entraide des développeurs francophones
Nous contacter - Copyright © 2000-2008 www.developpez.com - Legal informations.