¿Cómo ver los archivos de registro en MySQL?

176

He leído que el servidor Mysql crea un archivo de registro donde mantiene un registro de todas las actividades, como cuándo y qué consultas se ejecutan.

¿Alguien puede decirme dónde existe en mi sistema? ¿Cómo puedo leerlo?

Básicamente, necesito hacer una copia de seguridad de la base de datos con una entrada diferente [copia de seguridad entre dos fechas], así que creo que necesito usar el archivo de registro aquí, por eso quiero hacerlo ...

Creo que este registro debe estar asegurado de alguna manera porque se puede registrar información confidencial como nombres de usuario y contraseña [si alguna consulta lo requiere]; entonces, ¿puede estar asegurado y no ser fácilmente visible?

Tengo acceso de root al sistema, ¿cómo puedo ver el registro?

Cuando intento abrir /var/log/mysql.log está vacío.

Este es mi archivo de configuración:

[client]
port        = 3306
socket      = /var/run/mysqld/mysqld.sock

[mysqld_safe]
socket      = /var/run/mysqld/mysqld.sock
nice        = 0

[mysqld]
log = /var/log/mysql/mysql.log 
binlog-do-db=zero



user        = mysql
socket      = /var/run/mysqld/mysqld.sock
port        = 3306
basedir     = /usr
datadir     = /var/lib/mysql
tmpdir      = /tmp
skip-external-locking

bind-address        = 127.0.0.1
#
# * Fine Tuning
#
key_buffer      = 16M
max_allowed_packet  = 16M
thread_stack        = 192K
thread_cache_size       = 8

general_log_file        = /var/log/mysql/mysql.log
general_log             = 1
Arjun
fuente

Respuestas:

164

Aquí hay una manera simple de habilitarlos. En mysql necesitamos ver a menudo 3 registros que se necesitan principalmente durante el desarrollo de cualquier proyecto.

  • The Error Log. Contiene información sobre los errores que ocurren mientras el servidor se está ejecutando (también inicio y detención del servidor)

  • The General Query Log. Este es un registro general de lo que está haciendo mysqld (conectar, desconectar, consultas)

  • The Slow Query Log. Consiste en sentencias SQL "lentas" (como lo indica su nombre).

Por defecto, no hay archivos de registro habilitados en MYSQL. Todos los errores se mostrarán en el syslog ( /var/log/syslog).

Para habilitarlos solo siga los pasos a continuación:

Paso 1: vaya a este archivo ( /etc/mysql/conf.d/mysqld_safe_syslog.cnf ) y elimine o comente esa línea.

Paso 2: vaya al archivo de configuración mysql ( /etc/mysql/my.cnf) y agregue las siguientes líneas

Para habilitar el registro de errores, agregue lo siguiente

[mysqld_safe]
log_error=/var/log/mysql/mysql_error.log

[mysqld]
log_error=/var/log/mysql/mysql_error.log

Para habilitar el registro de consultas generales, agregue lo siguiente

general_log_file        = /var/log/mysql/mysql.log
general_log             = 1

Para habilitar el registro de consulta lenta, agregue lo siguiente

log_slow_queries       = /var/log/mysql/mysql-slow.log
long_query_time = 2
log-queries-not-using-indexes

Paso 3: guarda el archivo y reinicia mysql usando los siguientes comandos

service mysql restart

Para habilitar los registros en tiempo de ejecución, inicie sesión en el cliente mysql ( mysql -u root -p) y proporcione:

SET GLOBAL general_log = 'ON';
SET GLOBAL slow_query_log = 'ON';

Finalmente, una cosa que me gustaría mencionar aquí es que leí esto desde un blog . Gracias. Esto funciona para mi.

Haga clic aquí para visitar el blog.

loyola
fuente
2
Creo que 'olvidaste' escribir algunas cosas. El paso 1 está incompleto y falta la oración del enlace 'blog'
Athafoud
Hola, @Athafoud, encuentra el enlace ahora.
loyola
3
El artículo del blog vinculado menciona la modificación /etc/mysql/conf.d/mysqld_safe_syslog.cnfsolo si se va a habilitar el registro de errores. Sin embargo, esta respuesta tal como está escrita actualmente parece sugerirla para cualquier registro.
Melebius
2
Mi versión del servidor es 5.6.35. La respuesta de Ross Smith II aquí funciona para mí. Tengo que configurar slow_query_log = 1;, slow_query_log_file = /var/log/mysql/mysql-slow-query.logy long_query_time = 60en [mysqld]. Cuando trato de comenzar con su configuración, el servidor se está iniciando, pero lentamente y con errores. Realmente supongo que las versiones difieren y en versiones posteriores Oracle quería unificar los nombres de las variables. Además: en mi humilde opinión, 2 segundos no es tan largo.
JackLeEmmerdeur
1
¿Qué pasa con el permiso en esos archivos? He visto en muchos casos que no se crean archivos de registro.
MagePsycho
42

Debe activar el registro de consultas en mysql.

  1. editar /etc/my.cnf

    [mysqld]
    log = / tmp / mysql.log
    
  2. reinicie la computadora o el servicio mysqld

    servicio mysqld reiniciar
    
  3. abra phpmyadmin / cualquier aplicación que use la consola mysql / mysql y ejecute una consulta

  4. cat /tmp/mysql.log (deberías ver la consulta)

