Today
Total
KoreanEnglishFrenchGermanJapaneseSpanishChinese (Simplified)
관리 메뉴

DB & AWS Knowledge

Purge Logs (Binary Log Purge) 본문

MySQL/명령어

Purge Logs (Binary Log Purge)

`O` 2021. 6. 28. 11:45
728x90
반응형

해당 페이지에서는 MySQL/Mariadb 에서 아카이브 개념으로 사용하는 Binary log 의 Purge Logs 에 대하여 다룬다.

 

 

참조 페이지 

 

https://dev.mysql.com/doc/refman/5.7/en/purge-binary-logs.html

 

Binary log 의 개념 참조

 

2021.03.05 - [MySQL/Binary log] - Binary log 개념

 

 

 

Purge 의 필요성

 

Binary Log 는 데이터베이스의 사용량이 늘어 날수록 그에 따른 데이터 변동내역을 모두 보관하기 위해서 파일 개수 및 디스크 용량이 늘어나는데 때때로 실무에서 데이터베이스를 사용하다 보면 특정 시간이나 기간에 서비스 부하가 급격하게 늘어서 이에 따른 디스크 용량 임계치에 다다를 경우가 있다.

 

물론 좋은 현상은 아니다. 이미 서비스를 구축시, 이에 대한 변수를 고려해서 디스크 사용량을 예상 후, 그에 따른 디스크 용량 배정을 넉넉하게 해서 이런 경우가 생기지 않게 하는게 좋으나, 각 서비스 마다 부하 산정, 클라우드나 서버 사용 비용 부족 등으로 인하여 초기 소규모 구성 후, 차후 증설 계획을 잡는 방향 고려 등 다양한 내부 사유가 있어서 이러한 문제 예방을 하기 힘든 경우도 있다. 

 

 

그래서 디스크 사용량 100% 로 인하여 데이터 기입 불가 및 이에 따른 DB down 등을 예방하기 위한 대처가 필요 할 때가 있다. 

 

 

 

 

Purge syntax

 

MySQL /  MariaDB 의 Purge 기본 syntax 는 아래와 같다.

 

 

PURGE { BINARY | MASTER } LOGS {
    TO 'log_name'
  | BEFORE datetime_expr
}

 

 

위와 같이 Purge 는 기본적으로 두가지의 기준 (binlog file 번호, datetime) 하나를 사용 할 수 있다.

실 예시는 아래와 같이 쓰인다.

 

 

PURGE BINARY LOGS TO 'mysql-bin.010';
PURGE BINARY LOGS BEFORE '2019-04-02 22:46:26'; #시간은 해당 양식을 준수, 시간 제외 및 일자만 작성 가능

 

 

현재 DB 가 보관하는 binlog 파일 리스트는 아래의 명령어로 확인 할수 있다.

 

show binary logs

 

 

여기서 TO 뒤에 파일 번호를 넣으면 해당 파일 번호 이전에 기록된 파일들은 전부 삭제 된다.

(단, 사용중인 현재 파일은 삭제되지 않는다.)

 

 

이걸 다시 생각해보면 replication 구성시에도 현재 동기화중인 binlog 파일 (현재 파일 혹은, 동기화 중인 현재 파일 이전 파일들)은 삭제 되지 않는다는 뜻이다. 단, replcation 을 끊은 상태에서 삭제시에는 slave 가 동기화 중인 파일들을 찾지 못해서 error 가 발생하므로 주의한다.

 

 

시간 시점으로 조회 시에는 아래의 방법으로 조회 할 수 있다. (실무에서는 이정도의 조회면 시점복구수준의 조회인데

보통은 보관주기 기준으로 삭제 하는 경우가 많으므로 purge 시에는 잘 쓰지는 않는다.)

 

 

필자는 타 서비스에서 담당자가 purge 를 쓰지 않고 수동으로 디스크 100% 사용을 막기위해서 binlog 를 수동으로 삭제했다가 문제가 생긴 것을 지원한 적이 있다. 물론 아래 내용은 임시방편이며 디스크를 증설 완료 할 때까지만 썼다.

 

(참조 : 2021.03.03 - [MySQL/관리,운영 스크립트] - Binlog Auto Purge)

 

사실, 긴급한 상황이 아닌이상, 삭제에 대한 휴먼에러도 방지하기 위해서 보관 주기가 지난 파일들을 자동 삭제 설정 혹은 binlog 디스크 사용 추이를 조절 할 때는 아래의 expire_bin_logs 를 사용 한다. 해당 옵션은 online 으로 수정 가능 하고 재기동시에도 적용하기 위해서 my.cnf 에서도 해당 내용을 반영 한다.

 

set {global} expire_logs_days = #원하는 일자

 

반응형

'MySQL > 명령어' 카테고리의 다른 글

MySQL/MariaDB 명령어 : RENAME TABLE  (0) 2021.06.21
Comments