Cualquiera de los dos registrará todas las consultas en log_file_name.
También puede registrar solo consultas lentas utilizando la --log-slow-queriesopción en lugar de --log. De manera predeterminada, las consultas que demoran 10 segundos o más se consideran lentas, puede cambiar esto configurando long_query_timeel número de segundos que debe demorar una consulta para ejecutarse antes de iniciar sesión.
No hay que decirlo, pero dejar esto activado en una caja de producción termina siendo poco entretenido muy rápidamente. g
ceejayoz el
66
Si tiene problemas para habilitar el registro de esta manera, verifique que el usuario de mysql pueda escribir en la ubicación de archivo adecuada.
Jon Topper el
3
¿Es posible registrar consultas sobre 1 particuarl db / table solamente?
Temujin
2
@Temujin phpmyadmin ahora tiene una opción de 'seguimiento' para las tablas donde especifique un registro ('versión') y mantendrá un registro de las consultas que lo afectan con información sobre el tiempo y toda la consulta.
gadget00
3
Esta respuesta aceptada debe eliminarse o editarse para reflejar el hecho de que no funciona con MySQL 5.6. +.
itoctopus
233
( Nota : para mysql-5.6 + esto no funcionará. Hay una solución que se aplica a mysql-5.6 + si se desplaza hacia abajo o hace clic aquí ).
Si no desea o no puede reiniciar el servidor MySQL, puede proceder así en su servidor en ejecución:
Crea tus tablas de registro en la mysqlbase de datos
No estoy seguro de si esto es cierto para todas las versiones de MySQL (estoy en 5.5), pero no tuve que crear las tablas. Seguí el mismo consejo menos crear las tablas, que se menciona aquí: stackoverflow.com/a/678310/135101
Tyler Collier el
Tal vez ya fue creado por una u otra razón, @TylerCollier
Alexandre Marcondes
3
Cabe señalar que los CREATE TABLEcomandos deberían (si las tablas no existen) ejecutarse en la mysqlbase de datos, no en ninguna base de datos creada por el usuario. Quizás las declaraciones SQL podrían actualizarse para reflejar eso.
Robert Rossmann
2
Para ver el registro SELECT * FROM mysql.general_log order by (event_time) descserá mejor. solo digo. :-)
vinrav
No esté de acuerdo con la nota : con la versión del servidor 5.6.37 funciona completamente correctamente. Gracias.
Dmitriy Olhovsky
215
Además de lo que encontré aquí, ejecutar lo siguiente fue la forma más sencilla de volcar consultas a un archivo de registro sin reiniciar
SET global log_output ='FILE';SET global general_log_file='/Applications/MAMP/logs/mysql_general.log';SET global general_log =1;
Absolutamente me encanta esto, funciona para conexiones existentes y nuevas en el DB
Carlton
1
Hubo algunas entradas de Estadísticas, no estoy seguro de cuáles son, pero, de lo contrario, funciona muy bien.
Snowcrash
Para que esto funcione, su usuario debe tener el privilegio SUPER, que es un privilegio de base de datos global y, por lo tanto, no puede limitarse a esquemas o tablas específicos:GRANT SUPER ON *.* TO user1@localhost
RobM
Votaría que más de una vez si pudiera, tengo un marcador apuntando aquí :) ¡Muchas gracias!
resi
125
La respuesta superior no funciona en mysql 5.6+. Use esto en su lugar:
Ubuntu / Debian : /etc/mysql/my.cnf Windows : c: \ ProgramData \ MySQL \ MySQL Server 5.x wamp : c: \ wamp \ bin \ mysql \ mysqlx.yz \ my.ini xampp : c: \ xampp \ mysql \ bin \ my.ini.
Si lo ha usado, ¿puede decirme el impacto en el rendimiento de lo anterior, y sería conveniente habilitar el registro de esta manera?
Ramesh Pareek
1
El impacto en el rendimiento de Ramesh parece estar alrededor del 5-15% de disminución en el rendimiento. Más información aquí percona.com/blog/2009/02/10/…
Firze
1
No entiendo por qué Mysql 5.6 no permite que el archivo de registro se establezca a partir de consultas. ¿Cómo registrar todas las consultas en MySQL 5.6 y posteriores cuando no tiene acceso al árbol de directorios del servidor pero solo phpMyAdmin?
Vicky Dev
reinicie el servicio mysql desde el panel de control xampp después de estos cambios.
Paramjeet
Esto funcionó para mí en mi entorno local de Xampp Apache, pero aún tenía que activar el inicio de sesión a través de phpMyAdmin. Además, no pudo ubicar el archivo en la carpeta / usr / log, ni lo creó, pero funcionó bien comogeneral_log_file=filename.log
JoeP
36
Habilite el registro para la tabla
mysql>SET GLOBAL general_log ='ON';
mysql>SET global log_output ='table';
¿hay un comodín para registrar todas las tablas? (hay bastantes: C)
RicardoE
Gracias, esta configuración fue muy útil para mí ya que no pude eliminar el servidor mysql. También quiero que el registro aparezca en la tabla de registro
Gunnar Sigfusson
14
Forma rápida de habilitar MySQL General Query Log sin reiniciar.
mysql>SET GLOBAL general_log ='ON';
mysql>SET GLOBAL general_log_file ='/var/www/nanhe/log/all.log';
He instalado mysql a través de homebrew, versión de mysql: mysql Ver 14.14 Distrib 5.7.15, para osx10.11 (x86_64) usando el envoltorio EditLine
5.2.1. Selección de destinos de salida de registro de consulta general y consulta lenta
A partir de MySQL 5.1.6, MySQL Server proporciona un control flexible sobre el destino de la salida al registro de consultas generales y el registro de consultas lentas, si esos registros están habilitados. Los posibles destinos para las entradas de registro son los archivos de registro o las tablas general_log y slow_log en la base de datos mysql
$ uname -a
Darwin Raphaels-MacBook-Pro.local 15.6.0 Darwin Kernel Version 15.6.0: Thu Jun 2120:07:40 PDT 2018; root:xnu-3248.73.11~1/RELEASE_X86_64 x86_64
$ mysql --version/usr/local/mysql/bin/mysql Ver 14.14 Distrib 5.6.23,for osx10.8(x86_64)using EditLine wrapper
Agregar registro (ejemplo, no creo que /var/log/...sea la mejor ruta en Mac OS, pero funcionó:
sudo vi ./usr/local/mysql-5.6.23-osx10.8-x86_64/my.cnf
[mysqld]
general_log =on
general_log_file=/var/log/mysql/mysqld_general.log
Mysql reiniciado
Resultado:
$ sudo tail -f /var/log/mysql/mysqld_general.log
1812109:41:0421Connect root@localhost on employees
21 Query /* mysql-connector-java-5.1.47 ( Revision: fe1903b1ecb4a96a917f7ed3190d80c049b1de29 ) */SELECT@@session.auto_increment_increment AS auto_increment_increment,@@character_set_client AS character_set_client,@@character_set_connection AS character_set_connection,@@character_set_results AS character_set_results,@@character_set_server AS character_set_server,@@collation_server AS collation_server,@@collation_connection AS collation_connection,@@init_connect AS init_connect,@@interactive_timeout AS interactive_timeout,@@license AS license,@@lower_case_table_names AS lower_case_table_names,@@max_allowed_packet AS max_allowed_packet,@@net_buffer_length AS net_buffer_length,@@net_write_timeout AS net_write_timeout,@@query_cache_size AS query_cache_size,@@query_cache_type AS query_cache_type,@@sql_mode AS sql_mode,@@system_time_zone AS system_time_zone,@@time_zone AS time_zone,@@tx_isolation AS transaction_isolation,@@wait_timeout AS wait_timeout
21 Query SET NAMES latin1
21 Query SET character_set_results =NULL21 Query SET autocommit=121 Query SELECTUSER()21 Query SELECTUSER()1812109:41:1021 Query show tables
1812109:41:2521 Query select count(*)from current_dept_emp
Respuestas:
Inicie mysql con la opción --log:
o coloque lo siguiente en su
my.cnf
archivo:Cualquiera de los dos registrará todas las consultas en log_file_name.
También puede registrar solo consultas lentas utilizando la
--log-slow-queries
opción en lugar de--log
. De manera predeterminada, las consultas que demoran 10 segundos o más se consideran lentas, puede cambiar esto configurandolong_query_time
el número de segundos que debe demorar una consulta para ejecutarse antes de iniciar sesión.fuente
( Nota : para mysql-5.6 + esto no funcionará. Hay una solución que se aplica a mysql-5.6 + si se desplaza hacia abajo o hace clic aquí ).
Si no desea o no puede reiniciar el servidor MySQL, puede proceder así en su servidor en ejecución:
mysql
base de datosfuente
CREATE TABLE
comandos deberían (si las tablas no existen) ejecutarse en lamysql
base de datos, no en ninguna base de datos creada por el usuario. Quizás las declaraciones SQL podrían actualizarse para reflejar eso.SELECT * FROM mysql.general_log order by (event_time) desc
será mejor. solo digo. :-)Además de lo que encontré aquí, ejecutar lo siguiente fue la forma más sencilla de volcar consultas a un archivo de registro sin reiniciar
se puede apagar con
fuente
GRANT SUPER ON *.* TO user1@localhost
La respuesta superior no funciona en mysql 5.6+. Use esto en su lugar:
en su archivo my.cnf / my.ini
Ubuntu / Debian : /etc/mysql/my.cnf
Windows : c: \ ProgramData \ MySQL \ MySQL Server 5.x
wamp : c: \ wamp \ bin \ mysql \ mysqlx.yz \ my.ini
xampp : c: \ xampp \ mysql \ bin \ my.ini.
fuente
phpMyAdmin
?general_log_file=filename.log
Habilite el registro para la tabla
Ver registro por consulta seleccionada
fuente
Forma rápida de habilitar MySQL General Query Log sin reiniciar.
He instalado mysql a través de homebrew, versión de mysql: mysql Ver 14.14 Distrib 5.7.15, para osx10.11 (x86_64) usando el envoltorio EditLine
fuente
Para el registro, general_log y slow_log se introdujeron en 5.1.6:
http://dev.mysql.com/doc/refman/5.1/en/log-destinations.html
fuente
Debe tener en cuenta que el inicio de sesión en mysql realmente afecta el rendimiento, pero puede ser algo inteligente.
Normalmente lo dejo en el servidor de desarrollo (excepto cuando nos vuelve locos :))
fuente
Versión de OS / mysql:
Agregar registro (ejemplo, no creo que
/var/log/...
sea la mejor ruta en Mac OS, pero funcionó:Mysql reiniciado
Resultado:
fuente
En caso de usar AWS RDS MYSQL, guía paso a paso aquí.
Cuando se configura como salida 'archivo', puede ver el registro directamente desde la consola de "registro" de AWS RDS.
AWS RDS MYSQL Logging
fuente