본문 바로가기

리눅스

MySQL에서 Binary Log를 설정하는 방법

반응형

MySQL에서 Binary Log(binlog)를 설정하는 방법

테스트 환경

운영체제 버전

$ lsb_release -d
Description:    Ubuntu 24.04.1 LTS

MySQL 버전

$ mysqld -V
/usr/sbin/mysqld  Ver 8.0.40-0ubuntu0.24.04.1 for Linux on x86_64 ((Ubuntu))

1. Binary Log 현재 상태 확인

SQL 쿼리로 확인

SHOW VARIABLES LIKE 'log_bin%';
SHOW VARIABLES LIKE 'binlog_expire_logs_seconds';
SHOW VARIABLES LIKE 'max_binlog_size';

MySQL 설정 파일 확인

cat /etc/mysql/mysql.conf.d/mysqld.cnf
  • log_bin 값이 비어 있으면 binlog가 비활성화된 상태입니다.

2. Binary Log 활성화(my.cnf 설정)

디렉토리 권한 확인

더보기

---

sudo mkdir -p /var/lib/mysql
sudo chown mysql:mysql /var/lib/mysql
sudo chmod 750 /var/lib/mysql

binlog는 MySQL 사용자(mysql)가 쓰기 가능해야 합니다.

---

[mysqld] 섹션에 설정 추가

vim /etc/mysql/mysql.conf.d/mysqld.cnf
[mysqld]
server_id = 1
# Binary Log 설정
log_bin = /var/lib/mysql/mysql-bin
log_bin_index = /var/lib/mysql/mysql-bin.index
binlog_format = ROW
binlog_expire_logs_seconds = 604800 # 7일 후 자동 삭제
max_binlog_size = 1G
sync_binlog = 1
  • server_id : 고유한 서버 ID (복제 환경에서 중복되면 안 됨)
  • log_bin : binlog 파일 경로 (기본은 mysql-bin)
  • log_bin_index : binlog 인덱스 파일 경로
  • binlog_format : 로그 형식 (ROW 권장, STATEMENT, MIXED 가능)
  • binlog_expire_logs_seconds : 오래된 binlog 자동 삭제 기간 (초 단위)
  • max_binlog_size : 단일 binlog 파일의 최대 크기
  • sync_binlog : binlog 쓰기 동기화 정책[1 : 안정성 ↑ (성능 약간↓), 0 : 성능 ↑ (충돌 시 손상 위험 약간 있음)]

MySQL 서버 재시작

sudo systemctl restart mysql
728x90

3. 설정 반영 확인

Binlog 설정 확인

SHOW VARIABLES LIKE 'log_bin%';
+---------------------------------+--------------------------------+
| Variable_name                   | Value                          |
+---------------------------------+--------------------------------+
| log_bin                         | ON                             |
| log_bin_basename                | /var/lib/mysql/mysql-bin       |
| log_bin_index                   | /var/lib/mysql/mysql-bin.index |
| log_bin_trust_function_creators | OFF                            |
| log_bin_use_v1_row_events       | OFF                            |
+---------------------------------+--------------------------------+

자동 삭제 주기 확인

SHOW VARIABLES LIKE 'binlog_expire_logs_seconds';
+----------------------------+--------+
| Variable_name              | Value  |
+----------------------------+--------+
| binlog_expire_logs_seconds | 604800 |
+----------------------------+--------+

파일 크기 정책 확인

SHOW VARIABLES LIKE 'max_binlog_size';
+-----------------+------------+
| Variable_name   | Value      |
+-----------------+------------+
| max_binlog_size | 1073741824 |
+-----------------+------------+

현재 활성 로그 파일 확인

SHOW MASTER STATUS;
+------------------+----------+--------------+------------------+-------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+------------------+-------------------+
| mysql-bin.000001 |  9293959 |              |                  |                   |
+------------------+----------+--------------+------------------+-------------------+

전체 Binlog 목록 확인

SHOW BINARY LOGS;
+------------------+-----------+-----------+
| Log_name         | File_size | Encrypted |
+------------------+-----------+-----------+
| mysql-bin.000001 |   9929681 | No        |
+------------------+-----------+-----------+

4. Binary Log 로그 삭제

특정 시점까지 삭제

  • mysql-bin.000012 직전까지의 로그(000011 이하)를 모두 삭제
PURGE BINARY LOGS TO 'mysql-bin.000012';

특정 날짜 이전 로그 삭제

  • 지정한 날짜 이전의 모든 binlog 파일을 삭제
PURGE BINARY LOGS BEFORE '2025-11-01 00:00:00';

 

728x90
반응형