danidacar
fuente
no importa, solo asegúrate de que una consulta se ejecute sobre el DB
danidacar
66
ruta no válida. Usted tiene /etc/my.cnf debe ser /etc/mysql/my.cnf
mystic cola
39

Los registros de MySQL están determinados por variables globales como:

  • log_error para el registro de mensajes de error;
  • general_log_filepara el archivo de registro de consulta general (si está habilitado por general_log);
  • slow_query_log_filepara el archivo de registro de consulta lenta (si está habilitado por slow_query_log);

Para ver la configuración y su ubicación, ejecute este comando de shell:

mysql -se "SHOW VARIABLES" | grep -e log_error -e general_log -e slow_query_log

Para imprimir el valor del registro de errores, ejecute este comando en la terminal:

mysql -e "SELECT @@GLOBAL.log_error"

Para leer el contenido del archivo de registro de errores en tiempo real, ejecute:

sudo tail -f $(mysql -Nse "SELECT @@GLOBAL.log_error")

Nota: Hit Control- Ccuando termine

Cuando el registro general está habilitado, intente:

sudo tail -f $(mysql -Nse "SELECT CONCAT(@@datadir, @@general_log_file)")

Para usar mysqlcon el acceso de contraseña, agregue -po -pMYPASSparámetro. Para mantenerlo recordado, se puede configurar en su ~/.my.cnf, por ejemplo,

[client]
user=root
password=root

Entonces será recordado por la próxima vez.

kenorb
fuente
1
O si necesita ingresar una contraseña, intente esto: mysql -p -se "MOSTRAR VARIABLES" | grep -e log_error -e general_log -e slow_query_log
Paul Chernoch
9

En mi (tengo instalado LAMP) / etc / mysql /my.cnf, encontré las siguientes líneas comentadas en la sección [mysqld]:

general_log_file        = /var/log/mysql/mysql.log
general_log             = 1

Tuve que abrir este archivo como superusuario, con terminal:

sudo geany /etc/mysql/my.cnf

(Prefiero usar Geany en lugar de gedit o VI, no importa)

Acabo de comentarlos y guardar el archivo y luego reiniciar mysql con

sudo service mysql restart

Ejecute varias consultas, abra el archivo anterior (/var/log/mysql/mysql.log) y el registro estaba allí :)

Línea
fuente
Si bien puede funcionar para usted, no lo hace para mí, incluso las principales excepciones como "Índice dañado" no se registran. Solo problemas de inicio y apagado.
user3338098
8

Del manual de referencia de MySQL:

Por defecto, todos los archivos de registro se crean en el directorio de datos.

Comprobar /var/lib/mysqlcarpeta

Mark Nenadov
fuente
1
pero no puedo abrir la carpeta mysql. Creo que la ruta del archivo de registro es /var/log/mysql/mysql.log pero no puedo abrirlo, ¿qué debo hacer?
Arjun
2
cómo me hago root, creo que soy el propietario, instalo el servidor, configuro la contraseña, así que debería ser el propietario, todavía está bloqueado para mí, ¿cómo puedo abrirlo?
Arjun
1
Forcé el CD en este directorio (tuve que crear un usuario raíz, que eliminé más tarde), pero cuando veo estos archivos, pensé que están encriptados :) Así que creo que no es una buena manera.
Línea
use y sudo -sluego intente ir a la carpeta mysql.
Rashedul Islam
El manual de MySQL está lleno de numerosas inconsistencias, de cualquier manera no existe dicho directorio en Windows.
user3338098
3

Para complementar la respuesta de loyola , vale la pena mencionar que a partir de MySQL 5.1 log_slow_queriesestá en desuso y se reemplaza conslow-query-log

El uso log_slow_querieshará que su service mysql restarto service mysql startfalle

Oussama Romdhane
fuente
1
shell> mysqladmin flush-logs


shell> mv host_name.err-old backup-directory
Prueba
fuente
77
Bienvenido a stackoverflow. Considere dar una explicación más detallada de cómo el código en su respuesta es relevante para la pregunta del OP. Además, el código debe estar sangrado por 4 espacios para permitir el formato adecuado.
Politank-Z
1

Además de las respuestas anteriores, puede pasar los parámetros de la línea de comandos al proceso mysqld para registrar opciones en lugar de editar manualmente su archivo conf. Por ejemplo, para habilitar el registro general y especificar un archivo:

mysqld --general-log --general-log-file=/var/log/mysql.general.log

Confirmando otras respuestas anteriores, mysqld --help --verbosele da los valores del archivo conf (por lo tanto, ejecutar con opciones de línea de comando general-log es FALSO); mientras que mysql -se "SHOW VARIABLES" | grep -e log_error -e general_logda:

general_log     ON
general_log_file        /var/log/mysql.general.log

Utilice una sintaxis un poco más compacta para el registro de errores:

mysqld --general-log --general-log-file=/var/log/mysql.general.log --log-error=/var/log/mysql.error.log
br3w5
fuente