Search
🐬

[MySQL, MacOS] binlog 파일 생성, 중지, 삭제 옵션 설정

Last update: @3/7/2023
<MySQL 버전 8.0.32 기준>

binlog 파일의 용도

MySQL DB에 일어나는 모든 실행사항을 기록하는 바이너리 로그 파일. 아래 두 가지 역할을 함
master DB에서 slave DB로 전송해서 DB 복사할 때 사용(replication)
데이터 복구 시 보통 binlog를 사용함(recovery)
맥 homebrew로 설치한 경우 /opt/homebrew/var/mysql/ 경로에 저장됨

텍스트 파일로 읽기

바이너리 파일인 로그파일을 사람이 읽을 수 있는 텍스트로 변경해주는 명령어
$ mysqlbinlog mysql-bin.000001 > textlog.sql
Shell
복사

binary log 파일 삭제

파인더에서 삭제하면 sql 자체가 log파일을 찾지 못한다고 실행이 안 되는 경우가 생김. 따라서 MySQL 내에서 삭제해주는 것이 좋음
log 파일 리스트 확인(전체보기)
mysql> show binary logs;
SQL
복사
마지막 log 파일 확인
show master status;
SQL
복사
파일 이름 기준 삭제
mysql> purge binary logs to 'binlog.000150';
SQL
복사
위와같이 하면 binlog.000001부터 binlog.000150까지 삭제됨
날짜 기준 삭제
mysql> purge binary logs before '2023-03-07 22:00:00';
SQL
복사
위와 같이 하면 2023-03-07 22시 이전 기록이 모두 삭제됨

파일 생성 중지

my.cnf라는 파일에 설정(configuration) 정보를 추가해야함
MySQL이 my.cnf 파일을 찾는 경로 확인하기
$ mysql --help
Shell
복사
위 명령어를 치면 중간 부분에 아래처럼 my.cnf 파일을 찾는 경로가 나옴
/etc/my.cnf /etc/mysql/my/cnf /opt/homebrew/etc/my.cnf ~/.my/.cnf
Java
복사
위 경로들 중 아무 곳에나 my.cnf 파일을 생성. 여기선 홈 경로에 만듦
$ vim ~/.my.cnf
Shell
복사
이후 아래처럼 입력하고 저장
[mysqld] $ skip-log-bin
Shell
복사
여기서 [mysqld]는 그룹 이름으로, 빼먹으면 MySQL 서버가 실행이 안 됨
추후 설정파일 찾을 때는 아래처럼(/ 경로에 두면 상당히 오래 걸림)
$ find / -name "*my.cnf" 또는 $ find ~/ -name "*my.cnf"
Shell
복사
log_bin 속성 OFF 확인
mysql> show variables like 'log_bin';
SQL
복사

바이너리 로그 파일 옵션 설정하기

주요 옵션
옵션
설명
log-bin[=basename]
로그 파일 이름 설정. 경로 설정 가능
max_binlog_size=N
로그 파일의 최대 크기 지정(단위 byte) 기본값 1073741824 byte(1GB) 최솟값 4096 byte 최댓값 1073741824 byte
expire_logs_days=N
로그 보관 기간(일 단위) 기본값 0(무기한) deprecated 됨. 아래 seconds 사용
binlog_expire_logs_seconds=B
로그 보관 기간(초 단위) 기본값 2592000 초(30일)
binlog_cache_size=N
로그 캐시 크기(byte 단위) 각 클라이언트별 할당 크기 기본값 32k
bin 관련 설정 변수 확인
mysql> show variables like '%binlog%';
Shell
복사

binlog 옵션을 변경하는 두 가지 방법

mysql에서 옵션 설정하기
mysql> set global {옵션명}={값}
SQL
복사
my.cnf 파일에서 옵션 설정하기
binlog_expire_logs_seconds = 1209600 max_binlog_size = 1073741824
Plain Text
복사
~/.my.cnf
my.cnf 파일을 변경한 경우 mysql 서버를 재시작 해줘야 변경 사항이 반영됨

저장 기한 변경 예시(MySQL에서 옵션 설정)

기본값 30일(2,592,000초)
저장 기한 14일(1,209,600초)로 설정하기 (보통 14일 정도면 충분)
설정값 확인
mysql> show variables like '%logs_seconds'; #현재값 조회
SQL
복사
설정값 변경 확인
mysql> set global binlog_expire_logs_seconds=1209600; mysql> show variables like '%logs_seconds';
SQL
복사

최대 용량 설정 예시(MySQL에서 옵션 설정)

기본값 1 GB(1073741824 byte)
최대 용량 100MB(10485760 byte)로 설정하기
설정값 확인
mysql> show variables like '%binlog_size'; #현재값 조회
SQL
복사
mysql> set global max_binlog_size=10485760; mysql> show variables like '%binlog_size';
SQL
복사

로그 이름 설정 예시

my.cnf 파일에 다음처럼 추가하면
[mysqld] log-bin = MyLogFileName
Plain Text
복사
아래와 같은 이름으로 로그 파일 생성

References