MySQL 프로세스 종료의 기본 개념
MySQL에서 실행 중인 프로세스를 종료하려면 KILL 명령어를 사용합니다. 다만 MySQL에는 여러 프로세스를 한 번에 종료하는 대량 종료(bulk kill) 명령어가 기본적으로 제공되지 않기 때문에, 일반적으로는 프로세스를 하나씩 종료해야 합니다.
이 글에서는 개별 종료 방법과 함께, 쿼리와 셸 명령어를 조합하여 여러 프로세스를 한꺼번에 종료하는 실용적인 방법까지 소개합니다.
현재 실행 중인 프로세스 확인하기
먼저 현재 MySQL 서버에 존재하는 프로세스 목록을 확인해야 합니다. 이때 SHOW PROCESSLIST 명령어를 사용합니다.
mysql> SHOW PROCESSLIST;
실행 결과는 다음과 같습니다.
+----+-----------------+-----------------+------+---------+------+------------------------+------------------+
| Id | User | Host | db | Command | Time | State | Info |
+----+-----------------+-----------------+------+---------+------+------------------------+------------------+
| 4 | event_scheduler | localhost | NULL | Daemon | 7986 | Waiting on empty queue | NULL |
| 8 | root | localhost:65180 | test | Query | 0 | starting | show processlist |
+----+-----------------+-----------------+------+---------+------+------------------------+------------------+
2 rows in set (0.00 sec)
각 컬럼의 의미는 다음과 같습니다.
- Id: 프로세스(연결)의 고유 식별자로, KILL 명령어에서 사용됩니다.
- User / Host: 해당 연결을 생성한 사용자와 접속 경로입니다.
- Command: 현재 실행 중인 작업 유형(Query, Sleep, Daemon 등)입니다.
- Time: 현재 상태로 유지된 시간(초)입니다.
특정 조건의 프로세스 종료하기
예를 들어 10초 이상 실행 중인 프로세스만 골라서 종료하고 싶다면, information_schema.processlist 테이블을 활용할 수 있습니다. 아래 예시는 Id가 4인 프로세스를 종료하는 KILL 문을 생성하는 쿼리입니다.
mysql> SELECT CONCAT('KILL ', id, ';')
-> FROM information_schema.processlist
-> WHERE TIME > 10;실행 결과는 다음과 같습니다.
+-----------------------+
| CONCAT('KILL ', id, ';') |
+-----------------------+
| KILL 4; |
+-----------------------+
1 row in set (0.00 sec)
여기서 출력된 KILL 4; 문장을 그대로 복사해서 실행하면 해당 프로세스가 종료됩니다. 조건절(WHERE TIME > 10)을 수정하면 특정 사용자의 세션(WHERE USER = 'some_user')이나 특정 데이터베이스의 세션(WHERE DB = 'test')만 선택적으로 종료하는 것도 가능합니다.
모든 프로세스 한 번에 종료하기
프로세스 수가 많다면 위 방식으로 하나씩 처리하기 어렵습니다. 이 경우 리눅스 셸에서 파이프(|)를 활용하면 전체 프로세스를 자동으로 종료할 수 있습니다.
mysql -e "SHOW FULL PROCESSLIST;" -ss | awk '{print "KILL "$1";"}' | mysql이 명령어의 동작 순서는 다음과 같습니다.
mysql -e "SHOW FULL PROCESSLIST;" -ss: 탭 구분 형태로 전체 프로세스 목록을 출력합니다.awk '{print "KILL "$1";"}': 각 줄의 첫 번째 컬럼(프로세스 Id)을 추출해KILL id;형태의 문장으로 변환합니다.| mysql: 생성된 KILL 문장들을 MySQL에 그대로 전달하여 즉시 실행합니다.
주의 사항
위 명령어는 현재 접속한 세션을 포함한 모든 프로세스를 종료하므로 운영 환경에서는 신중하게 사용해야 합니다. 필요하다면 awk 단계에서 조건을 추가하여, 예를 들어 특정 사용자나 일정 시간 이상 실행된 세션만 종료하도록 필터링하는 것이 안전합니다.