Data/MySQL

[MySQL] binlog(바이너리 로그)란?

누구세연 2024. 7. 16. 21:42

회사에서 레거시에서 DeadLock 발생으로 오류가 발생하였는데 select for update문을 쓰는 부분도 아니었다...😥

정확한 원인 파악을 위해(lock이 있었는지 확인하기 위해) binlog를 확인하려 하였으나 기간이 지나 purge 되어버렸습니다😱

아쉬운 대로 MySQL binlog에 대해 공부해 보도록 하겠습니다.

 

 

MySQL Binlog?

MySQL Binlog(바이너리 로그)는 데이터베이스의 변경 사항을 기록하는 로그 파일입니다.

Binlog는 MySQL 서버에서 수행된 모든 DDL 및 DML 명령을 순차적으로 저장합니다.

이를 통해 데이터 복구와 복제를 효과적으로 관리할 수 있습니다.

 

Binlog의 중요성

  • 데이터 복구
    데이터 손실 시, Binlog를 사용하여 특정 시점으로 복구할 수 있습니다.
  • 데이터 복제
    Binlog를 통해 마스터-슬레이브 복제를 설정하여 데이터베이스의 가용성과 확장성을 높일 수 있습니다.
  • 실시간 데이터 스트리밍
    Binlog를 통해 데이터 변경 사항을 실시간으로 다른 시스템에 전송할 수 있습니다.

 

Binlog 설정 방법

MySQL에서 Binlog를 활성화하려면 MySQL 설정파일 ('my.cnf')에 설정을 추가해야 합니다.

설정파일의 경로는 아래의 명령어를 통하여 같은 경로에 있는 설정 파일을 찾을 수 있습니다.

SHOW VARIABLES LIKE 'pid_file';

 

실행결과

저는 homebrew로 설치했기 때문에 위와 같은 경로가 나타나는 것을 볼 수 있습니다.

아래의 명령어로 설정 파일이 존재하는지 확인해 보겠습니다.

ls /opt/homebrew/etc/

이처럼 파일을 찾을 수 있습니다. (없다면 직접 생성도 가능합니다.🤨)

파일 확인

 

이제 설정 파일에 binlog를 활성화할 수 있는 설정을 추가하겠습니다.

[mysqld]
log-bin=mysql-bin
server-id=1
binlog_format=ROW

 

  • log-bin: Binlog를 활성화하는 옵션입니다.
  • server-id: 서버 식별자로, 복제 환경에서 각 서버는 고유한 server-id를 가져야 합니다.
  • binlog_format: Binlog의 형식을 지정합니다. (ROW, STATEMENT, MIXED 중 하나)

설정 후 서버 재시작을 해줘야 활성화됩니다!!

brew services restart mysql   # Homebrew로 설치된 경우

 

 

 

Binlog 파일 확인

MySQL 서버가 Binlog를 생성하고 있는지 확인하려면 MySQL 클라이언트에서 다음 명령어를 실행할 수 있습니다.

SHOW BINARY LOGS;

실행결과

현재 MySQL 서버에서 사용 중인 Binlog 파일 목록을 볼 수 있습니다.

 

위의 Binlog 설정한 디렉터리에서 직접 로그를 확인할 수도 있습니다.

ls /opt/homebrew/var/mysql/

디렉토리에 'binlog.000003', 'binlog.000004'와 같은 파일들이 생성되어 있는 것을 확인할 수 있습니다.

 

'Data > MySQL' 카테고리의 다른 글

[MySQL] 인덱스 동작 원리 및 최적화  (0) 2024.08.04
[MySQL] 쿼리 절 순서  (0) 2024.08.04
[MySQL] 문자열 결합하기: CONCAT, GROUP_CONCAT  (0) 2024.07.08
[MySQL] UPSERT(UPDATE + INSERT)  (0) 2024.06.28
[MySQL] Timestamp vs DateTime  (0) 2024.04.02