리눅스서버

쓸모없는 로그파일 지워서 디스크용량 확보하기

리눅스 서버운영을 하다보면 아래와 같은 증상이 있을때가 있습니다.

  • 일반계정에서 권한(소유자,퍼미션)이 있는 데도 디렉토리 생성과 파일 생성(업로드)가 안된다.
  • php-fpm, mysql, nginx 서버가 먹통이 되거나 start 에러가 난다.


이때 "df -h" 명령으로 디스크 용량을 확인하면 대부분 아래처럼 사용공간이 100%로 꽉 차있다.

1.png


이러니까 파일생성(업로드)가 안됬던 거군요.. 단, root계정에서는 100%임에도 불구하고, 파일생성이 될 수도 있어요.

"아무튼 왜 이렇게 사용용량이 많은 걸까" 라는 생각이 듭니다.. "너무 많이 올렸나?", "용량을 늘려야되나?"


먼저 디렉토리별 용량체크를 해봅시다. 대부분 오래 방치된 로그파일 용량때문일 겁니다.

"du -sh [ 경로/* ]" 명령으로 용량을 많이 차지한 디렉토리들을 체크하면 됩니다.

2.png


! 용량이 많으면 체크하는 데 시간이 걸립니다.


이런식으로 용량많이 차지한 파일들을 찾아냅니다. 대부분 로그파일일 겁니다.

"/var/log" 로그 디렉토리에서 오래됬고, 쓸모없는 로그파일을 제거하면 됩니다. 

파일제거를 해도 다시 빈파일이 새로 생성됩니다.


혹은 자신이 찾아낸 로그 디렉토리에서 파일을 제거합니다.



mysql-bin 로그

필자가 운영하는 서버에서는 "mysql-bin 로그"가 대부분의 용량을 차지했습니다.

mysql-bin 로그파일은 mysql서버에서 실행했던 모든 sql문이 기록된 파일입니다다. 

또한 바이너리 로그파일이므로 바로 볼 수 없고, text 파일로 변환해야 볼 수 있습니다.


그런데 이 "mysql-bin 로그"가 쌓이면 생각보다 용량을 많이 잡아먹는 요인이 됩니다.

그래서 이 로그를 정리할 필요가 있습니다. 다음은 로그 삭제방법입니다.


1. 먼저 mysql에 접속합니다.

# mysql -uroot -p


2. mysql-bin 로그가 얼마나 있는 지 확인합니다.

mysql> show binary logs;


3.png

! 전 이미 정리한 상태이므로 이것밖에 없습니다. 원랜 1GB가 넘는 파일들이 한 20개 정도 있었습니다.


3. 로그들을 삭제합니다.

#purge master logs to 'mysql-bin.로그번호' ;, 로그번호 이전 로그들을 모두 삭제

#아래예시는 000001 ~ 000023에 해당하는 로그들을 전부삭제합니다.


mysql> purge master logs to 'mysql-bin.000024';



#purge binary logs before '날짜’; 날짜 이전 로그들을 모두 삭제

#아래예시는 2014-09-01 00:00:00 이전에 생성된 로그들을 전부 삭제합니다.


mysql> purge binary logs before '2014-09-01 00:00:00’;


※ 부득이하게 디스크 사용량이 100%라서 mysql 서버에 접속이 안되는 경우

이런 경우 직접 로그파일을 삭제하는 수 밖에 없습니다


"/ mysql 설치된 경로 / data" 에 가면 "mysql-bin.000001, mysql-bin.000002, mysql-bin.000003등.." 이런 형식의 파일들이 있습니다.

그 파일들을 삭제하면 됩니다. 이때 "mysql-bin.index" 이란 파일도 같이 삭제해야 에러가 안납니다.

* mysql 서버가 정지된 상태에서 삭제해야합니다. ( service mysql stop )


4.png

삭제할 파일들.. (파일질라에서 서버접속했음.)


※ mysql-bin 로그 정리방법

mysql-bin 로그가 생성되지않도록 혹은 생성하되, 시간이 지나면 자동삭제되도록 하는 방법입니다.


/etc/my.cnf 파일에서 설정하면됩니다.


# mysql-bin 로그가 생성되지않도록하기

log-bin=mysql-bin

부분을 주석(#)처리합니다.


# mysql-bin 로그 자동삭제하기 (MySQL 5.0.3 이상)


# The MySQL server

[mysqld]

부분 아래에 있는 설정을 수정합니다. 없다면 붙여넣습니다.


max_binlog_size =  200M; (로그의 최대용량)

expire_logs_days=로그유지날짜; (3이면 3일이 지난 로그를 삭제합니다.) 


Atachment
첨부 4
?