본문 바로가기
데이터베이스/MySQL

mysql-bin 파일이 뭐야?

by leedonggeun 2023. 5. 24.
이 글은 MySQL 5.7 버전을 기반으로 작성하였습니다.

 

어느 날 갑자기 MySQL이 설치된 서버의 용량이 70%가 넘었다고 알림이 왔다.
당장 서버에 들어가 mysql 데이터 디렉터리(datadir)를 확인해 보니 아래와 같이 용량이 많은 mysql-bin 파일이 보였다.

용량은 왜이리 커? 왜이리 많아?

 

1. mysql-bin이 뭐야?

mysql-bin 파일은 MySQL 데이터베이스의 binary 로그 파일입니다.
이 로그는 MySQL에서 수행된 모든 Insert, Update, Delete 등의 트랜잭션이 커밋될 때 기록됩니다.

이를 통해 데이터의 복구 혹은 복제가 가능합니다.
예를 들어, 장애 발생 시 장애 발생 이전의 상태로 데이터베이스를 원복하거나 다른 서버로 복제 / Replication 등을 할 때 사용할 수 있습니다.

보통 mysql-bin.000001 부터 시작하여 순차적으로 시퀀셜을 가지고 증가하며 이 binary 로그 파일은 MySQL의 my.cnf에 설정한 datadir 경로에 저장됩니다.

이 파일은 크기가 크고 데이터의 복제 등이 가능하므로 적절한 백업 전략과 저장 기간을 설정하는 것이 좋습니다.

 

2. mysql-bin을 조회하는 방법

위에서 설명했듯이 MySQL의 datadir 설정에 따라 저장되어 해당 경로에서 확인이 가능하지만,  MySQL의 SQL 명령어로 조회할 수 있습니다.

mysql> SHOW BINARY LOGS;
+------------------+------------+
| Log_name         | File_size  |
+------------------+------------+
| mysql-bin.001867 | 1074322480 |
| mysql-bin.001868 | 1073741885 |
| mysql-bin.001869 | 1073778036 |
| mysql-bin.001870 | 1074246838 |
| mysql-bin.001871 |  174514009 |
| mysql-bin.001872 |   14184268 |
| mysql-bin.001873 | 1074206858 |
| mysql-bin.001874 | 1073741892 |
| mysql-bin.001875 |  744313033 |
| mysql-bin.001876 | 1074176933 |
| mysql-bin.001877 | 1073742429 |
| mysql-bin.001878 |  447885336 |
| mysql-bin.001879 | 1073742301 |
| mysql-bin.001880 | 1073742678 |

...
..
.

 

3. mysql-bin 파일을 삭제하는 방법

물론 데이터가 쌓인 실제 경로에서 rm 명령어를 이용해 삭제해도 문제가 없습니다.
하지만, 그럴 경우 MySQL 에는 해당 로그 정보가 남아있으니 반드시 SQL 명령어를 통해 삭제를 진행해야 합니다.

mysql> PURGE BINARY LOGS TO 'mysql-bin.001888'; # mysql-bin.001888 이전의 모든 binary log 파일 삭제
Query OK, 0 rows affected (0.75 sec)

mysql> SHOW BINARY LOGS;
+------------------+------------+
| Log_name         | File_size  |
+------------------+------------+
| mysql-bin.001888 | 1073742249 |
| mysql-bin.001889 |  410983253 |
| mysql-bin.001890 | 1073742113 |
| mysql-bin.001891 | 1073742617 |
| mysql-bin.001892 |  502103890 |
| mysql-bin.001893 |  144538449 |
| mysql-bin.001894 | 1073741962 |
| mysql-bin.001895 |  925947551 |
| mysql-bin.001896 | 1073785997 |
| mysql-bin.001897 |  743489065 |
| mysql-bin.001898 |    3027300 |
| mysql-bin.001899 |  928054749 |
| mysql-bin.001900 | 1073742065 |
| mysql-bin.001901 | 1073757383 |
| mysql-bin.001902 |  353197798 |
| mysql-bin.001903 | 1073791061 |
| mysql-bin.001904 | 1041764289 |
| mysql-bin.001905 | 1073909804 |
| mysql-bin.001906 |  522794876 |
| mysql-bin.001907 | 1073743304 |
| mysql-bin.001908 | 1073752942 |
| mysql-bin.001909 | 1073765005 |
| mysql-bin.001910 |  473995699 |
| mysql-bin.001911 | 1075400905 |
| mysql-bin.001912 | 1073756153 |
| mysql-bin.001913 | 1050065654 |
+------------------+------------+
26 rows in set (0.00 sec)

mysql>

 

4. mysql-bin 파일 삭제 주기 설정

이렇게 주기적으로 정리해줘야 하는 파일을 매번 수동으로 관리하기에는 불편함이 있습니다.
이에 우리는 자동으로 특정일자가 지나면 삭제하는 값을 설정해 보겠습니다.

mysql> SHOW GLOBAL VARIABLES LIKE 'expire_logs_days';
+------------------+-------+
| Variable_name    | Value |
+------------------+-------+
| expire_logs_days | 0     |
+------------------+-------+
1 row in set (0.00 sec)

expire_logs_days 값은 바이너리 로그 파일을 정리하는 날짜를 지정해 주는 변수로, default 값은 0입니다. (삭제하지 않음)
저는 일주일간 보관 후 삭제할 수 있도록 설정하겠습니다.

mysql> SET GLOBAL expire_logs_days = 7;
Query OK, 0 rows affected (0.00 sec)

mysql> SHOW GLOBAL VARIABLES LIKE 'expire_logs_days';
+------------------+-------+
| Variable_name    | Value |
+------------------+-------+
| expire_logs_days | 7     |
+------------------+-------+
1 row in set (0.01 sec)

 

5. 마치며...

MySQL의 mysql-bin 파일에 대해 조회/삭제하는 방법을 알아보았습니다.
이 파일은 크기가 클 뿐 아니라 복구/복제 등에 사용될 수 있는 중요한 파일이므로 적절한 관리가 필요합니다.

댓글