카테고리 보관물: MYSQL

MySQL Query Log 남기기

라이브 중에 MySQL Query Log 남기기

(MySQL을 사용하면서 자주 사용하지만 기억하기 힘들어서 남겨 놓음.)

1. general_log 상태 확인

mysql> show variables like ‘general%’;
+———————-+————————————————-+
| Variable_name   | Value                                                  |
+———————-+————————————————-+
| general_log        | OFF                                                    |
| general_log_file | /var/lib/mysql/query.log                       |
+———————+————————————————–+

 

2. general_log 설정 변경

mysql> set global general_log = ‘on’;
Query OK, 0 rows affected (0.00 sec)

 

3. general_log 변경 상태 확인

mysql> show variables like ‘general%’;
+———————-+————————————————+
| Variable_name   | Value                                                 |
+———————-+————————————————+
| general_log        | ON                                                     |
| general_log_file | /var/lib/mysql/NXT-NAMS-LINUX.log |
+———————-+————————————————+

 

MySQL TABLE 대소문자 구분 없애기


/etc/mysql/my.cnf 파일을 수정

[mysqld] 항목에 아래 내용 추가 후 재시작
lower_case_table_names=1

 

정상 적용 상태 확인은 MYSQL 접속후 아래의 명령으로 확인 가능합니다.
show variables like ‘lower_case_table_names’;

lower_mysql

lower_case_table_names에 지정되는 값의 의미입니다.

의미
0 테이블과 데이터베이스 이름들은 CREATE TABLE 또는 DATABASE 문에 정의된 문자로 디스크에 저장되며 이름 비교시 대소문자를 구분
1 테이블과 데이터베이스 이름들은 소문자로 저장되고 이름 비교시 대소문자를 구분하지 않는다
2 테이블과 데이터베이스 이름들은 CREATE TABLE 또는 DATABASE 문에 정의된 문자로 디스크에 저장되며 이름 비교시 대소문자를 구분하지 않는다

MYSQL GROUP BY 후 ROW COUNT

MYSQL 에서 GROUP BY로 중복데이터를 묶은 후 ROW COUNT를 확인할 필요가 있었습니다.

 

내가 원하는 결과는 아래와 같은 결과인데…

groupby_1

 

Group by를 하고 난후 count를 하게되면 아래와 같은 결과가 나옵니다 ㅠ.ㅠ

groupby_2

 

 

내가 필요한 데이터는  SELECT된 ROW의 COUNT 인데.. 항목별 COUNT가 표시가 됩니다..

 

이럴 때, GROUP BY 후 ROW COUNT 결과를 얻으려면 아래와 같이 쿼리를 사용하면 원하는 결과를 찾을 수 있습니다

groupby_3

SELECT COUNT(*) AS 별명 FROM ( GROUP BY 들어간 SELECT 쿼리) AS 별명

MYSQL Replication Error 넘기기

MySQL Replication 구성으로 사용중 SLAVE에서 에러가 발생한 경우 아래와 같이 에러난 부분을 제외시킬 수 있습니다.

stop slave;                                                       < SLAVE 중지
SET GLOBAL SQL_SLAVE_SKIP_COUNTER = 1;   < 1단계 넘기기
start slave;                                                      < SLAVE 시작
show slave status\G;                                        < 상태확인

MYSQL 감사 로그 (audit log)

MYSQL은 MSSQL과 달리 따로 감사로그가 남지 않는다.

GENERAL LOG를 남기면 발생하는 쿼리들과 함께 접속 로그가 남긴하는데, 쿼리도 같이 남기때문에 기록되는 데이터량이 클수 밖에 없다.

MYSQL 감사로그를 남기기 위해 여러 방법을 찾아보았는데 아래와 같이 로그인 트리거를 통해 기록하는 방법이 있다.

http://www.fromdual.com/sites/default/files/logon_trigger_wp.pdf

MYSQL 운영중 QUERY LOG 남기기

MYSQL 5.1 이상 버전부터는 서비스 운영중에 언제든지 MYSQL QUERY LOG를 남길수 있습니다.

MYSQL에 접속하여 현재 QUERY LOG 기록 상태를 확인합니다.

mysql> SHOW VARIABLES LIKE ‘general%’;

+———————+—————————————+
| Variable_name    | Value                                        |
+———————+—————————————+
| general_log        | OFF                                          |
| general_log_file | /var/log/query.log                      |
+———————+—————————————+

여기서 보이는 general_log = OFF는 현재 로그가 남지 않도록 설정 된 것이며, 아래의 쿼리로 로그를 남기도록 설정할 수 있습니다.

mysql> SET GLOBAL general_log = ‘ON’;
Query OK, 0 rows affected (0.00 sec)

 

MYSQL REPLICATION ERROR 1872

MYSQL REPLICATION 으로 운영중 MASTER와 SLAVE간에 REPLICATION이 제대로 동작하지 않아, MASTER와 SLAVE 데이터 동기화시키고, SLAVE에서 SLAVE START를 실행했을 때 아래와 같은 메세지가 발생.

“ERROR 1872 (HY000): Slave failed to initialize relay log info structure from the repository”

해결방법 : reset slave 후 다시 start slave 실행 “정상동작”

 

RESET SLAVE 설명 보기