2011-01-07 23 views
14

¡NO ESTOY EN EJECUCIÓN DE LOS COMANDOS DESDE PHP!MySQL Registro de Consultas no válidas

que tienen un valor LOG_ERROR MySQL establecido en /var/log/mysql/error.log

Sin embargo, cuando me conecto a una base de datos y ejecutar un comando SQL, el error no aparece en el registro.


SELECT * 
FROM some_table 
where this_is_invalid_and_will_fail="Doesn't matter because column doesn't exist!"; 

Hay comandos que se ejecutan desde algún tipo de aplicación de Windows. Todo lo que quiero saber es qué comandos inválidos envían al servidor MySQL para que pueda intentar resolverlos.

Respuesta

13

registro de errores no hace eso: http://dev.mysql.com/doc/refman/5.6/en/error-log.html

El registro de errores contiene información que indica cuándo se inició mysqld y detuvo y también los errores graves que se producen mientras el servidor está en ejecución .

MySQL no registra consultas inválidas/fallidas en ningún lado.


Si es para propósitos de depuración, puede intentar la creación de un proxy MySQL, lo que podría registrar este pienso:

http://dev.mysql.com/downloads/mysql-proxy/

+0

Gracias por el fragmento de la documentación. Además, el proxy MySQL parece limpio, para mal no está más desarrollado en este momento. – dunpealslyr

+0

Gracias por ese consejo ... Finalmente una respuesta útil ... Todas las respuestas que encontré hasta ahora fueron "no se puede hacer" o "hacerlo en tu aplicación". De todos modos, el enlace anterior está desactualizado, por lo que este es el actual, parece: http://dev.mysql.com/downloads/mysql-proxy/ – Rolf

+0

@Rolf: gracias por señalar, he actualizado el enlace en mi respuesta. – Mchl

0

Esto no es tan trivial. La mejor forma de hacerlo es registrar las consultas incorrectas en su aplicación. No hay una forma incorporada.

+1

No es mi aplicación. Es un tipo de aplicación de Windows a la que no tengo acceso. – dunpealslyr

3

¿Podría habilitar el General Query Log? Eso debería decirte todo lo que necesitas saber.

+1

registro general es útil. pero no me dice qué comandos no se ejecutaron con éxito. Por ejemplo, acabo de mover MySQL de Windows a Linux y experimenté un problema con las mayúsculas que no ocurría en Windows. Algo que es completamente imposible de contar mediante el uso de un registro general de consultas. (a menos que pueda corregirme, por supuesto) – dunpealslyr

+0

Busque en el registro las consultas 'SELECT' únicas (' grep -i select host_name.log | sort | uniq'), ejecútelas desde un script y vea cuáles fallan. –

+0

El registro de consultas generales solo registra las consultas que se completan correctamente. Esta pregunta es sobre los que no. – muttonUp

6

Básicamente, hay 2 formas.

1) configure algún tipo de proxy, que puede registrar consultas de error. Hay una gran cantidad de tenedores de proxy mysql original (que fue mencionado por @Mchl) - https://github.com/search?utf8=%E2%9C%93&q=MySQL+Proxy También usted puede encontrar la última versión de MySQL el proxy original aquí https://github.com/mysql/mysql-proxy

No me gusta esta manera, debido a que su tipo de demasiado complicado para una depuración rápida

2) puede habilitar el registro general en mysql (que registrará TODAS las consultas). Creará grandes gastos generales y no se ajusta a los requisitos de producción, pero es una manera rápida y fácil de corregir errores en el entorno de desarrollo.

Sólo entra a tu MySQL y ejecutar SET GLOBAL general_log = 'ON'; SHOW GLOBAL VARIABLES LIKE 'general_log%';

Usted verá los registros de localización, como +------------------+------------------------+ | Variable_name | Value | +------------------+------------------------+ | general_log | OFF | | general_log_file | /mnt/ssd/mysql/s.log | +------------------+------------------------+

Después de que ejecute mysqladmin flush-logs -u root -p

Cuando se tendrá que dejar de troncos - sólo hay que ejecutar SET GLOBAL general_log = 'OFF';

1

A partir de mysql vers ion 5.6.3 (lanzado 2011-10-03), hay una variable llamada log-raw, que le permite incluir consultas no válidas en el registro general de consultas:

https://dev.mysql.com/doc/refman/5.6/en/server-options.html#option_mysqld_log-raw

que se necesitan para activar el registro de consultas general utilizando general-log y general-log-file, p. Ej .:

[mysqld] 
general-log=1 
log-raw=1 
general-log-file=/var/log/mysql/general.log 
+0

"le permite incluir consultas no válidas en el registro general de consultas". Esto es ** incorrecto ** - la documentación menciona específicamente 'log-raw' para revelar contraseñas enmascaradas, y nada más. –

+0

@MartinKonecny, usando 'log-raw' resolvió el problema para mí, ¿no funcionó para usted? Creo que la razón por la que funciona es que para enmascarar contraseñas mysql, debe poder analizar la consulta. Por lo tanto, si no puede analizar una consulta, no registra nada que imposibilita la detección de dichas consultas mirando el archivo de registro de mysql. Aquí es donde 'log-raw' viene a rescatar. –

+0

No estoy seguro por qué de acuerdo con el documento, pero de hecho, 'log_raw = 1 general_log = 1 general_log_file = c:/wamp/logs/mysql.query.log' trabajado para mí también en MySQL 5.7.16 – Xenos

Cuestiones relacionadas