회사에서 레거시에서 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 |