Voici une astuce pour créer facilement plusieurs instances indépendantes de MySQL sur un serveur Windows.
On peut ainsi faire cohabiter plusieurs serveurs avec plusieurs versions différentes.
Le multi-instance de MySQL est très utile chez nous, sur notre serveur de développement Web.
En effet, nous avons plusieurs serveurs dédié en prod avec des versions différentes de MySQL (4.1, 5.1).
Pour permettre le développement sur une unique machine et simuler au mieux ces différentes instances physiquement séparées en prod, j'ai mis en place une solution multi-instance.
Le seul inconvénient est qu'il faudra assigner un port différent à chaque instance (3306, 3307,...)
Remarque :
Par la suite, nous ferons appel à l'exécutable principal de MySQL qui est différent selon la version.
Voici les chemins par défaut de ces exécutables :
MySQL 4.1 : C:\Program Files\MySQL\MySQL Server 4.1\bin\mysqld-nt.exe
MySQL 5.1 : C:\Program Files\MySQL\MySQL Server 5.1\bin\mysqld.exe
Les exemples données par la suite sont basés sur MySQL 5.1 mais il suffit d'adapter les chemins.
Configuration des instances
- Commencez par installer normalement les versions de MySQL que vous souhaitez utiliser. Par défaut, le service correspondant est créé à l'installation.
-
Désinstaller tous les services MySQL existant à l'aide de la commande suivante :
mysqld.exe --remove <nom_du_service>
Remarque : Le nom du service est affiché dans les propriétés du service :
-
Créez sur le disque l'arborescence suivante :
Nous avons donc un dossier par instance et des sous-dossiers pour les données, les fichiers temporaires,... - Dans chaque dossier d'instance, créez un fichier my.ini (que vous pourrez reprendre du modèle my.ini dans le dossier d'install de MySQL).
-
Paramétrez ensuite ce fichier my.ini en modifiant notamment :
- le port de l'instance (3306, 3307,...)
- les chemins des dossiers data, temp, logs, innodb,... -
Créez le service MySQL correspondant à l'instance :
mysqld.exe --install <nom_de_l'instance> --defaults-file=<chemin_vers_my.ini_de_l'instance>.
Par ex, pour l'instance MySQL51_site1, cela nous donnera la commande suivante :
mysqld.exe --install MySQL51_site1 --defaults-file=C:\MySQL\MySQL51_site1\my.ini - Lancez le service pour vérifier qu'il n'y ait pas de problème.
Et phpMyAdmin ?
si vous utilisez phpMyAdmin, vous pouvez facilement ajouter plusieurs instances en spécifiant le n° de port correspondant dans le fichier config.inc.php (ex : .
$cfg['Servers'][$i]['host'] = 'localhost';
$cfg['Servers'][$i]['port'] = '3307';
L'inconvénient est que dans la liste des serveurs présentés sur phpMyAdmin, les n° de port ne sont pas forcément très parlant.
Modifiez alors le fichier C:\WINDOWS\system32\drivers\etc\hosts de votre serveur et ajouter les lignes suivantes (une par instance) :
127.0.0.1 <nom_de_l'instance>
Ex : 127.0.0.1 mysql51_site1
Ensuite, dans le fichier config.inc.php, remplacez localhost par le nom de l'instance :
$cfg['Servers'][$i]['host'] = 'mysql51_site1';
$cfg['Servers'][$i]['port'] = '3307';
C'est tout de suite beaucoup plus parlant :-)
Compléments d'informations
Vous pourrez trouver plus de renseignements sur le multi-instance (sous Windows et Linux) sur la doc officielle de MySQL :
http://dev.mysql.com/doc/refman/5.0/fr/multiple-windows-services.html
Commentaires