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 pas à pas à partir des sources officielles.
Logiciel utilisé : MySQL 5.1.44
Système d'exploitation : Debian 5.0, Linux 2.6.32
Note : les méthodes d'installations ayant évolué à partir de MySQL 5.5, pour l'installation de MySQL 5.5 se référer plutôt à l'article suivant : http://blog.moncoindunet.fr/linux/installer-un-serveur-mysql-5-5-sur-linux/
1 – Installation du serveur MySQL
1.1 – Pré-requis
Des outils de compilation : make et g++. Etant sur Debian, j'utilise apt-get pour les récupérer
$ apt-get install g++ make
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 :
$ wget http://dev.mysql.com/get/Downloads/MySQL-5.1/mysql-5.1.44.tar.gz/from/ftp://mir1.ovh.net/ftp.mysql.com/
Avant l'installation il faut également créer un utilisateur mysql sur la machine :
$ groupadd mysql
$ useradd -g mysql mysql
1.2 – Compilation et installation
Une fois le package de MySQL récupéré on le décompresse dans le répertoire /usr/local/src :
$ tar xvzf mysql-5.1.44.tar.gz -C /usr/local/src
$ cd /usr/local/src/mysql-5.1.44/
On peut maintenant configurer, compiler et installer en spécifiant deux options :
- --prefix : chemin d'installation
- --datarootdir : répertoire de données, où sont notamment stockées les pages de man
$ ./configure --prefix=/usr/local/mysql --datarootdir=/usr/local/share
$ make && make install
Voilà, c'est installé !
1.3 – Modification du 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 "\n# +MySQL\nPATH=$PATH:/usr/local/mysql/bin" >> /etc/profile
$ . /etc/profile
2 – Configuration du serveur MySQL
2.1 – 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
2.2 – Initialisation de MySQL
On commence par se rendre dans le répertoire MySQL et rendre l'utilisateur mysql propriétaire des répertoires :
$ 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 :
$ bin/mysql_install_db --user=mysql
2.3 – 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 l'es 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 :
$ bin/mysql_secure_installation
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: var
3 – Premier démarrage
3.1 – 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/src/mysql-5.1.44/support-files/mysql.server /etc/init.d/mysqld
$ chmod u+x /etc/init.d/mysqld
$ update-rc.d mysqld defaults
3.2 – Démarrage & tests
On peut maintenant démarrer le serveur MySQL:
$ bin/mysqld_safe --user=mysql &
Et faire quelques tests !
Par exemple, afficher la version :
$ bin/mysqladmin version
bin/mysqladmin Ver 8.42 Distrib 5.1.44, for pc-linux-gnu on i686
Copyright 2000-2008 MySQL AB, 2008 Sun Microsystems, Inc.
This software comes with ABSOLUTELY NO WARRANTY. This is free software,
and you are welcome to modify and redistribute it under the GPL license
Server version 5.1.44-log
Protocol version 10
Connection Localhost via UNIX socket
UNIX socket /tmp/mysql.sock
Uptime: 4 min 18 sec
Threads: 1 Questions: 1 Slow queries: 0 Opens: 15 Flush tables: 1 Open tables: 8 Queries per second avg: 0.3
Se connecter au mode console du serveur, en root :
$ bin/mysql -u root
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 1
Server version: 5.1.44-log Source distribution
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
Afficher les bases de données :
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
+--------------------+
2 rows in set (0,00 sec)
Sortir du mode console du serveur :
mysql> exit;
4 – 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
Leave a Reply