web-dev-qa-db-fra.com

Où est mon journal mysql sur OS X?

J'ai vérifié/var/log et/usr/local/mysql et je n'arrive pas à trouver le journal. J'essaye de dépanner une erreur établissant une connexion de base de données avec une fonction php.

74
Tony

Comme Chealion l'a mentionné, il existe plusieurs façons d'installer votre mysql. Chacun d'entre eux placera votre répertoire de données et/ou vos journaux à différents endroits. La commande suivante vous donnera (et nous) une bonne indication de l'endroit où chercher.

ps auxww|grep [m]ysqld

# Putting brackets around the first char is a `grep`+`ps` trick
# to keep it from matching its own process.
# Note: For zsh compatibility put quotes around the grep regex

Pouvez-vous poster le résultat de cette commande ici s'il vous plaît? Le mien ressemble à ceci:

_mysql     101   0.0  0.3   112104  13268   ??  S    12:30AM   0:13.20 /opt/local/libexec/mysqld --basedir=/opt/local --datadir=/opt/local/var/db/mysql --user=mysql --pid-file=/opt/local/var/db/mysql/rbronosky-mbp.pid
root        76   0.0  0.0   600172    688   ??  S    12:30AM   0:00.02 /bin/sh /opt/local/lib/mysql/bin/mysqld_safe --datadir=/opt/local/var/db/mysql --pid-file=/opt/local/var/db/mysql/rbronosky-mbp.pid

De là, vous pouvez voir que mon datadir est /opt/local/var/db/mysql (parce que j'ai installé via MacPorts). Prenons cette leçon un peu plus loin ...

Dès la première ligne, vous pouvez voir que le démon my est /opt/local/libexec/mysqld. mysqld peut être appelé avec --verbose --help pour obtenir une liste de toutes les options de ligne de commande (et voici la partie importante/précieuse!) suivie des valeurs qui seraient utilisées si vous lanciez mysqld au lieu de simplement vérifier la sortie de l'aide. Les valeurs sont le résultat de votre configuration de temps de compilation, my.cnf fichier et toutes les options de ligne de commande. Je peux exploiter cette fonctionnalité pour savoir exactement où se trouvent mes fichiers journaux, comme ceci:

/opt/local/libexec/mysqld --verbose --help|grep '^log'

Le mien ressemble à ceci:

log                               /tmp/mysql.log
log-bin                           /tmp/mysql-bin
log-bin-index                     (No default value)
log-bin-trust-function-creators   FALSE
log-bin-trust-routine-creators    FALSE
log-error                         /tmp/mysql.error.log
log-isam                          myisam.log
log-queries-not-using-indexes     FALSE
log-short-format                  FALSE
log-slave-updates                 FALSE
log-slow-admin-statements         FALSE
log-slow-queries                  (No default value)
log-tc                            tc.log
log-tc-size                       24576
log-update                        (No default value)
log-warnings                      1

ET VOILÀ! tous les conseils du monde n'allaient pas m'aider parce que mon fichier journal est conservé dans un emplacement complètement non standard! Je garde le mien dans /tmp/ parce que sur mon ordinateur portable, je ne me soucie pas (en fait, je préfère) de perdre tous mes journaux au redémarrage.

Mettons tout cela ensemble et faisons de vous un oneliner:

$(ps auxww|sed -n '/sed -n/d;/mysqld /{s/.* \([^ ]*mysqld\) .*/\1/;p;}') --verbose --help|grep '^log'

Exécutez cette commande et vous obtiendrez une liste de tous les journaux de votre instance en cours d'exécution de mysql.

Prendre plaisir!

Ce Bash-Fu vous est offert gratuitement par mon engagement envers tout ce qui est Open Source.

94
Bruno Bronosky

Il existe 3 types de journaux MySQL/MariaDB:

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

Vérifiez les paramètres et l'emplacement des journaux ci-dessus par cette commande Shell:

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

Par défaut, les journaux sont stockés dans votre répertoire de données, vérifiez donc l'emplacement à l'aide de cette commande Shell:

mysql -se "SELECT @@datadir"

Pour afficher votre journal des erreurs, vous pouvez exécuter:

Sudo tail -f $(mysql -Nse "SELECT @@log_error")

Si vous avez activé le journal général, pour l'afficher, exécutez:

Sudo tail -f $(mysql -Nse "SELECT CONCAT(@@datadir, @@general_log_file)")
13
kenorb

Une autre façon de trouver ces informations consiste à utiliser lsof.

  1. Utilisez Activity Monitor pour trouver le PID de mysql, ou utilisez ps -ef | grep mysqld pour le trouver.

  2. Sudo lsof -p PID_OF_MYSQLD et voir quels fichiers MySQL a ouverts.

10
tobym

J'ai mis du temps à trouver ça ... essayez cet endroit: '

Sudo vi /usr/local/mysql/data/YOUR-USERNAME.local.err
6
Mark Shust

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

Source: Documentation MySQL

Vous pouvez utiliser mysqlbinlog pour lire les fichiers journaux binaires dans/usr/local/mysql/data/(dans mon installation, tous n'étaient pas binaires). Certaines erreurs sont simplement dirigées vers stderr, vous pouvez donc vérifier /var/log/system.log ainsi que.

3
Chealion

Le dossier contenant ce journal peut ne pas vous être accessible sans utiliser Sudo:

Sudo ls -l "/usr/local/mysql-5.0.51a-osx10.5-x86"
[..]
drwxr-x---   4 _mysql  wheel    136 Jul 10 23:06 data

Si vous trouvez un fichier journal volumineux et que vous utilisez Time Machine, vous pouvez lire Que fait Time Machine? on Server Fault.

0
Arjan

Par défaut, tous les fichiers journaux sont créés dans le répertoire de données mysqld. Malheureusement, de nombreuses personnes ne placent pas leurs fichiers journaux (et programmes) à leur emplacement habituel. Je suis l'un deux!

J'ai moi-même suivi cette routine avec MySQL jusqu'à ce que j'essaye Navicat pour MySQL . Plus tard, je suis passé à Navicat Premium . Les deux ont un outil de surveillance qui contient un onglet avec toutes les variables de serveur dans une liste complète. Voici une capture d'écran avec la variable de serveur log_error:

Variable de serveur log_error dans Navicat Server Monitoring Tool

log_error server variable in Navicat Server Monitoring Tool

Vous pouvez également définir les variables directement dans la liste.

À votre santé!

0
Rob Gravelle