본문 바로가기
다른 DBMS/MySQL&MariaDB

Mysql 로그 종류

by 취미툰 2021. 1. 9.
반응형

Mysql에는 몇가지 로그가 존재합니다. 

 


Error log - mysqld 시작, 운영, 종료시 문제들이 기록

General query log - 클라이언트로부터 접속된 접속내용과 수행된 SQL문법들을 기록

Binary log - (복제를 위해서 사용)데이터 변경내용을 기록

Relay log - 복제된 Source 서버로부터 받은 데이터 변경사항을 기록

Slow query log - long_query_time 파라미터에 설정된 시간보다 오래 수행된 쿼리를 기록

DDL log (metadata log) - DDL문법이 수행될때 기록


기본적으로는 (윈도우의 error log를 제외하고) 로그가 활성화되지 않습니다. 

(DDL log는 DDL이 수행될 때 항상 필수로 생성됩니다)

기본적으로 활성화된 로그는 data directory에 저장됩니다.

flush_logs 명령어를 사용하여, 로그파일을 강제적으로 flush할 수 있습니다. flush 명령은 메모리에 있는 데이터를 디스크에 쓰는 명령어로 메모리와 디스크의 데이터를 동기화 시키는 명령어입니다. 

(ex mysqladmin flush-logs or mysqladmin refresh, mysqldump --flush-logs or mysqldump --master-data)

바이너리 로그의 경우에는 max_binlog_size 파라미터에 설정된 크기가 넘으면 flush 됩니다.

 

General Query Log와 Slow Query Log

두개의 로그는 쿼리를 남기는 로그로 공통점이 있습니다. 하나는 모든 쿼리가 저장되고 하나는 속도가 느린 쿼리가 저장됩니다.

 

log_output

두 로그가 유연하게 내용을 저장할 수 있습니다. logfile로 저장할수도 있고, mysql 스키마의 general_log와 slow_log 테이블에 저장할 수도 있습니다.

log_output 파라미터로 output을 설정할 수 있습니다. default는 FILE입니다.

log_output=[TABLE,FILE,NONE]

 

general_log,general_log_file

general_log 파라미터는 general query log를 사용할지 말지 결정하는 파라미터입니다. 

general_log=[0(disabled),1(enabled)]

general_log_file파라미터는 파일의 위치와 이름을 설정할 수 있는 파라미터입니다.

slow_query_log와 slow_query_log_file 파라미터와 사용법은 slow query를 컨트롤하는것 말고는 똑같습니다. 

현재 세션에 대해서만 general_log를 활성화 할 수 있습니다.

sql_log_off=[ON,OFF]

 

Table로 로그를 저장했을 때 특징

테이블로 로그를 저장하고 관리하게되면 client 쿼리 툴로 DB에 접속이 되기만 하면 DB의 권한으로 관리를 할 수 있습니다. 관리자가 아닌 다른 유저들이 OS의 file system에 직접 접속하지 않고도 로그를 확인할 수 있기 때문에 경우에 따라서 편하게 관리를 할 수도 있고, 관리자가 아닌 사용자들도 로그를 확인하기 쉬워집니다.

 

default로 log Table은 CSV 스토리지 엔진을 사용해서 저장이 됩니다.(콤마(,)로 구분된 데이터)

MyISAM 스토리지엔진으로 바꿔서 사용할 수 있습니다.그냥 ALTER TABLE 명령어로는 되지 않고, log를 비활성화한 후 변경해야 합니다.

 

스토리지 엔진 변경방법(CSV -> MyISAM)

//Mysql 8.0.22 기본상태 확인

mysql> SELECT engine FROM information_schema.TABLES where table_name='general_log' ;
+--------+
| ENGINE |
+--------+
| CSV    |
+--------+
1 row in set (0.00 sec)

mysql> show variables like 'general_log';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| general_log   | OFF   |
+---------------+-------+
1 row in set (0.02 sec)

//(general_log 상태가 ON일시) OFF로 변경 
mysql> set global general_log='OFF';
Query OK, 0 rows affected (0.01 sec)

//아래와 같은 방법으로 현재의 general_log의 상태를 @olg_log_state 변수에 저장하는 방법도 있습니다.
mysql > SET @old_log_state = @@GLOBAL.general_log;

//1.스토리지 엔진 변경
mysql> alter table mysql.general_log engine=MyISAM;
Query OK, 0 rows affected (0.06 sec)
Records: 0  Duplicates: 0  Warnings: 0

