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 |
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
복사
아래와 같은 이름으로 로그 파일 생성