it-swarm-ko.tech

mysql 바이너리 로그는 디스크를 가득 찼습니다

갑자기 웹 사이트가 다운되고 (drupal 6.19) mysql을 시작할 수 없습니다 (너무 많은 테이블이 다운 됨). df -h 를 확인하여 매우 큰 이진 로그 파일로 인해 MySQL 파티션이 가득 찼음을 알았습니다 (이진 로그는 하루 동안 만 유지합니다- 만료 _ 로그 _ 일 = 1); bin 로그 중 하나에 대해 mysqlbinlog를 확인하여 대부분의 항목이 캐시 테이블 (cache_form, boost_cache, boost_cache_relationships, cache_content 등) 및 세션 테이블에 대한 것임을 알았습니다. 일부 데이터는 여러 번 반복됩니다.
그건 그렇고, 나는 watch ls -lh 있고 bin-log 파일은 기하 급수적으로 커졌습니다 (1 ~ 2 분마다 100M 파일 크기의 새로운 binlog 파일이 생겼습니다 !!)

이 원인을 알 수 있습니까? 이 문제를 어떻게 해결할 수 있습니까?

7
Alaa

다른 캐시 백엔드를 사용하는 것이 한 가지 명백한 개선이라고 생각합니다.

단일 서버와 충분한 메모리가있는 경우 APC 백엔드를 사용할 수 있습니다 (D6 : http://drupal.org/project/cacherouter , D7 : http : // drupal. org/project/apc ) 자주 사용되는 다양한 캐시를 공유 메모리에 직접 갖습니다. 아마도 가장 빠른 캐시 솔루션 일 것입니다.

또 다른 대안은 Memcached 입니다. 캐시를 공유해야하는 다중 서버가있는 경우 특히 유용합니다.

Cache_form에는 현재 표시된 양식에 대한 정보가 포함되어 있기 때문에 캐시를 이동할 수 없으며 다른 정보와 같이 집계 된 정보뿐만 아니라 항상 지울 수있는 고유 정보가 포함되어 있으므로 실제로는 캐시가 아닙니다. 또한 일부 다른 캐시, 특히 cache_update는 데이터베이스에 보관하고 싶을 수 있습니다. 사용 된 모듈의 업데이트 정보에 대한 정보가 들어 있으므로 나머지와 같이 지워서는 안되므로 변경하지 않아야합니다 that 그리고 자주 가지고 있다면 다시 가져 오기가 매우 느릴 수 있습니다.

세션 정보를 데이터베이스 밖으로 옮길 수도 있습니다. 예를 들어 MongoDB 에 배치 할 수 있으며 다른 정보도있을 수 있습니다.

6
Berdir

저장소 로그의 날짜를 확인 했습니까? expire_logs_days 설정은 "자동-마법사"가 아닙니다. mysql을 재시작하거나 flush_logs 명령을 실행할 때 또는 max_binlog_size에 도달 할 때만 적용됩니다.

그런 다음 mysql은 현재 로그 파일을 회전시켜 (새 파일 생성) 1 일보다 오래된 파일을 삭제해야합니다 (귀하의 경우)

my.cnf 에서이 마지막 설정을 설정하고 expire_log_days .

2
corbacho