trigger stored print log for debugger debug dbforge breakpoint mysql debugging

stored - Imprimir información de depuración del procedimiento almacenado en MySQL



mariadb debugger (3)

¿Hay alguna forma en MySQL para imprimir mensajes de depuración a stdout, temptable o logfile? Algo como:

  • print en SQLServer
  • DBMS_OUTPUT.PUT_LINE en Oracle

Normalmente creo una tabla de registro con un procedimiento almacenado para iniciar sesión en ella. La llamada al procedimiento de registro siempre que sea necesario a partir del procedimiento en desarrollo.

En cuanto a otras publicaciones sobre esta misma pregunta, parece una práctica común, aunque hay algunas alternativas.



Opción 1: ponga esto en su procedimiento para imprimir ''comment'' en stdout cuando se ejecute.

SELECT ''Comment'';

Opción 2: Pon esto en tu procedimiento para imprimir una variable con stdout:

declare myvar INT default 0; SET myvar = 5; SELECT concat(''myvar is '', myvar);

Esto imprime myvar is 5 a stdout cuando se ejecuta el procedimiento.

Opción 3, crear una tabla con una columna de texto llamada tmptable y enviar mensajes a ella:

declare myvar INT default 0; SET myvar = 5; insert into tmptable select concat(''myvar is '', myvar);

Podría poner lo anterior en un procedimiento almacenado, por lo que todo lo que tendría que escribir es esto:

CALL log(concat(''the value is'', myvar));

Lo que ahorra unas pocas teclas.

Opción 4, Registrar mensajes en un archivo

select "penguin" as log into outfile ''/tmp/result.txt'';

Hay restricciones muy fuertes en este comando. Solo puede escribir el archivo de salida en áreas del disco que le otorgan al grupo ''otros'' permisos de creación y escritura. Debería funcionar guardándolo en el directorio / tmp.

Además, una vez que escribe el archivo de salida, no puede sobrescribirlo. Esto es para evitar que los crackers arraiguen su caja solo porque tienen SQL inyectado en su sitio web y pueden ejecutar comandos arbitrarios en MySQL.