Une pincée de tout, un zeste de rien ...

Serveur Mysqld_Multi Instances

53389La vie d’un SI où l’art de ce compliquer l’existence ! Ça tombe bien je suis la pour ça !

Je pose le tableau : « Arrivée d’un nouveau logiciel comptable vendu compatible MYSQL, Paf  MYSQL Windows.  Sur ceux réflexe , je crie hérésie, oh blasphème ! On me répond, naturellement  « Tu fais avec ! Le logiciel a été acheté !  » Contact avec le fournisseur  C’est possible !, lueur d’espoir au fond de mes yeux ! Je test et me rends compte que oui compatible mais SENSIBLE à la Casse (Case_Sensitive). L’ajout d’une variable rend difficile la cohabitation de toutes mes bases !

Je vais donc mettre en place un serveur Mysqld_Multi instances compatible Phpmyadmin !

 I. Mysqld_multi

mysqld_multi  sert à gérer plusieurs serveurs utilisant différents sockets Unix et/ ou ports TCP/IP sur la même machine.
Pour cela, il suffit juste de modifier la structure du fichier my.cnf et disposer de différents répertoires hébergeant vos bases.
Ce programme se substitue au démon mysqld  et peu démarrer une, plusieurs,  voir toutes vos instances.

Dans mon cas je dispose, d’un serveur LAMP valide ! sur une distribution Ubuntu en V13.4. PHPMYADMIN. Toutes les commandes sont effectué en root.

 II. Au Commencement !

Le serveur LAMP est déjà installé, vous possédez une base vierge (ou rempli de base). Normalement celle-ci a été démarré automatiquement, vérifions cela :

 

# ps aux | grep mysqld

MYSQL            On remarque qu’une première base de données nommée « mysql » contenant les privilèges nécessaires à une première utilisation ! Je duplique cette base en autant d’instance que je le désire !

Important, avant toute copie j’ arrête le service mysqld :


# /etc/init.d/mysql stop

           Création d’un nouveau répertoire afin d’hébèrger la seconde instance (Vous pouvez créer autant d’instance que vous souhaitez). Pour cela conserver un plan de nommage simple du type « mysqlX » :


# mkdir /var/lib/mysql1

        Lors de l’installation de mysql, le système crée un utilisateur et un groupe nommés « mysql« . Je donne à cet utilisateur le droit de travailler avec ses répertoires :


# chown -R mysql:mysql /var/lib/mysql1 

Enfin,  je duplique le répertoire contenant les données :


# cp -Rp /var/lib/mysql/mysql /var/lib/mysql1/ 

III. APPARMOR !

Avant de passez au reste de la configuration je dois traiter de APPARMOR  :

Logiciel libre de sécurité pour Linux. Apparmor permet à l’administrateur système d’associer à chaque programme un profil de sécurité qui restreint les capacités de celui-ci.

Si vous faites le choix de modifier la configuration vous pouvez vous référer au docs Ubuntu.

Ubuntu utilise  APPARMOR,  moi non !

# /etc/init.d/apparmor stop
# update-rc.d -f apparmor remove
# apt-get --purge remove apparmor apparmor-utils libapparmor-perl libapparmor1

IV. Configuration de la Seconde Instance :

          Je modifie le fichier de configuration de mysqld  dans /etc/mysql/my.cnf

On va utiliser ce fichier pour la configuration de mysqld_multi, après bien-sur en avoir fait une copie!

Pour éviter les erreurs bêtes, vérifier la présence des répertoires suivant :
  • Répertoire de lancement du programme mysqld_multi (par défaut : /usr/bin)
  • Répertoire de stockage des logs (par défaut : /var/log)
  • Répertoire de stockage des sockets et processus (par défaut : /var/run/mysqld)
  • Répertoire d’installation du serveur (par défaut : /var/lib)
 Copie du fichier de conf :

# cp /etc/mysql/my.cnf   /etc/mysql/my.cnf2
# vi /etc/mysql/my.cnf

Voici le contenu du fichier de configuration my.cnf avec les commentaires :

# configuration principale de mysqld_multi
# l'utilisateur multi_user est necessaire pour que
# le programme puisse arreter les moteurs.
[mysqld_multi] 
mysqld = /usr/bin/mysqld_safe
mysqladmin = /usr/bin/mysqladmin
user       = USER
password   = MDP

# configuration d'un premier serveur
[mysqld1]
# repertoire de stockage des fichiers de base
datadir = /var/lib/mysql
# chemin du socket ( imperativement different pour chaque serveur )
socket = /var/run/mysqld/mysqld.sock
# chemin des processus
pid-file = /var/run/mysqld/mysqld.pid
# utilisateur proprietaire du processus
user = mysql
# port ( imperativement different pour chaque serveur )
port = 3306
log-bin=mysql-bin
# chemin des fichiers de log
log-error=/var/log/mysqld.log

