로그를 정리하거나 가장 큰 파일을 찾고 공간을 줄이려면 어떻게 해야 합니까? 이 중요한 순간에 1.7T를 사용하지 않았다는 것도 이해가 되지 않습니다.
Mysqld는 99% 사용되어 실행되고 있지 않습니다.
# 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
.NET 파일에는 더 이상 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 데이터 디렉터리를 더 큰 파티션( /home
)으로 옮기는 것입니다.
$ mv /var/lib/mysql /home
$ ln -s /home/mysql /var/lib/mysql
링크를 사용하지 않으려면 에서 스토리지를 사용하도록 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 디렉터리에 위치하며 데이터베이스 파일보다 몇 배 더 많은 디스크 공간을 소비하는 경향이 있습니다. 이는 바이너리 로그가 데이터베이스 데이터 변경 사항을 추적하기 위해 모든 SQL 데이터 수정 쿼리(UPDATE, INSERT 등)를 저장하기 때문입니다. Binlog는 shell rm 명령을 통해 직접 삭제해서는 안 되며, 실행 중인 데이터베이스 엔진에서 mysql 명령을 통해서만 삭제해야 합니다. 이를 위해서는 mysql 서버를 시작해야 합니다. /var/lib/mysql 디렉토리를 /home 파티션으로 옮기면 / 파티션에서 mysql 서버를 시작할 수 있는 충분한 공간을 확보해야 한다고 생각합니다. 따라서 프로그램은 다음과 같아야 합니다.
- @John WH Smith의 설명에 따라 mysql 데이터를 /home 파티션으로 이동합니다.
- @John WH Smith의 설명에 따라 datadir 변수를 변경하고 mysql 서버를 실행하십시오.
- PMA, mysql 또는 기타 클라이언트를 통해 루트로 mysql 서버에 연결합니다.
- RESET MASTER 또는 PURGE BINARY LOGS TO 명령을 사용하여 바이너리 로그를 제거합니다(자세한 내용은 mysql 설명서 참조).
- mysql 서버를 중지합니다. mysql 구성 파일을 편집합니다. "log_bin" 변수의 값을 기억하세요. 여기에는 바이너리 로그 파일의 경로와 이름이 포함됩니다.
- 모든 binlog 파일(binlog 인덱스 포함)을 /home/mysql/ 디렉터리로 이동합니다.
- 'log_bin' 변수 값을 'log_bin = /home/mysql/mysql-bin.log'로 변경한 후 mysql 데이터베이스를 시작합니다.