실행중인 MySQL 쿼리를 중지하려면 어떻게해야합니까?


258

mysqlLinux 쉘에서 연결합니다 . 때때로 나는 SELECT너무 큰 쿼리를 실행합니다 . 그것은 인쇄하고 인쇄하며 이미 이것이 내가 의도 한 것이 아님을 알고 있습니다. 쿼리를 중지하고 싶습니다.

때리면 Ctrl+C(두 번) mysql완전히 죽이고 다시 셸로 돌아 오므로 다시 연결해야합니다.

mysql자체 를 죽이지 않고 쿼리를 중지 할 수 있습니까?


1
MySQL 5.7은 서버 측 SELECT 문 시간 초과를 지원한다는 점을 언급 할 가치가 있습니다. 여기에 대한 자세한 정보 : mysqlserverteam.com/server-side-select-statement-timeouts
Morgan Tocker

답변:


462
mysql>show processlist;

mysql> kill "number from first col";

1
고맙습니다, 나는 phpmyadmin에서 어떻게 해야하는지 알았습니다!
Zilverdistel

5
하지만 mysql내가 프롬프트 볼 수 없습니다 ... 인쇄되어
데이비드 B

34
이 기본 접근 방식에 동의하지만 이 경우에는 사용하는 KILL QUERY것이 약간 바람직 하다고 생각 KILL합니다. 그렇게하면 쿼리가 종료되지만 연결은 종료되지 않습니다.
Ike Walker

3
프로세스 목록이 버퍼를 지나서 스크롤되는 경우 유용한 팁은 호출기를 설정하는 것입니다. 프롬프트에서 '\ P more'를 입력하십시오. 이 팁에 대한 자세한 내용은 여기 dbasquare.com/2012/03/28/…
Scott

1
AWS RDS에서 MySQL을 사용하는 경우 실행할 권한이 KILL없지만 다음을 실행할 수 있습니다.CALL mysql.rds_kill(12345)
Kip

70

그냥 추가

KILL QUERY **Id** 여기서 ID는 연결 ID입니다. show processlist

일반적으로 일부 응용 프로그램에서 실행할 때 연결을 종료하지 않으려는 경우에 더 좋습니다.

자세한 내용은 여기에서 mysql doc을 읽을 수 있습니다


이 문제와 관련이 있거나 연결이 다시 발생하거나 연결을 강제 종료하면 응용 프로그램을 실행하기에 너무 작은 풀 크기가 발생합니까?
삼촌 Iroh

48

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)

13
참고 : AWS RDS 인스턴스를 사용하는 경우 마지막 쿼리가 필요합니다.
Kip

13

mysqladmin런 어웨이 쿼리를 종료하는 데 사용하십시오 .

다음 명령을 실행하십시오.

mysqladmin -uusername -ppassword pr

그런 다음 프로세스 ID를 기록해 두십시오.

mysqladmin -uusername -ppassword kill pid

런 어웨이 쿼리는 더 이상 리소스를 소비하지 않아야합니다.


9

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

6

프로세스를 종료하려면 다음 명령을 실행해야합니다.

> show processlist;  
> kill query processId;

쿼리 매개 변수는 쿼리 명령 프로세스를 종료해야 함을 지정합니다.

킬 프로세스의 구문은 다음과 같습니다.

킬 [연결 | QUERY] processlist_id

자세한 내용은 이 링크를 참조하십시오.


1

이 질문의 저자는 일반적으로 MySQL이 출력을 인쇄 한 후에 만 ​​잘못된 쿼리가 실행되었음을 인식한다고 언급합니다. 언급 한 바와 같이,이 경우 Ctrl-C에는 도움이되지 않습니다. 그러나 출력이 인쇄 되기 전에 쿼리 를 잡으면 현재 쿼리가 중단 된다는 것을 알았습니다 . 예를 들면 다음과 같습니다.

mysql> select * from jos_users, jos_comprofiler;

MySQL은 위의 두 테이블의 카티 전 곱 생성으로 바쁘고 곧 MySQL이 화면에 출력을 인쇄하지 않았으므로 (프로세스 상태는 데이터 전송 중 ) 다음과 같이 입력합니다 Ctrl-C.

Ctrl-C -- sending "KILL QUERY 113240" to server ...
Ctrl-C -- query aborted.
ERROR 1317 (70100): Query execution was interrupted

Ctrl-C마찬가지로 UPDATE쿼리 를 중지하는 데 사용할 수 있습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.