Computer >> 컴퓨터 >  >> 프로그래밍 >> MySQL

MySQL에서 현재 접속 중인 사용자 목록을 확인하는 2가지 방법

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 데몬 프로세스가 함께 표시된 것을 확인할 수 있습니다. 이처럼 두 방법 모두 동일한 정보를 제공하므로, 상황에 맞게 편리한 방식을 선택하여 사용하면 됩니다.