//2.변경된 스토리지 확인
mysql> SELECT engine FROM information_schema.TABLES where table_name='general_log' ;
+--------+
| ENGINE |
+--------+
| MyISAM |
+--------+
1 row in set (0.00 sec)

//(general_log 상태가 OFF일시) ON로 변경
mysql> set global general_log='ON';
Query OK, 0 rows affected (0.01 sec)

mysql> show variables like 'general_log';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| general_log   | ON    |
+---------------+-------+
1 row in set (0.00 sec)

//아래와 같은 방법으로  @olg_log_state 변수에 저장하는 방법된 변수를 다시 적용할 수 있습니다.
mysql > SET GLOBAL general_log = @old_log_state;

 

로그 테이블이 오래되고 용량이 커지다보면 관리를 해줘야합니다. rename tablee 명령어를 통해 백업을 받을 수 있습니다.

 

//mysql 스키마로 이동
mysql> use mysql

//general_log2 있으면 삭재
mysql> DROP TABLE IF EXISTS general_log2;
Query OK, 0 rows affected, 1 warning (0.00 sec)

//general_log2 생성
mysql> create table general_log2 like general_log;
Query OK, 0 rows affected (0.03 sec)

mysql> show tables like 'general%';
+----------------------------+
| Tables_in_mysql (general%) |
+----------------------------+
| general_log                |
| general_log2               |
+----------------------------+
2 rows in set (0.00 sec)


//general_log -> general_log_backup으로 변경, general_log2 -> general_log로 변경
mysql> rename table general_log to general_log_backup,general_log2 to general_log;
Query OK, 0 rows affected (0.00 sec)

mysql>  show tables like 'general%';
+----------------------------+
| Tables_in_mysql (general%) |
+----------------------------+
| general_log                |
| general_log_backup         |
+----------------------------+
2 rows in set (0.00 sec)

 

해당 테이블은 Truncate table이 가능합니다.

Lock Tables은 지원하지 않습니다. Insert,Delete,Update는 지원하지 않습니다.

파티셔닝은 지원되지 않습니다.

 

Error log

 Error log에는 mysqld 시작 및 종료시간이 포함됩니다. 서버 시작 및 종료 중에 발생하는 오류 경고 및 진단 메세지를 포함하고 있습니다.

log_error 파라미터에 설정된 경로와 파일로 저장됩니다. 뿐만 아니라 Performance_schema 스키마의 error_log 테이블에도 저장됩니다.

 

 

Binary log

binary log는 테이블 데이터의 변화나 테이블 생성같은 변화를 저장하고 있습니다.

binary log는 아래의 중요한 두개의 목적으로 사용됩니다.

1. replication. replication의 source server에서 binary log는 target server에 데이터의 변화를 전송합니다.

2. recovery. point in time recovery(시점복구)에 사용될 수 있습니다.  

 

추가적인 내용은 아래 포스팅을 참고하시길 바랍니다.

bae9086.tistory.com/179?category=832163

 

binlog(Binary log)

BINLOG? 서버 내에서 발생되는 모든 변경내역이 기록되는 파일입니다. DML,DDL의 모든 명령문이 기록되며 데이터는 "event"형태로 저장되어 있습니다. 각 명령문이 데이터를 업데이트하는 소비시간

bae9086.tistory.com

DDL log

DROP TABLE이나 ALTER TABLE문이 실행되었을때 기록됩니다. 기본적으로 데이터 디렉토리에 ddl_log.log에 작성되며 이진파일이라 일반적으로 텍스트 에디터에서 읽어들일 수 없습니다. 

ddl_log.log는 4G까지 저장할 수 있습니다. 이것이 4G를 넘기기 전에 파일이름 변경이나 제거를 통해 해결해주어야 합니다.

 

어떻게 로그를 저장하는지는 추가로 테스트한 후 글로 작성하겠습니다.

 

 

이상입니다.

 

 

 

 

 

 


출처 : Mysql 8.0 Reference Manual ,
myinfrabox.tistory.com/10?category=804723

반응형

'다른 DBMS > MySQL&MariaDB' 카테고리의 다른 글

InnoDB On-Disk Structures  (0) 2021.01.13
InnoDB IN-MEMORY Structures  (0) 2021.01.12
InnoDB 소개  (0) 2021.01.08
mysqlslap  (0) 2021.01.06
mysqlpump  (0) 2021.01.05

댓글