Imprimer les informations de débogage à partir de la procédure stockée dans MySQL

Existe-t-il un moyen dans MySQL d’imprimer des messages de débogage sur stdout, temptable ou logfile? Quelque chose comme:

  • print dans SQLServer
  • DBMS_OUTPUT.PUT_LINE dans Oracle

Option 1: Insérez ceci dans votre procédure pour imprimer «commentaire» sur stdout lorsqu’il est exécuté.

 SELECT 'Comment'; 

Option 2: Mettez ceci dans votre procédure pour imprimer une variable avec stdout:

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

Ceci imprime myvar is 5 à stdout quand la procédure s’exécute.

Option 3, Créer une table avec une colonne de texte appelée tmptable et y envoyer des messages:

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

Vous pouvez mettre ce qui précède dans une procédure stockée, il vous suffit donc d’écrire ceci:

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

Ce qui permet d’économiser quelques touches.

Option 4, consigner les messages dans un fichier

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

Il y a de très fortes ressortingctions sur cette commande. Vous ne pouvez écrire le fichier de sortie que dans les zones du disque qui donnent au groupe “les autres” des permissions de création et d’écriture. Cela devrait fonctionner en le sauvegardant dans le répertoire / tmp.

Une fois que vous avez écrit le fichier, vous ne pouvez pas l’écraser. Ceci pour empêcher les crackers d’enraciner votre boîte juste parce qu’ils ont injecté votre site Web et peuvent exécuter des commandes arbitraires dans MySQL.

Une solution de contournement consiste à utiliser select sans aucune autre clause.

http://lists.mysql.com/mysql/197901

Je crée généralement une table de journalisation avec une procédure stockée pour y accéder. L’appel de la procédure de journalisation, si nécessaire de la procédure en cours de développement.

En regardant d’ autres articles sur cette même question, cela semble être une pratique courante, bien qu’il existe des alternatives.