J-한솔넷

기록 보관 : MySQL 8.0.29 서버 이중화 설정으로 SSD 100% 문제 발생 본문

웹 개발관련/데이터베이스

기록 보관 : MySQL 8.0.29 서버 이중화 설정으로 SSD 100% 문제 발생

jhansol 2024. 1. 22. 22:45

저의 개인 홈페이지에 있던 내용을 옮겨 기록하고자 합니다. 제가 게으른 탓에 활용하기 힘들고 유지를 하기에 금전적으로도 낭비다 생각되어 님길 것은 남기고, 버릴 것은 버리고 사이트를 없에기 위함입니다. 기존 내용 그대로 아래와 같이 옮겼습니다.


오늘(2022년 10월 26일) 고객사로부터 서버 접속이 안되고 오류가 출력된다는 통보를 상사를 통해서 들어와서 서버를 확인해보니 SSD에 할당단 파티션의 용량이 100%로 꽉찬 상태라 더 이상의 로깅이나, 파일 저장을 할 수 없는 상태가 발생했다.

로그파일도 삭제하고, 어느 폴더가 많은 용량의 파일이 저장되어 있는지 확인해보니 아래와 같이 MySQL 데이터 폴더에 서버 이중화를 위한 binary log 파일이 이렇게나 많이 쌓여 있다. 이 설정은 내가 손대지 않아서 이렇게 되리라고는 생각지도 못했던 일이다. 저장 용량이 무려 40기가바이트에 이른다. MySQL 버전은 8.0.29 이다.

우선 /etc/mysql/mysql.conf.d/mysqld.cnf 파일에 아래와 같이 로그파일 보관 기간을 1일로 해두었다. 이중화가 필요치 않아 이 기능을 끄고 싶은데 옵션을 모르겠다. 이선 용량이 많이 증가하지 않도록 보관 기간만 설정했다.

# server-id             = 1
# log_bin                       = /var/log/mysql/mysql-bin.log
# binlog_expire_logs_seconds    = 2592000
max_binlog_size   = 100M
# binlog_do_db          = include_database_name
# binlog_ignore_db      = include_database_name
expire_logs_days        = 1

마지막 로그파일 하나만 남기고 삭제하도록 아래와 같이 명령을 입력하여 삭제했다. 00068번이 마지막 파일이라 이것만 남겼다.

$ mysql -u root
purge master logs to 'binlog.000681';

그리고 서버를 재실행하고 아래와 같이 만료 기간에 관련된 변수를 조회해보니 내가 설정한 1일로 보유기간이 지정되어 있다.

mysql> show variables like '%expire%';
+--------------------------------+-------+
| Variable_name                  | Value |
+--------------------------------+-------+
| binlog_expire_logs_auto_purge  | ON    |
| binlog_expire_logs_seconds     | 0     |
| disconnect_on_expired_password | ON    |
| expire_logs_days               | 1     |
+--------------------------------+-------+
4 rows in set (0.01 sec)