Réponses:
Si vous êtes sous Linux, lancez 'mysqld' avec strace
, par exemple strace ./mysqld
.
Parmi tous les autres appels système, vous trouverez quelque chose comme:
stat64("/etc/my.cnf", 0xbfa3d7fc) = -1 ENOENT (No such file or directory)
stat64("/etc/mysql/my.cnf", {st_mode=S_IFREG|0644, st_size=4227, ...}) = 0
open("/etc/mysql/my.cnf", O_RDONLY|O_LARGEFILE) = 3
Ainsi, comme vous pouvez le voir .. il répertorie les fichiers .cnf, qu'il tente d'utiliser et utilise finalement.
ps auxf
et trouver la commande exécutée pour MySQL. En général, cela ressemble à quelque chose comme mysqld --basedir=/usr/local/mysql ...
(notez que ... signifie simplement qu'il peut y avoir plus d'indicateurs dans la commande mais je ne vais pas tout lister) Une fois que vous l'avez trouvé, copiez le tout, puis arrêtez MySQL. Si vous êtes sous Linux, c'est /etc/init.d/mysqld stop
ou mysqladmin -u root -p shutdown
. Puis exécutez strace
avec la commande mysql que vous avez copiée. Cela ressemblerait donc à ceci:strace mysqld --basedir=/usr/local/mysql
open(...
ligne. Au lieu de cela, j'ai 4 lignes qui se terminent par = -1 Err#2
. Comment savoir maintenant quel fichier est chargé?
sudo dtruss mysqld 2>&1|grep my.cnf
@mgPePe, cette sortie signifie probablement qu'aucun des fichiers n'a été trouvé, donc aucun n'a été ouvert.
Tiré du fantastique livre O'Reilly "High Performance MySQL":
$ which mysqld
/usr/sbin/mysqld
$ /usr/sbin/mysqld --verbose --help | grep -A 1 "Default options"
Default options are read from the following files in the given order:
/etc/mysql/my.cnf ~/.my.cnf /usr/etc/my.cnf
!includedir
. J'essaie de comprendre pourquoi la !includedir
directive dans mon /etc/mysql/my.cnf
dossier ne fonctionne pas.
mysqld
avec le chemin complet?!
Si vous exécutez, mysql --verbose --help | less
il vous indiquera sur la ligne 11 quels .cnf
fichiers il recherchera.
Vous pouvez également faire mysql --print-defaults
pour vous montrer comment les valeurs de configuration qu'il utilisera. Cela peut également être utile pour identifier le fichier de configuration qu'il charge.
mysqld
place demysql
mysqld --print-defaults
, cela m'a donné exactement ce que je voulais lorsque j'ai googlé cette question.
Je suis sous Windows et j'ai installé la version la plus récente de la communauté MySQL 5.6
Ce que j'ai fait pour voir ce que le fichier de configuration utilise était d'aller dans Outils d'administration> Services> MySQL56> Clic droit> Propriétés et vérifier le chemin vers l'exécutable:
"C: / Program Files / MySQL / MySQL Server 5.6 / bin \ mysqld" --defaults-file = "C: \ ProgramData \ MySQL \ MySQL Server 5.6 \ my.ini" MySQL56
C:\ProgramData\MySQL\MySQL Server 5.7\my.ini
par défaut.
Une alternative consiste à utiliser
mysqladmin variables
mysqld --help --verbose est dangereux. Vous pouvez facilement écraser pidfile pour exécuter une instance! utilisez-le avec --pid-file = XYZ
Oh, et vous ne pouvez pas vraiment l'utiliser si vous avez plus d'une instance en cours d'exécution. Il ne vous montrera que la valeur par défaut.
Vraiment bon article à ce sujet:
Je viens de faire un test rapide sur ubuntu:
installé mysql-server, qui a créé /etc/mysql/my.cnf
mysqld --verbose --help | grep -A 1 "Options par défaut"
110112 13:35:26 [Note] Le plugin 'FEDERATED' est désactivé.
Les options par défaut sont lues à partir des fichiers suivants dans l'ordre indiqué: /etc/my.cnf /etc/mysql/my.cnf /usr/etc/my.cnf ~ / .my.cnf
créé /etc/my.cnf et /usr/etc/my.cnf, chacun avec un numéro de port différent
redémarré mysql - il utilisait le numéro de port défini dans /usr/etc/my.cnf
Entre-temps, nous avons également trouvé l'option --defaults-file dans mysqld. Si vous spécifiez un fichier de configuration là-bas, seul celui-ci sera utilisé, quel que soit ce qui est retourné par / usr / sbin / mysqld --verbose --help | grep -A 1 "Options par défaut"
J'ai trouvé cela vraiment utile:
Control Panel -> Administration Tools
Properties
Path to executable
et voyez s'il contient le chemin vers lemy.ini/my.cfg
Certains serveurs ont plusieurs versions de MySQL installées et configurées. Assurez-vous que vous utilisez la bonne version exécutée avec une commande Unix de:
ps -ax | grep mysql
Pour les personnes exécutant un serveur Windows avec mysql en tant que service, un moyen simple de savoir quel fichier de configuration vous exécutez consiste à ouvrir le panneau de configuration des services, à trouver votre service mysql (dans mon cas 'MYSQL56'), à faire un clic droit et à cliquer sur Propriétés . Ensuite, à partir de là, vous pouvez vérifier le "Chemin d'accès à l'exécutable" qui devrait avoir un defaults-file
commutateur qui pointe vers l'emplacement de votre fichier de configuration.
Si vous êtes sous Windows, vous pouvez utiliser Sysinternals procmon . Ouvrez-le et configurez le paramètre de filtre comme celui-ci, puis cliquez sur "Ajouter". Maintenant, procmon surveillera mysqld.
Maintenant, démarrez votre serveur mysql normalement. Procmon capturera les opérations d'arrière-plan de mysql. Recherchez «mon». dans le volet de résultats de procmon et vous trouverez quelque chose comme ce qui suit:
Il est clair que mysql recherche tour à tour une liste de fichiers de configuration. Dans mon cas, il a été trouvé C:\mysql-5.7.19-winx64\my.cnf
avec succès, il utilise donc celui-ci.