9
votes

Comment enregistrer les requêtes d'erreur dans MySQL?

Je sais qu'il y a General_Log qui enregistre toutes les questions, mais je souhaite savoir quelle requête a une erreur et obtenez le message d'erreur. J'ai essayé d'exécuter une requête d'erreur exprès, mais elle se connecte comme une requête normale et ne le signalez pas avec une erreur. Des idées?


0 commentaires

6 Réponses :


1
votes

J'ai essayé d'exécuter une requête d'erreur sur but, mais il se connecte comme une requête normale et ne le signalez pas avec une erreur. Tout idées? p>

Alors, vous avez fait mal. Aucune autre idée sans le code. P>

en PHP Je le fais de cette façon (supposez que vous utilisez le pilote MySQL): P>

$res=mysql_query($sql) or trigger_error(mysql_error().$sql);

5 commentaires

J'entraîne SQL à PHPMYADMIN 3.3.2 le fait-il mal?


@user phpmyAdmin est une application mono-utilisateur, il n'a donc pas besoin d'une journalisation.


Trigger_error écrit-il au journal MySQL ou PHP? Parce que j'ai eu des scripts shell qui utilisent également MySQL.


@user c'est la directive PHP. Il écrit dans le journal d'erreur PHP standard.


Merci de réponse, mais ne résout pas mon problème, c'est dépendant PHP.




2
votes

Même si cette question est assez ancienne, j'espère que cela sera utile à une personne qui recherchait des requêtes d'erreur de journal MySQL ou des termes similaires.

Il y a pas trop longtemps, j'ai également besoin de MySQLD pour enregistrer uniquement des requêtes erronées. J'ai trouvé que MySQL-proxy vous permet de le faire et écrit un petit script Lua: xxx p> ddl nécessaire pour la table de journalisation, ajuster somedb . < Code> mysql_error à aimer, mais n'oubliez pas de le faire dans le script de Lua ci-dessus aussi. xxx

Pour utiliser le script, exécutez

/ chemin / à / mysql-proxy --Proxy-lua-script = / chemin / à / mysql-proxy-log-error-requis.lua

ou Si cela échoue (> = v0.9)

/ chemin / à / mysql-proxy --Proxy-lua-script = / chemin / à / mysql-proxy-journal-erreurs-erreurs-requêtes .Lua --Plugins = proxy

Le proxy fonctionne sur le port 4040 Par défaut, pour tester:

mysql -u Nom d'utilisateur -P --Host = 127.0.0.1 --Port = 4040

et exécutez un SQL défectueux.

Quand tout semble être dans l'ordre Votre application à 4040 au lieu du port MySQLD réel et vous avez une erreur d'erreur MySQL sur le niveau de la base de données.

Note finale: mysql-proxy est bêta. Utilisez avec prudence. Course ici depuis près d'une demi-année maintenant sans problèmes, cependant YMMV.



4
votes

Je sais que cela est ancien maintenant, mais pour toute personne ayant le même problème qui atterrit ici de Google, voici mes deux cents.

Si vous utilisez le client CLI, vous pouvez simplement rediriger votre arrêt dans un fichier, puis analyser cela. xxx


1 commentaires

Merci, je ne savais pas que cela pourrait faire cela plutôt que de vous connecter à un fichier. Je me suis rendu compte à une base de données à la place. À votre santé.



3
votes

Il est possible de loger des requêtes d'erreur avec le Audit Mariahb Plugin .

Le plugin d'audit Mariadb fonctionne pour Mariadb, MySQL et PerCona Server. P> BlockQuote>

Par exemple, pour ces requêtes P>

20150807 23:00:36,mnv-Satellite-L300D,root,localhost,82,377,QUERY,`test`,'select now()
LIMIT 0, 1000',0
20150807 23:00:37,mnv-Satellite-L300D,root,localhost,82,379,QUERY,`test`,'select now()+()',1064
20150807 23:00:37,mnv-Satellite-L300D,root,localhost,82,382,QUERY,`test`,'select 9+()',1064
20150807 23:00:38,mnv-Satellite-L300D,root,localhost,82,383,QUERY,`test`,'select \'hello\'
LIMIT 0, 1000',0


2 commentaires

0
votes

Mariadb est capable de le faire avec un plugin https: // mariadb .Com / kb / fr / sql-error-journal-journal-plugin / qui est distribué avec mariadb.

J'ai essayé d'hier et cela fonctionne comme annoncé.

Il faut juste courir : xxx

et les requêtes avec des erreurs iront à $ $ datadir / sql_errors.log qui se trouve sur la plupart des installations Linux sur / var / var / var / var / var / lib / mysql / sql_errors.log .


0 commentaires