MySQL est un SGBDR (Système de Gestion de Base de Données Relationnelles). Il est disponible en version open source (utilisée ici) et commerciale. Concurrent direct d'Oracle ou de Microsoft SQL Server, il est très utilisé pour des applications Web, notamment en association avec les serveurs Web Apache & Tomcat ainsi que les langages PHP & Java.
Objectif : installer un serveur MySQL 5.5 pas à pas à partir des sources officielles.
Logiciel utilisé : MySQL 5.5.8
Système d'exploitation : Debian 5.0, Linux 2.6.34
Note : les méthodes d'installations ayant évolué à partir de MySQL 5.5, pour l'installation de MySQL 5.1 se référer plutôt à l'article suivant : http://blog.moncoindunet.fr/linux/mysql-linux/installer-un-serveur-mysql-sur-linux/
1 – Pré-requis
Des outils de compilation : make, cmake et g++. L'application bison est également utilisée. Etant sur Debian, j'utilise apt-get pour les récupérer
$ apt-get install g++ make cmake bison
Je vous invite à vous rendre sur cette page pour récupérer le lien de la dernière version stable de MySQL : http://dev.mysql.com/downloads/mysql/#downloads
Et on récupère le package qui va bien :
$ cd ~ $ wget -O mysql-5.5.8.tar.gz http://dev.mysql.com/get/Downloads/MySQL-5.5/mysql-5.5.8.tar.gz/from/http://mirrors.ircam.fr/pub/mysql/
Avant l'installation il faut également créer un utilisateur mysql sur la machine :
$ groupadd mysql
$ useradd -r -g mysql -c 'mysql user' mysql
2 – Vérifier le package
Avant d'aller plus loin, il faut s'assurer que d'une part le package n'est pas altéré, et d'autre part qu'il est authentique, c'est à dire qu'il n'a pas été détourné par un tiers.
Nous utiliserons deux outils pour cela : md5sum pour l'intégrité et gnupg pour l'authenticité.
2.1 – Intégrité
L'intégrité du package se vérifie grâce au programme md5sum, qui va comparer le hash MD5 du package avec le hash MD5 récupéré sur le site de MySQL.
$ md5sum mysql-5.5.8.tar.gz 42e866302b61f5e213afd33e04677017 mysql-5.5.8.tar.gz
Le résultat est à comparer avec la chaîne de caractères MD5 disponible sous le lien Download correspondant au package téléchargé.
2.2 – Authenticité
L'authenticité du package se vérifie grâce au programme gnupg, qui va vérifier la signature du package avec la clé publique présente sur le site de MySQL.
La signature du package est disponible via le lien Signature présent sous le lien Download correspondant au package téléchargé.
$ vi mysql-5.5.8.tar.gz.asc
Y mettre le contenu présent dans le lien Signaure.
Quand à la clé publique MySQL, elle est disponible ici (avec le fond grisé) : http://dev.mysql.com/doc/refman/5.5/en/checking-gpg-signature.html
$ vi mysql_pubkey.asc
Y mettre le contenu de la clé publique MySQL.
On importe ensuite la clé et on vérifie le package :
$ gpg --import mysql_pubkey.asc gpg: clé 5072E1F5: clé publique « MySQL Package signing key (www.mysql.com) <build@mysql.com> » importée gpg: Quantité totale traitée: 1 gpg: importée: 1 gpg: aucune clé de confiance ultime n'a été trouvée $ gpg --verify mysql-5.5.8.tar.gz.asc mysql-5.5.8.tar.gz gpg: Signature faite le mar 07 déc 2010 10:43:49 CET avec la clé DSA ID 5072E1F5 gpg: Bonne signature de « MySQL Package signing key (www.mysql.com) <build@mysql.com> » gpg: ATTENTION: Cette clé n'est pas certifiée avec une signature de confiance ! gpg: Rien ne dit que la signature appartient à son propriétaire. Empreinte de clé principale: A4A9 4068 76FC BD3C 4567 70C8 8C71 8D3B 5072 E1F5
Le "ATTENTION" indique simplement que la clé utlisée n'est pas certifiée par un tiers de confiance. Si vous n'avez pas confiance, vous pouvez toujours contacter la personne par téléphone pour s'assurer avec elle que vous possédez bien sa clé … (sisi !)
3 – Compiler et installer
Une fois le package de MySQL récupéré et vérifié on le décompresse dans le répertoire /usr/local/src :
$ tar xvzf mysql-5.5.8.tar.gz -C /usr/local/src
$ cd /usr/local/src/mysql-5.5.8/
On peut maintenant configurer, compiler et installer
$ cmake .
$ make
$ make install
Voilà, c'est installé !
4 – Modifier le PATH
Afin de pouvoir utiliser les commandes fournies par MySQL (comme mysql) sans avoir à retaper toute l'arborescence, nous allons modifier la variable PATH des utilisateurs :
$ echo -e "mysql=/usr/local/mysql/bin\nPATH=\$PATH:\$mysql" >> /etc/profile $ . /etc/profile
5 – Configurer le serveur MySQL
5.1 – Initialisation de MySQL
On commence par se rendre dans le répertoire MySQL et rendre l'utilisateur mysql propriétaire des répertoires de l'application :
$ cd /usr/local/mysql/
$ chown -R mysql:mysql .
Il faut maintenant créer le répertoire de données et initialiser les tables de privilèges. Auparavant, il faut donner les droits à l'utilisateur mysql d'écrire dans le répertoire /tmp :
$ chmod 777 /tmp
$ scripts/mysql_install_db --user=mysql
Les répertoires MySQL n'ont pas besoin d'être tous la propriété de l'utilisateur mysql. Seul le répertoire de données le doit :
$ chown -R root: .
$ chown -R mysql: data
5.2 – Fichier de configuration
Le package fourni de base cinq fichiers de configuration, adaptés à diverses typologies d'environnement :
- my-huge.cnf : pour les gros systèmes disposant de 1 ou 2 Go de RAM et qui font tourner principalement MySQL
- my-innodb-heavy-4G.cnf : pour les gros systèmes possédant 4 Go de RAM qui font tourner principalement MySQL avec uniquement des tables InnoDB et qui exécute des requêtes complexes avec peu de connexions
- my-large.cnf : pour les gros systèmes disposant de 512 Mo de RAM et qui font tourner principalement MySQL
- my-medium.cnf : pour les systèmes avec peu de mémoire (32 ou 64 Mo de RAM) qui font tourner principalement MySQL, ou les systèmes avec plus de 128 Mo de RAM où MySQL tournent avec d'autres programmes (comme un serveur Web)
- my-small.cnf : pour les systèmes disposant de peu de mémoire (< 64Mo de RAM) où MySQL est utilisé uniquement de temps en temps et où il est important qu'il ne prenne pas toutes les ressources
On choisira ici le fichier my-medium.cnf que l'on copiera dans l'emplacement prévu à cet effet :
$ cp support-files/my-medium.cnf /etc/my.cnf
6 – Démarrer et tester
6.1 – Démarrage & tests
On peut maintenant démarrer le serveur MySQL:
$ mysqld_safe --user=mysql &
Et faire quelques tests !
Par exemple, afficher la version :
$ mysqladmin version mysqladmin Ver 8.42 Distrib 5.5.8, for Linux on i686 Copyright (c) 2000, 2010, Oracle and/or its affiliates. All rights reserved.
Se connecter au mode console du serveur, en root :
$ mysql -u root Welcome to the MySQL monitor. Commands end with ; or \g. ... mysql>
Afficher les bases de données :
mysql> show databases; +--------------------+ | Database | +--------------------+ | information_schema | | mysql | | performance_schema | | test | +--------------------+
Sortir du mode console du serveur :
mysql> exit
6.2 – Démarrage automatique
Le package MySQL fournit directement un script permettant l'arrêt/démarrage automatique du serveur. On le place donc dans /etc/init.d et on crée les liens qui vont bien via update-rc.d :
$ cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysqld
$ chmod u+x /etc/init.d/mysqld
$ update-rc.d mysqld defaults
Adding system startup for /etc/init.d/mysqld ...
7 – Sécurisation
Après l'installation on peut (et on devrait !) exécuter un script fourni qui va permettre d'améliorer la sécurité du serveur en supprimant des choses inutiles et potentiellement dangereuses :
- mettre un mot de passe à l'utilisateur root de MySQL (évidemment !)
- faire que l'utilisateur root MySQL ne puisse se connecter qu'en local (pas de connexions distantes)
- supprimer les utilisateurs anonymes
- supprimer la base de test
On lance donc ce script et on réponds à chacune des questions correspondantes aux points énumérés ci-dessus :
$ mysql_secure_installation
8 – Problèmes & solutions
Message lors du make :
../depcomp: line 571: exec: g++: not found
make[1]: *** [my_new.o] Erreur 127
make[1]: quittant le répertoire « /usr/local/src/mysql-5.1.44/mysys »
make: *** [all-recursive] Erreur 1
Solution : installer le compilateur g++ (même si gcc est déjà installé) :
$ apt-get install g++
Message lors du make :
../include/my_global.h:1099: error: redeclaration of C++ built-in type ‘bool’
make[1]: *** [my_new.o] Erreur 1
make[1]: quittant le répertoire « /usr/local/src/mysql-5.1.44/mysys »
make: *** [all-recursive] Erreur 1
Solution : la compilation et la construction n'ont pas été faits par le même compilateur (compilation avec gcc et construction avec g++, par exemple). Si le compilateur a changé, il faut recommencer la procédure de compilation (avec les mêmes arguments) :
$ ./configure --prefix=/usr/local/mysql --datarootdir=/usr/local/share
$ make && make install
Message lors du démarrage de MySQL :
$ bin/mysqld_safe --user=mysql & 100228 00:54:00 mysqld_safe Starting mysqld daemon with databases from /usr/local/mysql/var /usr/local/mysql/libexec/mysqld: File './mysql-bin.index' not found (Errcode: 13) 100228 0:54:00 [ERROR] Aborting 100228 0:54:00 [Note] /usr/local/mysql/libexec/mysqld: Shutdown complete
Solution : l'utilisateur qui lance le serveur (par exemple, l'utilisateur mysql) n'est pas propriétaire du répertoire de données (ici, /usr/local/mysql/var). Il faut donc modifier la propriété de ce répertoire :
$ chown -R mysql: /usr/local/mysql/var
Message lors de la commande mysql_install_db :
Installing MySQL system tables... ERROR: 1 Can't create/write to file '/tmp/#sql_1463_0.MYI' (Errcode: 13) 101220 22:53:27 [ERROR] Aborting 101220 22:53:27 [Note] ./bin/mysqld: Shutdown complete
Solution :
- donner temporairement les droits d'écriture dans /tmp à l'utilisateur mysql
- supprimer le répertoire /usr/local/mysql
- relancer l'installation (à partir du make install)
Leave a Reply