Installer un serveur MySQL sous Linux

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

1 pensée sur “Installer un serveur MySQL sous Linux”

Laisser un commentaire