Plusieurs instances de MySQL sur un serveur Windows

Classé dans : Bases de données | 2 commentaires

mardi 26 janvier 2010

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

Le 17 juin 2010 Fred a dit :

J'ai trouvé, depuis, une méthode plus simple pour configurer phpMyAdmin :

Il suffit d'ajouter la ligne suivante sur chaque instance pour lui donner un nom explicite :

$cfg['Servers'][$i]['verbose'] = 'instance sur 3306';

Le 16 mai 2012 sailor5454 a dit :

Bonjour,
je réalise des réplications afin de dialoguer entre un serveur et des pc mobiles.
Ces PC mobiles ne sont pas toujours connectés à internet et dispose chacun d'une base nommée différemment.
J'utilise la réplication pour remonter les données.
HORS, un slave ne peut pas se connecter à plusieurs master. Donc, je suis entrain d'installer plusieurs services MyQSL (1 par PC mobile + 1 principal)
Je n'arrive pas à lancer le service créé EN PLUS du service initialement créé. En gros, je n'arrive pas à lancer plusieurs services en même temps.

Ma question : que faut il dupliquer exactement pour que ces services soient autonomes et puissent se lancer en simultané? Tout le dossier bin/mysqlx.x.x ?

J'ai aujourd'hui créé le service en appelant le mysqld du dossier d'install initiale de wamp/bin/mysql/mysql5.5.16

Fil RSS des commentaires de cet article