[mysqld2]
datadir=/var/lib/mysql2
socket= /var/run/mysqld/mysqld2.sock
pid-file = /var/run/mysqld/mysqld2.pid
user = mysql
port = 3307
log-bin=mysql-bin
log-error=/var/log/mysqld2.log
# Variable pour la sensibilite a la casse
lower_case_table_names=1


Enregistrer le fichier « :wq! »

V. Comment ça marche !

Dans le vif du sujet, la commande utilisé étant mysqld_multi, je vais vous expliquer simplement comment l’utiliser :


mysqld_multi [options] {start|stop|report} [GNR[,GNR]...]

            mysqld_multi fonctionne avec les paramètres : start, stop, ou report suivi ou non des identifiants de serveurs à démarrer. Pour rappel, ils sont repérés par le numéro placé derrière chaque intitulé [mysqldX] dans la configuration. Dans les 2 premiers cas je peux démarrer mes deux instances,  ou individuellement (exemple 3 et 4).


# /usr/bin/mysqld_multi start 1,2
# /usr/bin/mysqld_multi start 
# /usr/bin/mysqld_multi start 2
# /usr/bin/mysqld_multi start 1

Mes instances sont-elles démarré ?

# /usr/bin/mysqld_multi report

ReportVI. Droits pour arrêter les Instances :

Soit j’utilise le compte root pour arrêter mes bases ou sinon, je  donne à un utilisateur le droit d’arrêter les bases :

# mysql -u root -p
Enter Password : 
mysql > GRANT SHUTDOWN ON *.* TO 'USER'@'localhost' IDENTIFIED BY 'MDP';
mysql > exit

Je peux maintenant arrêter les instances !


# /usr/bin/mysqld_multi stop 

 VII. PhpMyAdmin

Nous ne sommes pas tous des spécialistes « Mysql » , c’est pourquoi j’administre mes bases avec phpmyadmin. Je vais dire à phpmyadmin d’aller scruter sur mes différentes instances, pour cela je vais modifier le fichier de configuration dans /etc/phpmyadmin/config.inc.php :


 # vi /etc/phpmyadmin/config.inc.php

Je vais ensuite ajouter ceci à la fin du fichier de conf,

  • Variable Verbose :  Le nom de votre instance affiché dans PHPmyadmin
  • Variable Host   :      L’adresse IP de votre serveur SQL
  • Port  :                       Port d’écoute de l’instance
  • Socket  :                  Socket configuré dans le fichier my.cnf correspondant à l’instance
  • connect_type         tcp ou socket

 

$i++;
$cfg[‘Servers’][$i][‘verbose’] = ‘Production’;
$cfg[‘Servers’][$i][‘host’] = ‘127.0.0.1’;
$cfg[‘Servers’][$i][‘port’] = ‘3306’;
$cfg[‘Servers’][$i][‘socket’] = ‘/var/run/mysqld/mysqld.sock’;
$cfg[‘Servers’][$i][‘connect_type’] = ‘tcp’;
$cfg[‘Servers’][$i][‘controluser’] = $dbuser;
$cfg[‘Servers’][$i][‘controlpass’] = $dbpass;

$i++;
$cfg[‘Servers’][$i][‘verbose’] = ‘Finances’;
$cfg[‘Servers’][$i][‘host’] = ‘127.0.0.1’;
$cfg[‘Servers’][$i][‘port’] = ‘3307’;
$cfg[‘Servers’][$i][‘socket’] = ‘/var/run/mysqld/mysqld2.sock’;
$cfg[‘Servers’][$i][‘connect_type’] = ‘tcp’;
$cfg[‘Servers’][$i][‘controluser’] = $dbuser;
$cfg[‘Servers’][$i][‘controlpass’] = $dbpass;


Dans votre Phpmyadmin, je peux  désormais entrer dans l’instance de mon choix :Phpmyadmin

Mysqld_multi at startup ?

Rien de plus simple, je supprime le lien symbolique existant et le remplace par mon nouvel outil en deux lignes de commandes :


# rm /etc/init.d/mysql
# ln -s /usr/bin/mysqld_multi   /etc/init.d/mysql

Je reboot, je test , Magique !

 

Laisser un commentaire

PUB

Abonnez-vous à ce blog par e-mail.

Saisissez votre adresse e-mail pour vous abonner à ce blog et recevoir une notification de chaque nouvel article par email.

Rejoignez 1 304 autres abonnés

PUB

Dans toutes les langues !!!