J'ai besoin d'un moyen efficace pour déconnecter tous les clients avec un nom d'utilisateur donné de MySQL. J'ai pensé à changer le mot de passe des utilisateurs mais je pense que cela n'est vérifié que lorsque la connexion est établie.
Des idées?
Vous pouvez utiliser la méthode "SQL to SQL" ci-dessous (passez simplement des options de connexion supplémentaires au client mysql si nécessaire):
shell> mysql -NBe "SELECT CONCAT('KILL ', id, ';') FROM information_schema.processlist WHERE user = 'some_username';" | mysql -vv
Remarque: Cela fonctionne avec MySQL 5.1 et 5.5. Cela devrait être implémenté différemment pour les anciennes versions de MySQL car information_schema n'a pas la table processlist.
Options utilisées:
-N means that you do not want to get column names back.
-B puts it into batch mode, so that you do not get MySQL's table layout.
-e executes the following statement.
-v controls the verbosity, could be used up to three times.
Explication de son fonctionnement:
Tout d'abord, les instructions KILL sont générées avec les ID.
shell> mysql -NBe "SELECT CONCAT('KILL ', id, ';') FROM information_schema.processlist WHERE user = 'some_username';"
Exemple de sortie:
KILL 1061;
KILL 1059;
KILL 1057;
Ensuite, ces instructions sont exécutées.
shell> mysql -NBe "SELECT CONCAT('KILL ', id, ';') FROM information_schema.processlist WHERE user = 'some_username';" | mysql -vv
Exemple de sortie:
--------------
KILL 1061
--------------
Query OK, 0 rows affected
--------------
KILL 1059
--------------
Query OK, 0 rows affected
--------------
KILL 1057
--------------
Query OK, 0 rows affected
Sur Linux, vous pouvez utiliser quelque chose comme ça.
Mon approche est très simple. Dans la première étape, nous envoyons «show processlist» à notre base de données. Le résultat est une liste avec tous les utilisateurs connectés. Dans l'étape suivante, nous utilisons la bonne vieille commande grep pour filtrer les noms d'utilisateur. Avec awk, nous générons la «commande kill». Dans la dernière étape, nous envoyons toutes les commandes kill à mysql. Tout doit être concaténé avec le | symbole.
la source