私は自分のLinuxシェルからmysql
に接続します。時々私は大きすぎるSELECT
クエリを実行します。それは印刷して印刷し、私はすでにこれが私が意図したものではないことを知っています。クエリを中止したいのですが。
Ctrl+C
(数回)を押すとmysql
を完全に殺してShellに戻るので、再接続する必要があります。
mysql
自体を殺さずにクエリを停止することは可能ですか?
mysql>show processlist;
mysql> kill "number from first col";
追加するだけ
KILL QUERY **Id**
ここで、Idはshow processlist
からの接続IDです。
通常は、あるアプリケーションから実行しているときに接続を強制終了したくない場合は、これをお勧めします。
詳細については、mysqlのドキュメント をここで読むことができます
mysqlに接続します
mysql -uusername -p -hhostname
全プロセスリストを表示:
mysql> show full processlist;
+---------+--------+-------------------+---------+---------+------+-------+------------------+
| Id | User | Host | db | Command | Time | State | Info |
+---------+--------+-------------------+---------+---------+------+-------+------------------+
| 9255451 | logreg | dmin001.ops:37651 | logdata | Query | 0 | NULL | show processlist |
+---------+--------+-------------------+---------+---------+------+-------+------------------+
特定のクエリを終了します。ここでid = 9255451
mysql> kill 9255451;
権限が拒否された場合は、次のSQLを試してください。
CALL mysql.rds_kill(9255451)
暴走クエリを殺すためにmysqladmin
を使用します。
以下のコマンドを実行してください。
mysqladmin -uusername -ppassword pr
それからプロセスIDを書き留めます。
mysqladmin -uusername -ppassword kill pid
暴走したクエリでリソースが消費されなくなりました。
mysqladmin
が利用可能な場合、クエリのリストは以下のようになります。
> 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 |
+-----+------+-----------------+--------+---------+------+--------------+------------------+
その後、長時間実行されているクエリをホストしているmysqlプロセスを停止することができます。
> mysqladmin -uUSERNAME -pPASSWORD kill 137
あなたはプロセスを殺すために次のコマンドを実行する必要があります。
> show processlist;
> kill query processId;
クエリパラメータは、クエリコマンドプロセスを強制終了する必要があることを指定します。
次のようにkillプロセスの構文
殺す[接続| QUERY] processlist_id
詳細については このリンクを参照してください 。
この質問の著者は、通常、MySQLが出力を出力して初めて、間違ったクエリが実行されたことに気付くと述べています。前述のように、この場合、Ctrl-C
は役に立ちません。ただし、は現在のクエリを中止することに気付きました–キャッチした場合before出力が出力されます。例えば:
mysql> select * from jos_users, jos_comprofiler;
MySQLは上記の2つのテーブルのデカルト積の生成に忙しくなり、MySQLが画面に出力を出力していないことにすぐに気付きます(プロセスの状態はSending data)Ctrl-C
と入力します:
Ctrl-C -- sending "KILL QUERY 113240" to server ...
Ctrl-C -- query aborted.
ERROR 1317 (70100): Query execution was interrupted
Ctrl-C
は同様にUPDATE
クエリを停止するために使用できます。