디스크가 채워져 mysqld가 더 이상 시작되지 않습니다.

디스크가 채워져 mysqld가 더 이상 시작되지 않습니다.

로그를 정리하거나 가장 큰 파일을 찾아 공간을 줄이는 방법은 무엇입니까? 그리고 이 중요한 순간에 1.7T가 사용되지 않는다는 것도 이해가 되지 않습니다.

99%가 사용되었기 때문에 Mysqld가 실행되고 있지 않습니다.

# df -h
Filesystem      Size  Used Avail Use% Mounted on
rootfs           20G   19G  279M  99% /
/dev/root        20G   19G  279M  99% /
devtmpfs         32G  268K   32G   1% /dev
/dev/md3        1.8T  196M  1.7T   1% /home
tmpfs            32G     0   32G   0% /dev/shm
/dev/root        20G   19G  279M  99% /var/named/chroot/etc/named
/dev/root        20G   19G  279M  99% /var/named/chroot/var/named
/dev/root        20G   19G  279M  99% /var/named/chroot/etc/named.conf
/dev/root        20G   19G  279M  99% /var/named/chroot/etc/named.rfc1912.zones
/dev/root        20G   19G  279M  99% /var/named/chroot/etc/rndc.key
/dev/root        20G   19G  279M  99% /var/named/chroot/usr/lib64/bind
/dev/root        20G   19G  279M  99% /var/named/chroot/etc/named.iscdlv.key
/dev/root        20G   19G  279M  99% /var/named/chroot/etc/named.root.key

답변1

MySQL 데이터는 /var/lib. 에 더 이상 공간이 없습니다 /var. MySQL이 시작되지 않습니다. 실제로는 매우 간단합니다. 보시고 /var/log정리해보세요. 다음과 같은 것을 추천합니다( gz의 모든 파일 삭제 /var/log).

$ find /var/log -iname "*.gz" -delete

물론, 먼저 삭제되는 항목을 확인하고 싶을 수도 있습니다.

$ find /var/log -iname "*.gz"

1.7TB가 제공됩니다 /home. 그러나 /var그렇지 않습니다 /home. 그래서 /home사용되지 않습니다. 간단하기도 합니다.

/var시스템을 설정할 때 훨씬 더 큰 파티션으로 분리했어야 합니다 . 이제 제가 찾아볼 수 있는 가장 좋은 해결책은 MySQL datadir을 더 큰 파티션( /home)으로 옮기는 것입니다.

$ mv /var/lib/mysql /home
$ ln -s /home/mysql /var/lib/mysql

링크를 사용하지 않으려면 /home. 다음을 편집 /etc/mysql/my.cnf하고 변경하세요.

datadir = /var/lib/mysql

이에:

datadir = /home/mysql

이제 MySQL에는 사용 가능한 공간이 있으므로 문제 없이 시작될 것입니다. 하지만 이렇게 중요한 데이터베이스를 호스팅하는 경우 파티션 구성표를 다시 고려해야 합니다.

모든 것이 잘 진행되고 있다면 애플리케이션이 로그에 너무 많은 내용을 기록해서는 안 되므로 로그 내용을 조사할 수도 있습니다. 어딘가에서 제대로 작동하려면 뭔가 어려움을 겪을 수도 있습니다.

답변2

이것은 가장 큰 파일을 찾는 데 유용한 명령입니다.

du -ak /var | sort -nr | less

용법:

du -ak-a파티션 에 있는 모든( ) 파일 의 디스크 사용량을 요약 /var하고 크기를 킬로바이트( -k) 단위로 인쇄합니다.

sort -nr파일 목록을 연결하여 역순( -r) 숫자( -n) 순서로 정렬합니다.

less가장 큰 위반자를 맨 위에서 볼 수 있고 목록에서 앞뒤로 이동할 수 있도록 출력에 페이지를 매깁니다.

답변3

데이터베이스 파일 자체보다는 mysql 바이너리 로그에 문제가 있을 수도 있다는 점을 알고 싶습니다. Binlog는 많은 경우 기본적으로 /var/log/mysql 디렉토리에 위치하며 데이터베이스 파일보다 몇 배 더 많은 디스크 공간을 소비하는 경향이 있습니다. 이는 binlog가 데이터베이스 데이터 변경 사항을 추적하기 위해 모든 SQL 데이터 수정 쿼리(UPDATE, INSERT 등)를 저장하기 때문입니다. Binlog는 실행 중인 데이터베이스 엔진에서 mysql 명령을 사용하는 것이 아니라 쉘 rm 명령으로 직접 제거하면 안 됩니다. 이를 위해서는 mysql 서버가 가동되어야 합니다. /var/lib/mysql 디렉토리를 /home 파티션으로 옮기면 / 파티션에서 mysql 서버를 시작할 수 있는 충분한 공간이 확보되어야 한다고 생각합니다. 따라서 절차는 다음과 같아야 합니다.

  1. @John WH Smith의 설명에 따라 mysql 데이터를 /home 파티션으로 이동합니다.
  2. @John WH Smith의 설명에 따라 datadir 변수를 변경하고 mysql 서버를 실행하십시오.
  3. PMA, mysql 또는 기타 클라이언트를 통해 루트 사용자로 mysql 서버에 연결합니다.
  4. RESET MASTER 또는 PURGE BINARY LOGS TO 명령을 사용하여 바이너리 로그를 제거합니다(자세한 내용은 mysql 설명서 참조).
  5. mysql 서버를 중지합니다. mysql 구성 파일을 편집합니다. 'log_bin' 변수의 값을 기억하세요. 여기에는 바이너리 로그 파일의 경로와 이름이 포함됩니다.
  6. binlog 인덱스를 포함한 모든 binlog 파일을 /home/mysql/ 디렉터리로 이동합니다.
  7. 'log_bin' 변수 값을 'log_bin = /home/mysql/mysql-bin.log'로 변경한 후 mysql 데이터베이스를 시작합니다.

관련 정보