Comment voir les fichiers journaux dans MySQL?


176

J'ai lu que le serveur Mysql crée un fichier journal dans lequel il conserve un enregistrement de toutes les activités - comme quand et quelles requêtes s'exécutent.

Quelqu'un peut-il me dire où il existe dans mon système? Comment puis-je le lire?

Fondamentalement, je dois sauvegarder la base de données avec une entrée différente [sauvegarde entre deux dates] donc je pense que je dois utiliser le fichier journal ici, c'est pourquoi je veux le faire ...

Je pense que ce journal doit être sécurisé d'une manière ou d'une autre car des informations sensibles telles que les noms d'utilisateur et le mot de passe peuvent être enregistrées [si une requête l'exige]; alors peut-il être sécurisé, pas facilement visible?

J'ai un accès root au système, comment puis-je voir le journal?

Lorsque j'essaye d'ouvrir /var/log/mysql.log, il est vide.

Ceci est mon fichier de configuration:

[client]
port        = 3306
socket      = /var/run/mysqld/mysqld.sock

[mysqld_safe]
socket      = /var/run/mysqld/mysqld.sock
nice        = 0

[mysqld]
log = /var/log/mysql/mysql.log 
binlog-do-db=zero



user        = mysql
socket      = /var/run/mysqld/mysqld.sock
port        = 3306
basedir     = /usr
datadir     = /var/lib/mysql
tmpdir      = /tmp
skip-external-locking

bind-address        = 127.0.0.1
#
# * Fine Tuning
#
key_buffer      = 16M
max_allowed_packet  = 16M
thread_stack        = 192K
thread_cache_size       = 8

general_log_file        = /var/log/mysql/mysql.log
general_log             = 1

Réponses:


164

Voici un moyen simple de les activer. Dans mysql, nous avons besoin de voir souvent 3 journaux qui sont principalement nécessaires lors de tout développement de projet.

  • The Error Log. Il contient des informations sur les erreurs qui se produisent pendant l'exécution du serveur (également le démarrage et l'arrêt du serveur)

  • The General Query Log. Ceci est un enregistrement général de ce que fait mysqld (connexion, déconnexion, requêtes)

  • The Slow Query Log. Ιt se compose d'instructions SQL "lentes" (comme indiqué par son nom).

Par défaut, aucun fichier journal n'est activé dans MYSQL. Toutes les erreurs seront affichées dans le syslog (/var/log/syslog ).

Pour les activer, suivez simplement les étapes ci-dessous:

step1: Accédez à ce fichier ( /etc/mysql/conf.d/mysqld_safe_syslog.cnf ) et supprimez ou commentez ces lignes.

étape2: allez dans le fichier de configuration mysql ( /etc/mysql/my.cnf) et ajoutez les lignes suivantes

Pour activer le journal des erreurs, ajoutez ce qui suit

[mysqld_safe]
log_error=/var/log/mysql/mysql_error.log

[mysqld]
log_error=/var/log/mysql/mysql_error.log

Pour activer le journal des requêtes générales, ajoutez ce qui suit

general_log_file        = /var/log/mysql/mysql.log
general_log             = 1

Pour activer le journal des requêtes lentes, ajoutez ce qui suit

log_slow_queries       = /var/log/mysql/mysql-slow.log
long_query_time = 2
log-queries-not-using-indexes

étape3: enregistrez le fichier et redémarrez mysql en utilisant les commandes suivantes

service mysql restart

Pour activer les journaux lors de l'exécution, connectez-vous au client mysql ( mysql -u root -p) et donnez:

SET GLOBAL general_log = 'ON';
SET GLOBAL slow_query_log = 'ON';

Enfin, une chose que je voudrais mentionner ici est que j'ai lu ceci sur un blog . Merci. Ça marche pour moi.

Cliquez ici pour visiter le blog


2
Je pense que vous avez «oublié» d'écrire certaines choses. L'étape 1 est incomplète et la phrase le lien 'blog' est manquante
Athafoud

Salut, @Athafoud, veuillez trouver le lien maintenant.
loyola

3
L'article de blog lié mentionne la modification /etc/mysql/conf.d/mysqld_safe_syslog.cnfuniquement si le journal des erreurs doit être activé. Cependant, cette réponse telle qu'elle est actuellement écrite semble la suggérer pour n'importe quel journal.
Melebius

2
Ma version serveur est la 5.6.35. La réponse de Ross Smith II ici fonctionne pour moi. Je dois définir slow_query_log = 1;, slow_query_log_file = /var/log/mysql/mysql-slow-query.loget long_query_time = 60sous [mysqld]. Lorsque j'essaye de démarrer avec votre configuration, le serveur démarre, mais lentement et avec des erreurs. Je suppose vraiment que les versions diffèrent et dans les versions ultérieures, oracle voulait unifier les noms de variables. Aussi: IMHO 2 secondes n'est pas si long.
JackLeEmmerdeur

1
Qu'en est-il de l'autorisation sur ces fichiers? J'ai vu dans de nombreux cas que les fichiers journaux ne sont pas créés.
MagePsycho

42

Vous devez activer la journalisation des requêtes dans mysql.

  1. éditer /etc/my.cnf

    [mysqld]
    log = / tmp / mysql.log
    
  2. redémarrez l'ordinateur ou le service mysqld

    redémarrage du service mysqld
    
  3. ouvrez phpmyadmin / toute application qui utilise la console mysql / mysql et exécutez une requête

  4. cat /tmp/mysql.log (vous devriez voir la requête)


