사내 JIRA, WIKI 관리하는 서버의 디스크가 꽉차 간다.

$ df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/xvda1      296G  263G   33G  89% /
devtmpfs        3.7G   56K  3.7G   1% /dev

tmpfs 3.7G 0 3.7G 0% /dev/shm




뒤져보니 작년부터 binary log가 쌓여왔다.

$ ls -al /var/lib/mysql/
... 중략 ...
-rw-rw---- 1 mysql mysql 1073772329 Jan  8  2017 mysql-bin.000179
-rw-rw---- 1 mysql mysql 1073766072 Jan 12  2017 mysql-bin.000180
-rw-rw---- 1 mysql mysql 1073750174 Jan 16  2017 mysql-bin.000181
-rw-rw---- 1 mysql mysql 1073750131 Jan 19  2017 mysql-bin.000182
-rw-rw---- 1 mysql mysql 1073778740 Jan 23  2017 mysql-bin.000183
-rw-rw---- 1 mysql mysql 1073785719 Jan 26  2017 mysql-bin.000184
-rw-rw---- 1 mysql mysql 1073742779 Jan 30  2017 mysql-bin.000185
-rw-rw---- 1 mysql mysql 1073754445 Feb  2  2017 mysql-bin.000186
-rw-rw---- 1 mysql mysql 1073779324 Feb  8  2017 mysql-bin.000187
-rw-rw---- 1 mysql mysql 1073757781 Feb 11  2017 mysql-bin.000188
-rw-rw---- 1 mysql mysql 1073764278 Feb 15  2017 mysql-bin.000189
-rw-rw---- 1 mysql mysql 1073742518 Feb 18  2017 mysql-bin.000190
... 중략 ...

 



삭제해야지라고 생각했지만 이런 파일은 생각없이 rm으로 지우면 안되지

뒤져보니 설정 1줄 추가하면 된다. 

저렇게 하면 3일치만 남겨놓고 나머지는 다 지운다.

/etc/my.cnf


[mysqld]

... 중략 ...

 

expire_logs_days=3



이게 서비스 중인데

2017년부터 안 건드렸다면 함부로 mysql 데몬을 restart할 수가 없다.

이 회사에 온지 몇달 안되서 그간 바뀐 설정이 뭐인지도 모르고, 

stop은 되겠지만 start 가 안되면... 괜히 여러사람 피곤해진다.


쫄아서 찾아보니 reload가 있다.

nginx reload하듯이 설정을 다 읽어와주는 것인가!! (결론은 아니었다. 😭)

% cat /etc/init.d/mysqld
 
... 중략 ...
  reload)
    exit 3
    ;;

 


exit 3이니까 SIGQUIT일테고 mysqld에서 지정한 시그널 핸들러에 의해 동작.

찾아보니 table의 grant를 reload 한다. 😭

https://dev.mysql.com/doc/refman/5.5/en/mysqladmin.html
 
reload
Reload the grant tables.

 



결국 SET GLOBAL을 이용해서 세팅을 바꿔주었다. 


mysql> SET GLOBAL expire_logs_days = 3;
Query OK, 0 rows affected (0.00 sec)
 
mysql> show global variables like 'expire_logs_days';
+------------------+-------+
| Variable_name    | Value |
+------------------+-------+
| expire_logs_days | 3     |
+------------------+-------+
1 row in set (0.00 sec)

 



세팅 바꿔주고 1시간 정도 있다가

df로 줄어들었나 확인해보았다. 

안 줄었다. 😭

언제 줄어드는지 검색해도 안나온다. 

(프로세스 내부에서 뭔가 특정 시간에 주기적으로 돌면서 처리할듯한데.. )

아직 디스크 full 되려면 2~3주 남았으니 일단 퇴근하자.


다음날 출근해서 df로 확인해보니 지워졌다.

$ df
Filesystem     1K-blocks     Used Available Use% Mounted on
/dev/xvda1     309503980 94337032 215066700  31% /
devtmpfs         3822500       56   3822444   1% /dev
tmpfs            3831692        0   3831692   0% /dev/shm


 



물론 정말 급한 경우였다면 PURGE를 이용해서 바로 지워버릴 수도 있다.


https://dev.mysql.com/doc/refman/8.0/en/purge-binary-logs.html


PURGE BINARY LOGS TO 'mysql-bin.010'; 

PURGE BINARY LOGS BEFORE '2008-04-02 22:46:26'; 



반응형

+ Recent posts