Comment supprimer un plugin quand le serveur MySQL ne répond plus?
Cette semaine, j'ai voulu aller plus loin dans le monitoring de mes applications PHP en utilisant Pinba. J'ai donc installé le moteur de stockage de Pinba sur mon serveur MySQL avec la commande:
INSTALL PLUGIN pinba SONAME 'libpinba_engine.so';
Puis j'ai redémarré le server MySQL.
Une demi-heure plus tard, j'ai voulu vérifier que l'installation était un succès et que j'avais commencé à collecter des informations. Malheureusement ça ne marche pas à tous les coups et même si j'arrivais à me connecter en ligne de commande à MySQL (enfin au début), je me suis vite rendu compte que je ne pouvais rien faire de plus et que l'ensemble de mes sites étaient HS sauf pour les parties stockées en cache.
En accédant à Munin, j'ai vu que j'avais saturé la RAM, le nombre de connexion MySQL et que les processus PHP n'étaient plus libérés. Bref, un hard reboot me semblait être la seule option.
Après le reboot, le serveur à vite était de nouveau saturé et impossible d'exécuter la commande MySQL pour supprimer le plugin:
UNINSTALL PLUGIN pinba;
Internet n'a pas été d'une grande aide pour trouver une solution, heureusement que le DBA où je travaille connait bien son sujet.
Chaque plugin installé est enregistré dans la table plugin de la base mysql. En théorie, il suffit de modifier la table pour désactiver le plugin.
Avec une installation Debian classique, cette table est contenue dans 3 fichiers sur le disque:
- /var/lib/mysql/mysql/plugin.frm
- /var/lib/mysql/mysql/plugin.MYI
- /var/lib/mysql/mysql/plugin.MYD
J'ai donc remplacé ces 3 fichiers par ceux de mon serveur de dev dont la configuration est parfaitement identique. Si j'avais pu j'aurai commencé par arrêter le serveur MySQL.
Après un autre hard reboot, j'ai pu récupérer un serveur stable. Cela fait 4 jours et je n'ai noté aucune différence avec le comportement du serveur avant l'incident.
En résumé, si votre serveur MySQL est HS à cause d'un plugin, il suffit de remplacer les fichiers de la table plugin, idéalement avec un backup. Et surtout vérifiez sur un serveur de test avant de vous attaquer à la prod, je crois qu'on en le répètera jamais assez.
Ajouter un commentaire