MySQL : démarrer rapidement un serveur dans n’importe quelle version

de | 2016-10-16

Peut-être aurez-vous  un jour besoin de tester  une version de MySQL afin de vérifier un comportement, une syntaxe ou une régression.

Comment pouvoir le faire le plus rapidement possible, et le plus simplement possible, c’est dire sans demander la permission à qui que ce soit (1) ?

Voici comment procéder…

Sachez tout d’abord que MySQL est particulièrement conciliante : avec un minimum de configuration, n’importe quel utilisateur peut démarrer son propre serveur. Pas de fichiers en dehors de vos répertoires, pas de privilèges spéciaux.

La méthode ci-dessous est donnée avec MariaDB, pour le côté jeune et frais; elle est identique avec MySQL. Nous utilisons une machine sous Linux Fedora mais n’importe quelle distribution fera l’affaire pour peu que l’architecture corresponde.

Pour les malheureux sous Windows, il existe des versions portables de MySQL. Qu’ils jettent un œil rempli de larmes à XAMPP (http://portableapps.com/apps/development/xampp) mais qu’ils sachent que récupérer une version ancienne est plus compliqué. Hélas, tout le monde n’a pas la chance d’être sous Linux.

Fin de la parenthèse. Au travail.

– Récupérer et extraire les binaires (ici : Linux x86_64) depuis le site officiel : https://downloads.mariadb.org/

– Extraire l’archive dans le répertoire souhaité et y entrer :

tar -xvf mariadb-10.1.14-linux-x86_64.tar.gz
cd mariadb-10.1.14-linux-x86_64

– Créer un fichier my.cnf pour contourner les points de blocage qui demandent par défaut d’être root : pid, socket…
Exemple de fichier :


$ cat my.cnf
[mysqld]
datadir = '/répertoire/des/binaires/tmp'
lc-messages-dir = '/répertoire/des/binaires/share'
log-error = '/répertoire/des/binaires/tmp/my.log'
pid-file = '/répertoire/des/binaires/tmp/my.pid'
socket='/répertoire/des/binaires/tmp/my.sock'

Sans cela, il tentera d’écrire dans /var et un utilisateur standard a rarement le droit le faire.

– Initialiser le répertoire de données :
La construction proprement dite du serveur. Rien de spécial par rapport à une installation standard. Faites bien attention à indiquer le chemin relatif des commandes pour ne pas risquer d’en appeler une de votre environnement (Exemple courant : appeler le client MySQL et tomber sur celui installé par un paquet, dans /usr/bin, et non celui de votre archive.).

Note: la documentation de MySQL 5.7 conseille d’utiliser « bin/mysqld –initialize » au lieu de « script/mysql_init_db » car cette dernière va disparaître.
Cependant, cela ne fonctionnait pas dans mon cas. Sans doute de la configuration supplémentaire du fait de l’appel à mysqld. Il faut faire vite donc retour à l’ancienne méthode :
./scripts/mysql_install_db –defaults-extra-file=my.cnf

4) lancement du sgbd :
nohup ./bin/mysqld_safe –datadir=’/répertoire/des/binaires/tmp’

5) connexion :
./bin/mysql –socket=/répertoire/des/binaires/tmp/my.sock -u root

A partir de là, vous pouvez tester à loisir. Une fois terminé, il suffit d’arrêter le processus mysqld et de supprimer le répertoire.

Il existe une autre méthode très pratique pour tester MySQL : MySQL Sandbox (http://mysqlsandbox.net/). Très souple et très puissant mais demandant du temps d’apprentissage, il fera l’objet d’un article plus tard car il sortait du cadre de cet article.

(1) Pas de cachotteries entre nous. Nous connaissons tous la formule dite “De La Charette” :
Durée nécessaire à votre opération (en seconde) =
nombre de personnes requises x nombre d’équipes x nombre de managers impliqués.