MariaDB에는 다양한 로그가 있다.

 

모든 query log가 나올 수 있는 general log가 있고

 

느린 쿼리를 수집하는 slow로그 

 

에러로그를 수집하는 에러로그

 

그중에서 오늘은 general log에 대해서 알아보도록 하자

 

 


1.  root 권한으로 mysql로 접속

우선 서버에서 root 권한으로 들어가준다.

 

mysql -u root 

mysql -u root -p // 비밀번호 치고 들어가야 할 때

 

그리고 mysql로 들어가줌!

 

 

2. general log에 관한 설정 조회

general log에 관한 설정을 조회 해준다.

 

MariaDB [(none)]> show variables like 'general%';
+------------------+-------------------------+
| Variable_name    | Value                   |
+------------------+-------------------------+
| general_log      | OFF                      |
| general_log_file | general.log |
+------------------+-------------------------+

 

 

3. general log 설정 on

set GLOBAL general_log='ON';
set GLOBAL general_log_file='/data/general.log';

이러면 설정은 끝난다.

그치만 매번 DB를 올리고 내릴때마다 같은 설정을 유지하고 싶으니깐

 

my.cnf 파일을 수정해준다.

 

vi /etc/my.cnf

[mysqld]
general_log = 1
general_log_file=/data/general.log

 

만약, 권한이 없으면 sudo 권한으로 열어준다!

( sudo vi /etc/my.cnf )

 

 

default general_log 테이블은 CSV 엔진을 사용하기 때문에 MyIsam 엔진으로 변경한다.

아래와 같은 에러 발생 시 general_log 를 off 시킨 후 수행해야함!

mysql> alter table mysql.general_log engine=MyIsam;

4. 로그 수집 방법 (FILE / TABLE)

 

로그 수집 방법을 조회 해준다.

MariaDB [(none)]> show variables like 'log_output%';
+---------------+------------+
| Variable_name | Value      |
+---------------+------------+
| log_output    | FILE       |
+---------------+------------+
1 row in set (0.001 sec)

 

그런데 나는 로그에서 매번 user_host 즉, ip가 나왔으면 했다.

 

 

그런데 general-log에서는 FILE 로그에서는 connect 할때는 ip가 나오는데 

그 이후, query에서는 나오지 않았다.

 

그런데 table 에서는 기본적으로 user_host가 있으므로 TABLE로 로그를 수집하기로 하였다.

 

cf) 이를 대체하는 방법으로 slow log의 시간을 조정해주는 방법이 있다. 

왜냐면,, slow 로그는 모든 ip를 수집하기 때문이다.

 

SET GLOBAL long_query_time = 0.01;


MariaDB [(none)]> show variables like 'long%';
+-----------------+----------+
| Variable_name   | Value    |
+-----------------+----------+
| long_query_time | 0.100000 |
+-----------------+----------+
1 row in set (0.001 sec)


 

 

 

잠시 삼천포에 빠졌었는데 다시 !

그럼 TABLE 에 로그를 쌓도록 수정하겠다.

 

set global log_output='TABLE';

 

그런데 이러면 slow 로그등 다른 로그들도 영향을 받는다.. 그래서 FILE 도쓰고 TABLE도 쓰겠당!

 

set global log_output='TABLE,FILE';

 

그러면 mysql에 general_log라는 테이블이 기본 지원 되기때문에 해당 테이블을 조회 하면 connect , query, 권한 부여등

모든 것이 나온다!

 

 

 

 

event_time	user_host	thread_id	server_id	command_type	argument
03:03.8	root[root] @ localhost []	24	1	Query	show variables like '%log%'

 

 

'DEVELOP > DB' 카테고리의 다른 글

[DB]Isolation Level 알아보기  (0) 2020.07.19
[mySql] 계정 생성 및 권한 설정  (0) 2020.05.25
DB (mysql) 설정 변경  (0) 2020.03.13
NewSql 이란? All in one DBMS  (0) 2019.12.16
NoSql DB 종류  (0) 2019.12.13

+ Recent posts