2009-02-23 14 views
14

Qual è il modo più sicuro per troncare il log delle query lente di MySQL (in Linux principalmente, ma Windows sarebbe utile sapere) mentre MySQL è in esecuzione?Truncate Slow Query Accedi a MySQL

Di sicuro voglio dire:

  • non devono causare problemi di autorizzazioni
  • non deve saltare indietro alla sua dimensione originale prossima volta il suo allegato alla

risposta

20

Per troncare un file a prescindere se è aperto da un'applicazione in esecuzione fare:

> /var/logs/your.log 

al prompt della shell.

+0

Non ho studiato a fondo, ma questo approccio non ha la possibilità di troncare nel mezzo di una voce di registro, introducendo così errori nel file di registro? Mi piace questa soluzione (specialmente per aggiungere alla mia conoscenza generale di Linux), ma da quello che vedo, la soluzione di @ tjanofsky è più solida. – rinogo

+0

@rinogo: buona domanda. Dovrei controllare se un singolo 'write()' syscall può essere interfogliato con un altro. OTOH, non mi aspetterei che il logger usi più di uno 'write()' per scrivere una linea da registrare. – vartec

+0

È vero! Tuttavia, qualcosa da tenere a mente è che nel caso del log delle query lente di MySQL, ogni "voce" è in realtà più righe. Quindi, nel peggiore dei casi, ogni "entrata" potrebbe consistere in più chiamate write(), che presenterebbero uno scenario molto più vulnerabile a questo problema. – rinogo

5

Se si tratta di una preoccupazione in corso, è necessario dare un'occhiata a logrotate in quanto può farlo per voi.

Non sapevo di echo > file.log, anche se ha senso. Ho sempre usato cat /dev/null > file.log.

Inoltre, è importante sottolineare che è molto importante non eliminare un file di registro in fase di scrittura perché il programma che lo ha aperto continuerà a scrivere sul file. È molto difficile capire perché tutto il tuo spazio su disco è finito!

+0

Nel caso di Linux, questo è il modo migliore e più semplice e la risposta. – shgnInc

16

Da here:

è possibile spostare il file aperto, poi dire mysqld per irrigare i registri, che aprirà un nuovo registro.

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