MySQL Utilities

MySQL Utilities c’est quoi ?

C’est un package Open Source fourni par MySQL Oracle, qui regroupe un ensemble de scripts (utilitaires) développés en Python, exécutables en ligne de commande pour aider et faciliter la maintenance et l’administration des serveurs MySQL.
Le package MySQL Utilities est disponible pour différents types d’OS : Windows, OS X et les différentes distributions de Linux.

MySQL Utilities regroupe plusieurs catégories d’outils :
  • Opérations sur les binlog (Binary Log) :
    • Déplacement des binlogs : mysqlbinlogmove
    • Purge des binlogs : mysqlbinlogpurge
    • Rotation des binlogs : mysqlbinlogrotate
  • Opérations sur les bases de données :
    • Comparaison des bases sur le même serveur ou sur deux serveurs différents (comparaison des structures et des données) : mysqldbcompare
    • Copie des bases entre les serveurs ou clonage d’une base sur le même serveur : mysqldbcopy
    • Export des données (metadata et/ou données) : mysqldbexport
    • Import des données (metadata et/ou données) : mysqldbimport
    • Comparaison de la définition des objets : mysqldiff
  • Opérations sur la réplication :
    • Bascule de la réplication (automatic failover) : mysqlfailover
    • Configuration/démarrage de la réplication : mysqlreplicate
    • Gestion de la réplication Multi-Masters : mysqlrplms
    • Administration de la réplication (reset, stop/start, switchover, …) : mysqlrpladmin
    • Vérification des prérequis de la configuration et de statut de la réplication : mysqlrplcheck
    • Vérification des slaves attachés au master, vue globale sous forme de graphe de l’ensemble des serveurs : mysqlrplshow
    • Skip des transactions sur les slaves : mysqlslavetrx
  • Opérations sur le serveur :
    • Cloner une instance complète sur le même serveur : mysqlserverclone
    • Inventorier les instances installées sur le serveur : mysqlsrvinfo
  • Autres opérations :
    • Vérification de l’espace disque occupé par les bases MySQL : mysqldiskusage
    • Lecture des fichiers binaires de la définition des tables (fichiers .frm) : mysqlfrm
    • Inventorier les droits des utilisateurs : mysqlgrants
    • Vérification des index redondants : mysqlindexcheck
    • Vérification et kill des connexions (process) : mysqlprocgrep
    • Récupération de la définition d’un objet d’une base : mysqlmetagrep
    • Clonage des utilisateurs (users) : mysqluserclone
Comment installer MySQL Utilities sous Linux (CentOS/RedHat 7) ?

Comment se connecter à MySQL Utilities ?
  • Pour se connecter à la console MySQL Utilities, il suffit de taper la commande « mysqluc » (MySQL Utilities client)
  • Pour afficher les différents utilitaires (commandes) proposées, taper ‘help utilities
  • Pour afficher l’aide d’utilisation d’une commande, taper : help nom_commande

Comment les utilitaires de MySQL Utilities se connectent à l’instance MySQL ?

Les utilitaires de MySQL Utilities se connectent à l’instance MySQL avec une chaîne de connexion de type  :  –server=<user>[:<password>]@<host>[:<port>][:< socket>]
Mais il y a la possibilité d’éviter de saisir toute cette chaîne de connexion à chaque fois et notamment d’éviter de saisir le mot de passe en clair. Pour cela, on peut utiliser le login-path (la chaîne de connexion est stockée et cryptée dans un fichier qui s’appelle ‘.mylogin.cnf’ ).

Comment créer le login-path ?

mysql_config_editor set –login-path=Nom_loginPath  –host=${HOST} –user=${USER} –port=${PORT} –socket=${Socket} –password
Exemple : mysql_config_editor set –login-path=mytest –host=localhost –user=root –port=3306 –socket=/var/lib/mysql/mysql_MYPTEST02.sock –password
Pour afficher le contenu du fichier, taper : mysql_config_editor print –login-path=Nom_loginPath
Exemple : mysql_config_editor print –login-path=mytest
Exemple d’utilisation d’un utilitaire avec le login-path (mytest) :  mysqlserverinfo –server=mytest –format=vertical

il y a aussi la possibilité d’utiliser une variable d’environnement sous la forme :
Nom_var= « ${USER}:${PASS}@localhost:${PORT}:${Socket} »
Exemple :
mylogin= »${SAUSER}:${SAPASS}@localhost:${PORTSRV}:${MySocket} »
export  ysrv=${mylogin}
Il suffit ensuite de charger la variable(en se connectant à l’environnement mysql par exemple), et de l’utiliser dans les différentes commandes.
Exemple : mysqlserverinfo –server=$ysrv –format=vertical

Quelques cas pratiques d’utilisation :

  • Afficher l’espace disque occupé par une instance MySQL : mysqldiskusage –server=mytest -all

  • Kill de connexions :
    • killer toutes les sessions en statut « sleep » depuis 10s : mysqlprocgrep –server=mytest –match-command=sleep –age=10s –kill-connection
    • killer toutes les session d’un user (john): mysqlprocgrep –server=$ysrv –match-user=john –kill-connection

  • Lister les privileges:
    • Lister tous les privilèges accordés aux différents utilisateurs sur une ou plusieurs databases : mysqlgrants –server=mytest –show=USER_GRANTS mysql

  • Copie d’une base :
    • Copie de la base « test » sous le nom « test2 » sur le même serveur : mysqldbcopy –source=mytest –destination=mytest test:test2

  • Export/Import des données :
    • Export complet de la base « test » (metadata + données) : mysqldbexport –server=mytest –export=both test –output-file=/tmp/export_test_db.sql

  • Importation de la base : mysqldbimport –server=mytest –import=both –drop-first /tmp/export_test_db.sql

  • Purge des binlogs :
    • Purge de tous les binlogs de l’instance : mysqlbinlogpurge –server=mytest

  • ….