2009-02-23 10 views
14

¿Cuál es la forma más segura de truncar el registro de consultas lentas de MySQL (en Linux principalmente, pero Windows sería útil saberlo) mientras se ejecuta MySQL?Truncar consulta lenta Iniciar sesión MySQL

Por segura que quiero decir:

  • no debe causar ningún problema de permisos
  • no debe saltar de nuevo a su tamaño original próxima vez anexa a su

Respuesta

20

Para truncar un archivo sin tener en cuenta si lo abre una aplicación en ejecución, haga:

> /var/logs/your.log 

en el indicador del intérprete de comandos.

+0

No he investigado a fondo, pero este enfoque no tiene la posibilidad de truncar en el medio de una entrada de registro, lo que introduce errores en el archivo de registro? Me gusta esta solución (especialmente para agregar a mi conocimiento general de Linux), pero por lo que puedo ver, la solución de @ tjanofsky es más robusta. – rinogo

+0

@rinogo: Buena pregunta. Tendría que comprobar si single 'write()' syscall se puede intercalar con otro. OTOH, no esperaría que el registrador use más de un 'write()' para escribir una línea para iniciar sesión. – vartec

+0

¡Eso es verdad! Sin embargo, algo a tener en cuenta es que en el caso del registro lento de consultas de MySQL, cada "entrada" es en realidad varias líneas. Entonces, en el peor de los casos, cada "entrada" podría consistir en múltiples llamadas write(), que presentarían un escenario mucho más vulnerable a este problema. – rinogo

5

Si esto va a ser una preocupación constante, debería echar un vistazo al logrotate ya que puede hacer esto por usted.

No sabía acerca de echo > file.log, aunque tiene sentido. Siempre he usado cat /dev/null > file.log.

Además, debe tenerse en cuenta que es muy importante no eliminar un archivo de registro que se está escribiendo porque el programa que lo tiene abierto continuará escribiendo en el archivo. ¡Es muy difícil descubrir por qué se ha ido todo el espacio de tu disco duro!

+0

En Linux, esta es la mejor y más fácil forma y respuesta. – shgnInc

16

De here:

se puede mover el archivo abierto, entonces decirle a mysqld para eliminar registros, que abrirán un nuevo registro.

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