리눅스 서버운영을 하다보면 아래와 같은 증상이 있을때가 있습니다.
- 일반계정에서 권한(소유자,퍼미션)이 있는 데도 디렉토리 생성과 파일 생성(업로드)가 안된다.
- php-fpm, mysql, nginx 서버가 먹통이 되거나 start 에러가 난다.
이때 "df -h" 명령으로 디스크 용량을 확인하면 대부분 아래처럼 사용공간이 100%로 꽉 차있다.
이러니까 파일생성(업로드)가 안됬던 거군요.. 단, root계정에서는 100%임에도 불구하고, 파일생성이 될 수도 있어요.
"아무튼 왜 이렇게 사용용량이 많은 걸까" 라는 생각이 듭니다.. "너무 많이 올렸나?", "용량을 늘려야되나?"
먼저 디렉토리별 용량체크를 해봅시다. 대부분 오래 방치된 로그파일 용량때문일 겁니다.
"du -sh [ 경로/* ]" 명령으로 용량을 많이 차지한 디렉토리들을 체크하면 됩니다.
! 용량이 많으면 체크하는 데 시간이 걸립니다.
이런식으로 용량많이 차지한 파일들을 찾아냅니다. 대부분 로그파일일 겁니다.
"/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;
! 전 이미 정리한 상태이므로 이것밖에 없습니다. 원랜 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 )
삭제할 파일들.. (파일질라에서 서버접속했음.)
※ 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일이 지난 로그를 삭제합니다.)