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.
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.
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)")
Une autre façon de trouver ces informations consiste à utiliser lsof
.
Utilisez Activity Monitor pour trouver le PID de mysql
, ou utilisez ps -ef | grep mysqld
pour le trouver.
Sudo lsof -p PID_OF_MYSQLD
et voir quels fichiers MySQL a ouverts.
J'ai mis du temps à trouver ça ... essayez cet endroit: '
Sudo vi /usr/local/mysql/data/YOUR-USERNAME.local.err
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.
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.
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
Vous pouvez également définir les variables directement dans la liste.
À votre santé!