Je me connecte à mysql
à partir de mon shell Linux. De temps en temps, je lance une requête SELECT
qui est trop grosse. Il imprime et imprime et je sais déjà que ce n’est pas ce que je voulais dire. Je voudrais arrêter la requête.
Frapper Ctrl+C
(plusieurs fois) tue mysql
complètement et me ramène à Shell, je dois donc me reconnecter.
Est-il possible d'arrêter une requête sans tuer la mysql
elle-même?
mysql>show processlist;
mysql> kill "number from first col";
Juste pour ajouter
KILL QUERY **Id**
où Id est l'identifiant de connexion de show processlist
est plus préférable si vous ne voulez pas tuer la connexion généralement lorsque vous exécutez à partir d'une application.
Pour plus de détails, vous pouvez lire mysql doc here
Connectez-vous à mysql
mysql -uusername -p -hhostname
afficher la liste complète des processus:
mysql> show full processlist;
+---------+--------+-------------------+---------+---------+------+-------+------------------+
| Id | User | Host | db | Command | Time | State | Info |
+---------+--------+-------------------+---------+---------+------+-------+------------------+
| 9255451 | logreg | dmin001.ops:37651 | logdata | Query | 0 | NULL | show processlist |
+---------+--------+-------------------+---------+---------+------+-------+------------------+
Tuez la requête spécifique. Ici id = 9255451
mysql> kill 9255451;
Si vous obtenez l'autorisation refusée, essayez ce SQL:
CALL mysql.rds_kill(9255451)
Utilisez mysqladmin
pour tuer la requête qui s’emballe:
Exécutez les commandes suivantes:
mysqladmin -uusername -ppassword pr
Ensuite, notez l'identifiant du processus.
mysqladmin -uusername -ppassword kill pid
La requête d'emballement ne devrait plus consommer de ressources.
Si vous avez mysqladmin
disponible, vous pouvez obtenir la liste des requêtes avec:
> mysqladmin -uUSERNAME -pPASSWORD pr
+-----+------+-----------------+--------+---------+------+--------------+------------------+
| Id | User | Host | db | Command | Time | State | Info |
+-----+------+-----------------+--------+---------+------+--------------+------------------+
| 137 | beet | localhost:53535 | people | Query | 292 | Sending data | DELETE FROM |
| 145 | root | localhost:55745 | | Query | 0 | | show processlist |
+-----+------+-----------------+--------+---------+------+--------------+------------------+
Ensuite, vous pouvez arrêter le processus mysql qui héberge la requête longue:
> mysqladmin -uUSERNAME -pPASSWORD kill 137
Vous devez exécuter la commande suivante pour tuer le processus.
> show processlist;
> kill query processId;
Le paramètre Query spécifie que nous devons arrêter le processus de commande de requête.
La syntaxe pour tuer le processus comme suit
KILL [CONNEXION | QUERY] processlist_id
S'il vous plaît référez-vous ce lien pour plus d'informations.
L’auteur de cette question mentionne que ce n’est généralement après l’impression par MySQL qu’il réalise que la mauvaise requête a été exécutée. Comme indiqué, dans ce cas, Ctrl-C
n’aide pas. Cependant, j’ai remarqué que annulerait la requête en cours - si vous l’attrapiez avant toute sortie est imprimée. Par exemple:
mysql> select * from jos_users, jos_comprofiler;
MySQL s’emploie à générer le produit cartésien des deux tables ci-dessus et vous remarquerez bientôt que MySQL n’a imprimé aucune sortie à l’écran (l’état du processus est Envoi de données ) donc vous tapez Ctrl-C
:
Ctrl-C -- sending "KILL QUERY 113240" to server ...
Ctrl-C -- query aborted.
ERROR 1317 (70100): Query execution was interrupted
Ctrl-C
peut également être utilisé pour arrêter une requête UPDATE
.