나는 느린 쿼리를 포착 logrotate
하고 매주 순환하여 1년의 가치를 절약하고 싶습니다. 로그는 다음 형식을 취합니다.
-rw-r-----. 1 mysql root 1239 Feb 21 18:46 mysqld1-slow.log
-rw-r-----. 1 mysql root 885 Feb 11 14:48 mysqld2-slow.log
-rw-r-----. 1 mysql root 885 Feb 22 08:58 mysqld3-slow.log
-rw-rw-rw-. 1 mysql root 802 Feb 11 14:47 mysqld-slow.log
로그가 자주 기록되기 때문에 누락된 내용이 없는지 어떻게 확인합니까 logrotate
? 프로세스 자체에서는 파일이 생성되지 않으며 원본 파일이 필요합니다. 나는 이것이 그것을 할 것이라고 생각합니다 :
/var/log/mysqld*-slow.log {
missingok
notifempty
weekly
rotate 52
compress
delaycompress
create 0644 mysql root
}
따라서 이전 파일을 압축하고 올바른 권한으로 동일한 파일 이름을 생성해야 하지만 logrotate가 동작 중 쓰기를 어떻게 처리하는지 잘 모르겠습니다.
답변1
이 기능은 copytruncate
작업을 수행하는 것 같습니다
copytruncate Truncate the original log file in place after creating a copy, instead of moving the old log file and optionally creating a new one. It can be used when some program cannot be told to close its logfile and thus might continue writing (appending) to the previous log file forever. Note that there is a very small time slice between copying the file and truncating it, so some logging data might be lost. When this option is used, the create option will have no effect, as the old log file stays in place.
나는 이것을 제자리에 두었습니다.