Où se trouve mon journal mysql sous OS X?

74

J'ai vérifié / var / log et / usr / local / mysql et je n'arrive pas à trouver le journal. J'essaie de résoudre une erreur lors de l'établissement d'une connexion à une base de données avec une fonction php.

Tony
la source

Réponses:

95

Comme Chealion l'a mentionné, votre mysql aurait pu être installé de plusieurs manières. Chacun de ces éléments placera votre répertoire de données et / ou vos journaux à des emplacements différents. La commande suivante vous donnera (et à nous) une bonne indication de l'endroit où regarder.

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

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

Dès la première ligne, vous pouvez voir que le démon my est /opt/local/libexec/mysqld. Vous mysqldpouvez appeler avec --verbose --helppour 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 consulter l'aide. Les valeurs sont le résultat de votre configuration lors de la compilation, du my.cnffichier et de toutes les options de ligne de commande. Je peux exploiter cette fonctionnalité pour savoir EXACTEMENT où sont mes fichiers de log, 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 ne vont pas m'aider car mon fichier journal est conservé dans un emplacement totalement non standard! Je garde le mien /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 élève:

$(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 active de mysql.

Prendre plaisir!

Ce Bash-Fu vous a été offert gratuitement par mon engagement en faveur de l’Open Source.

Bruno Bronosky
la source
2
mysqladmin variablesest maintenant la commande préférée pour obtenir la valeur actuelle au lieu d'utiliser directementmysqld
John Cummings
@JohnCummings, Source?
Pacerier
Aujourd'hui, j'ai eu un vote négatif sans commentaires. Je maintiens toutes mes réponses. Même ceux qui ont 10 ans. Vous n'aidez personne en votant à la baisse. Laissez un commentaire!
Bruno Bronosky
@ jm3 se soucie d'élaborer? Je n'ai plus accès à MacOS.
Bruno Bronosky
12

Il existe 3 types de journaux MySQL / MariaDB:

  • log_error pour le journal des messages d'erreur;
  • general_log_filepour le fichier journal de requête général (si activé par general_log);
  • slow_query_log_filepour le fichier journal de requête lente (si activé par slow_query_log);

Vérifiez les paramètres et l'emplacement des journaux ci-dessus à l'aide de 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 le visualiser, exécutez:

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

Une autre façon de trouver cette information est d'utiliser lsof.

  1. Utilisez Activity Monitor pour trouver le PID de mysqlou utilisez-le ps -ef | grep mysqldpour le trouver.

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

tobym
la source
6

Il m'a fallu un certain temps pour trouver ceci ... essayez cette localisation: '

sudo vi /usr/local/mysql/data/YOUR-USERNAME.local.err
Mark Shust
la source
3
Le mien était /usr/local/var/mysql/<USERNAME>.local.err
dedans
3

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

Source: Documentation MySQL

Vous pouvez utiliser mysqlbinlogpour 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 également vérifier /var/log/system.log.

Chealion
la source
Je n'ai pas de répertoire de données dans le répertoire mysql. J'ai parcouru le répertoire / usr / local / mysql / et je ne trouve pas le journal. il n'y a aucun moyen de voir la configuration de MySQL? comme un phpinfo ()
Tony le
Comment avez-vous installé MySQL? MySQL pré-installé avec Mac OS X Server, MacPorts ou le paquet MySQL officiel?
Chealion
0

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 voudrez peut-être lire Que fait Time Machine? sur faute de serveur.

Arjan
la source
Je n'ai pas de répertoire de données dans / usr / local / mysql
Tony le
0

Par défaut, tous les fichiers journaux sont créés dans le répertoire de données mysqld. Malheureusement, beaucoup de gens ne mettent pas leurs fichiers journaux (et leurs programmes) dans leurs emplacements habituels. Je suis l'un deux!

J'ai moi-même suivi cette routine avec MySQL jusqu'à ce que je teste 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 serveur log_error:

Variable de serveur log_error dans Navicat Server Monitoring Tool

Variable de serveur log_error dans Navicat Server Monitoring Tool

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

À votre santé!

Rob Gravelle
la source
-2

/Bibliothèque/Logs/MySQL.log

morgant
la source
Je vois d'autres journaux ici, mais pas mysql
Tony
De quelle version de Mac OS X Server s'agit-il? En général, vous voudrez regarder dans / var / log / & / Bibliothèque / Logs / sous Mac OS X Server. Plus spécifique à ce problème, regardez /var/log/system.log, il y a peut-être quelque chose d’utile dans / var / mysql (comme les fichiers journaux .err), mais je (sur la configuration par défaut de Leopard Server) également Bibliothèque / Journaux / MySQL.log. Essayez-vous de vous connecter via le socket ou une connexion réseau? Dans ce dernier cas, avez-vous "Activer les connexions réseau" dans Admin Serveur (sous Leopard; Dans Tiger, il s'agissait d'une application distincte dans / Applications / Utilitaires)?
Morgant