n'a pas d'importance, assurez-vous simplement qu'une requête est exécutée sur la base de données
danidacar

6
chemin invalide. Vous avez /etc/my.cnf devrait être /etc/mysql/my.cnf
mystic cola

39

Les journaux MySQL sont déterminés par les variables globales telles que:

  • log_error pour le journal des messages d'erreur;
  • general_log_filepour le fichier journal des requêtes générales (si activé par general_log);
  • slow_query_log_filepour le fichier journal des requêtes lentes (si activé par slow_query_log);

Pour voir les paramètres et leur emplacement, exécutez cette commande shell:

mysql -se "SHOW VARIABLES" | grep -e log_error -e general_log -e slow_query_log

Pour imprimer la valeur du journal des erreurs, exécutez cette commande dans le terminal:

mysql -e "SELECT @@GLOBAL.log_error"

Pour lire le contenu du fichier journal des erreurs en temps réel, exécutez:

sudo tail -f $(mysql -Nse "SELECT @@GLOBAL.log_error")

Remarque: Hit Control- une Cfois terminé

Lorsque le journal général est activé, essayez:

sudo tail -f $(mysql -Nse "SELECT CONCAT(@@datadir, @@general_log_file)")

À utiliser mysqlavec l'accès par mot de passe, ajoutez -pou -pMYPASSparamètre. Pour le garder en mémoire, vous pouvez le configurer dans votre ~/.my.cnf, par exemple

[client]
user=root
password=root

On s'en souviendra donc pour la prochaine fois.


1
Ou si vous devez entrer un mot de passe, essayez ceci: mysql -p -se "SHOW VARIABLES" | grep -e log_error -e general_log -e slow_query_log
Paul Chernoch

9

Dans mon fichier (j'ai installé LAMP) / etc / mysql /my.cnf, j'ai trouvé les lignes commentées suivantes dans la section [mysqld]:

general_log_file        = /var/log/mysql/mysql.log
general_log             = 1

J'ai dû ouvrir ce fichier en tant que super utilisateur, avec terminal:

sudo geany /etc/mysql/my.cnf

(Je préfère utiliser Geany au lieu de gedit ou VI, cela n'a pas d'importance)

Je viens de les décommenter et d'enregistrer le fichier, puis de relancer mysql avec

sudo service mysql restart

Exécutez plusieurs requêtes, ouvrez le fichier ci-dessus (/var/log/mysql/mysql.log) et le journal était là :)


bien que cela puisse fonctionner pour vous, ce n'est pas le cas pour moi, même les exceptions majeures comme "Index corrompu" ne sont pas enregistrées. Seuls les problèmes de démarrage et d'arrêt.
user3338098

8

À partir du manuel de référence MySQL:

Par défaut, tous les fichiers journaux sont créés dans le répertoire de données.

Vérifiez le /var/lib/mysqldossier.


1
mais je suis incapable d'ouvrir le dossier mysql. Je pense que le chemin du fichier journal est /var/log/mysql/mysql.log mais je suis incapable de l'ouvrir, que dois-je faire?
Arjun

2
comment je me crée root, je pense être propriétaire, j'installe le serveur, je mets le mot de passe, donc je devrais être le propriétaire, il est toujours verrouillé pour moi, comment puis-je l'ouvrir?
Arjun

1
J'ai forcé cd dans ce répertoire (j'ai dû créer un utilisateur root, que j'ai supprimé plus tard), mais quand je vois ces fichiers, j'ai pensé qu'ils étaient cryptés :) Donc je pense que ce n'est pas une bonne façon.
Ligne

utilisez sudo -spuis essayez d'aller dans le dossier mysql.
Rashedul Islam

le manuel MySQL est rempli de nombreuses incohérences, de toute façon, il n'y a pas de tel répertoire sur windows.
user3338098

3

Pour compléter la réponse de loyola , il convient de mentionner que depuis MySQL 5.1 log_slow_queriesest obsolète et est remplacé parslow-query-log

L'utilisation log_slow_queriesprovoquera votreservice mysql restart ou service mysql startà l' échec


1
shell> mysqladmin flush-logs


shell> mv host_name.err-old backup-directory

7
Bienvenue dans stackoverflow. Veuillez envisager d'expliquer davantage en quoi le code de votre réponse est pertinent par rapport à la question du PO. En outre, le code doit être mis en retrait de 4 espaces pour permettre un formatage approprié.
Politank-Z

1

En plus des réponses ci-dessus, vous pouvez transmettre des paramètres de ligne de commande au processus mysqld pour les options de journalisation au lieu de modifier manuellement votre fichier de configuration. Par exemple, pour activer la journalisation générale et spécifier un fichier:

mysqld --general-log --general-log-file=/var/log/mysql.general.log

En confirmant les autres réponses ci-dessus, mysqld --help --verbosevous donne les valeurs du fichier conf (donc l'exécution avec les options de ligne de commande general-log est FALSE); alors que mysql -se "SHOW VARIABLES" | grep -e log_error -e general_logdonne:

general_log     ON
general_log_file        /var/log/mysql.general.log

Utilisez une syntaxe légèrement plus compacte pour le journal des erreurs:

mysqld --general-log --general-log-file=/var/log/mysql.general.log --log-error=/var/log/mysql.error.log
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.