general log 기능은 DB사용자의 쿼리 실행(사용) 내역을 파일(file)이나 테이블(Table) 기록하여 확인 할 수 있도록 합니다. ISMS-P 심사에서도 쿼리 실행 log를 관리하고 있는지 확인 하는데요. ISMS-P를 준비하시는 분들에게 도움이 되었으면 합니다 ㅎㅎ
general log 기능을 사용하기 위해서는 먼저 root 계정으로 로그인이 필요합니다. (DB는 mysql로 설정합니다)
# mysql -uroot -p mysql
Enter password:
root 계정으로 로그인 후에 general log 기능이 켜져 있는지 확인 합니다.
MariaDB [mysql]> SHOW VARIABLES LIKE '%general%';
쿼리 실행 결과 아래와 같이 조회가 되는데요. 현재는 general log 기능 꺼져 있습니다.
- general_log : OFF (꺼짐) / ON(켜짐)
- general_log_file : general log 파일로 기록 시 로그 기록 위치
+------------------+------------------------------------------+
| Variable_name | Value |
+------------------+------------------------------------------+
| general_log | OFF |
| general_log_file | /rdsdbdata/log/general/mysql-general.log |
+------------------+------------------------------------------+
그리고 다음 쿼리를 실행해 log 기록이 어디로 설정이 되어 있는지 확인 합니다.
MariaDB [mysql]> SHOW VARIABLES LIKE '%log_output%';
쿼리 실행 결과 아래와 같이 결과가 나오는데요. 저는 table에 기록되도록 되어있습니다.
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| log_output | TABLE |
+---------------+-------+
table에 기록 될때에는 mysql 데이터 베이스의 general_log에 기록됩니다.(mysql.general_log)
현재는 log기능이 꺼져있어 기록이 되지 않지만, 기능을 ON시키고 조회까지 해보도록 하겠습니다.
** log_output 설정 하기전에 먼저 general_log 기능을 먼저 비활성화(OFF)를 하고 진행 해야 합니다.
# general_log 기능을 비활성화
MariaDB [mysql]> set global general_log = OFF;
# general_log가 mysql DB의 general_log TABLE에 log 기록
MariaDB [mysql]> set global log_output = 'TABLE';
# general_log가 /rdsdbdata/log/general/mysql-general.log 위치에 FILE로 기록
MariaDB [mysql]> set global log_output = 'FILE';
# general_log가 TABLE과 FILE에 둘다 기록
MariaDB [mysql]> set global log_output = 'TABLE,FILE';
# general_log 기능을 활성화
MariaDB [mysql]> set global general_log = ON;
위와 같이 설을 통해 general log기능을 활성 화 시킬 수 있습니다. TABLE, FILE, TABLE+FILE(둘다) 중 하나로 로그 기록이 가능합니다.
설정에 따라 장단점이 있지만 보통은 TABLE 기록을 설정 후 crontab 또는 procedure와 스케쥴러를 사용하여 관리하는 것이 편리합니다.(관리하는 방법은 별도로 포스팅 하도록 하겠습니다 ^^)
** crontab 또는 procedure 스케쥴러를 이용하여 관리하는 이유
- FILE : 파일 용량이 너무 커져서 서버 용량(자원)을 너무 많이 사용 할 수 있음. 또, 파일이 너무 커져 파일 열기가 어려워짐(파일을 쪼개어 열 수도 있지만 관리가 어려움).
- TABLE : general_log TABLE에 log 데이터가 너무 많이져 조회(SELECT)시 DB에 부하가 걸리 수 있음.
자!! 이제 general log기능을 설정 했으면 확인 해보도록 하겠습니다! ㅎㅎ
MariaDB [mysql]> SHOW VARIABLES LIKE '%general%';
+------------------+------------------------------------------+
| Variable_name | Value |
+------------------+------------------------------------------+
| general_log | ON |
| general_log_file | /rdsdbdata/log/general/mysql-general.log |
+------------------+------------------------------------------+
쿼리를 실행하면 general_log가 ON으로 활성화 되어있는 것을 확인 할 수 있습니다. 자 이제 general_log TABLE에 log가 잘 기록 되고 있는지 확인 해 보도록 하겠습니다.
MariaDB [mysql]> SELECT * FROM general_log LIMIT 100;
위 쿼리를 실행 결과 다음과 같이 조회되면 정상 적으로 general_log 기능이 활성화 되어있다는 것을 확인 할 수 있습니다.
여기까지 general log 설정 및 table에 log 쌓고 조회 설정하기를 알아 봤습니다. 문의 사항있으시면 댓글로 남겨주시면 감사 하겠습니다^^
'DB > MariaDB&MySQL' 카테고리의 다른 글
[MariaDB/MySQL] DB 환경 세팅(2) - MariaDB Server 외부 접속을 위한 방화벽(Firewall) 세팅 (0) | 2024.07.31 |
---|---|
[MariaDB/MySQL] DB 환경 세팅(1) - MariaDB 설치 및 계정 생성 (0) | 2024.07.28 |