2009-02-23 16 views
14

Jaki jest najbezpieczniejszy sposób na skrócenie dziennika zapytań MySQL o powolne (w systemie Linux przede wszystkim, ale Windows byłby przydatny, aby wiedzieć), podczas gdy MySQL jest uruchomiony?Skróć powolne zapytanie Zaloguj się MySQL

Przez bezpieczny Znaczy:

  • Musi nie powoduje żadnych problemów z uprawnieniami
  • Nie może wrócić do swojego pierwotnego rozmiaru następnym razem jego dołączane do

Odpowiedz

20

Aby obciąć pliku niezależnie jeśli jest otwarty przez działającą aplikację, wykonaj:

> /var/logs/your.log 

w wierszu poleceń powłoki.

+0

Nie zbadałem dokładnie, ale czy to podejście nie ma szansy obcięcia w środku wpisu dziennika, wprowadzając błędy do pliku dziennika? Podoba mi się to rozwiązanie (szczególnie, aby dodać do mojej ogólnej wiedzy o Linuksie), ale z tego, co widzę, rozwiązanie @ tjanofsky'ego jest solidniejsze. – rinogo

+0

@rinogo: Dobre pytanie. Musiałbym sprawdzić, czy pojedynczy 'write()' syscall może być przeplatany z innym. OTOH, nie oczekiwałbym, że rejestrator użyje więcej niż jednego 'write()' do napisania linii do zalogowania. – vartec

+0

To prawda! Należy jednak pamiętać, że w przypadku dziennika wolnego dziennika MySQL każde "wejście" ma w rzeczywistości wiele linii. W najgorszym scenariuszu każde "wejście" może w rzeczywistości składać się z wielu wywołań write(), które przedstawiałyby scenariusz znacznie bardziej podatny na ten problem. – rinogo

5

Jeśli to będzie trwało, powinieneś spojrzeć na logrotate, ponieważ może to zrobić za Ciebie. Nie miałem pojęcia o echo > file.log, ale to ma sens. Zawsze używałem cat /dev/null > file.log.

Należy również zauważyć, że ważne jest, aby nie usuwać pliku dziennika, do którego są zapisywane, ponieważ jest ważne, ponieważ program, który go otworzył, będzie nadal zapisywać do pliku. Bardzo trudno jest zrozumieć, dlaczego nie ma już miejsca na dysku twardym!

+0

W przypadku systemu Linux jest to najlepszy i najprostszy sposób i odpowiedź. – shgnInc

16

Od here:

Można przenieść otwartego pliku, a następnie powiedzieć mysqld do spłukiwania kłody, które otwierają nowy dziennik.

shell> cd mysql-data-directory 
shell> mv mysql.log mysql.old 
shell> mv mysql-slow.log mysql-slow.old 
shell> mysqladmin flush-logs