MySQL 서버에 현재 로그인(접속)되어 있는 사용자 목록을 확인해야 할 때가 있습니다. 장애 진단, 세션 관리, 보안 점검 등 다양한 상황에서 유용하게 활용할 수 있는데요. MySQL에서는 크게 두 가지 방법으로 접속 중인 사용자를 조회할 수 있습니다.
첫 번째 방법: INFORMATION_SCHEMA.PROCESSLIST 조회
INFORMATION_SCHEMA의 PROCESSLIST 테이블을 SELECT 문으로 조회하면 현재 실행 중인 모든 스레드와 접속 정보를 확인할 수 있습니다.
SELECT * FROM INFORMATION_SCHEMA.PROCESSLIST;
이 방법의 장점은 일반 SQL 쿼리이기 때문에 WHERE 절로 조건을 걸거나 ORDER BY로 정렬하는 등 원하는 형태로 결과를 가공할 수 있다는 점입니다.
두 번째 방법: SHOW PROCESSLIST 명령어
MySQL에서 기본적으로 제공하는 SHOW PROCESSLIST 명령어를 사용하면 더 간단하게 접속 현황을 확인할 수 있습니다.
SHOW PROCESSLIST;
참고로 SHOW FULL PROCESSLIST처럼 FULL 키워드를 추가하면 INFO 컬럼에 실행 중인 전체 쿼리문이 잘리지 않고 표시됩니다.
실행 예제
먼저 첫 번째 방법인 information_schema.processlist 조회를 실행해 보겠습니다.
mysql> select * from information_schema.processlist;
실행 결과는 다음과 같습니다.
+----+-----------------+-----------------+------+---------+--------+-----------------------------+---------------------------------------------+ | ID | USER | HOST | DB | COMMAND | TIME | STATE | INFO | +----+-----------------+-----------------+------+---------+--------+-----------------------------+---------------------------------------------+ | 8 | root | localhost:50252 | web | Query | 0 | executing | select *from information_schema.processlist | | 4 | event_scheduler | localhost | NULL | Daemon | 301832 | Waiting for next activation | NULL | +----+-----------------+-----------------+------+---------+--------+-----------------------------+---------------------------------------------+ 2 rows in set (0.00 sec)
이번에는 두 번째 방법인 show processlist 명령어를 실행해 보겠습니다.
mysql> show processlist;
실행 결과는 다음과 같습니다.
+----+-----------------+-----------------+------+---------+--------+-----------------------------+------------------+ | Id | User | Host | db | Command | Time | State | Info | +----+-----------------+-----------------+------+---------+--------+-----------------------------+------------------+ | 4 | event_scheduler | localhost | NULL | Daemon | 301842 | Waiting for next activation | NULL | | 8 | root | localhost:50252 | web | Query | 1 | starting | show processlist | +----+-----------------+-----------------+------+---------+--------+-----------------------------+------------------+ 2 rows in set (0.19 sec)
결과 해석하기
조회 결과의 주요 컬럼은 다음과 같은 의미를 가집니다.
ID: 각 연결(스레드)의 고유 식별자입니다.
USER: 해당 연결에 사용된 MySQL 계정명입니다.
HOST: 클라이언트가 접속한 호스트와 포트 정보입니다.
DB: 현재 선택된 데이터베이스로, 없으면 NULL이 표시됩니다.
COMMAND: 스레드가 수행 중인 작업 유형(Query, Sleep, Daemon 등)입니다.
TIME: 현재 상태로 유지된 시간(초)입니다.
STATE: 스레드의 현재 상태를 나타냅니다.
INFO: 실행 중인 SQL 문이 표시됩니다.
위 예제에서는 root 계정으로 접속한 사용자 세션과 MySQL 내부의 event_scheduler 데몬 프로세스가 함께 표시된 것을 확인할 수 있습니다. 이처럼 두 방법 모두 동일한 정보를 제공하므로, 상황에 맞게 편리한 방식을 선택하여 사용하면 됩니다.