Déterminez quel fichier de configuration MySQL est utilisé


142

Existe-t-il une commande pour déterminer quel fichier de configuration MySQL 5.0 utilise actuellement?

Réponses:


60

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.


9
Et comment faire cela sur un système en cours d'exécution sans rien gâcher?
Milan Babuškov

5
@ MilanBabuškov Vous devez exécuter ps auxfet 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 stopou mysqladmin -u root -p shutdown. Puis exécutez straceavec la commande mysql que vous avez copiée. Cela ressemblerait donc à ceci:strace mysqld --basedir=/usr/local/mysql
Hengjie

Je n'ai pas la open(...ligne. Au lieu de cela, j'ai 4 lignes qui se terminent par = -1 Err#2. Comment savoir maintenant quel fichier est chargé?
mgPePe

4
fwiiw, sur un Mac, vous pouvez utiliser dtruss au lieu de strace: 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.
vitaly

268

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

2
Et je suppose que le dernier fichier répertorié gagne?
mlissner

5
c'est étrange .. J'ai vérifié chacun d'entre eux et ils sont tous vides (sur mon mac) .. une idée pourquoi?
abbood

7
Cela ne donne pas la configuration chargée. configurations personnalisées plutôt possibles qui pourraient être chargées
mgPePe

4
Je ne pense pas que cela listera les fichiers spécifiés par !includedir. J'essaie de comprendre pourquoi la !includedirdirective dans mon /etc/mysql/my.cnfdossier ne fonctionne pas.
Buttle Butkus

2
Pourquoi auriez-vous besoin d'appeler mysqldavec le chemin complet?!
panepeter

65

Si vous exécutez, mysql --verbose --help | lessil vous indiquera sur la ligne 11 quels .cnffichiers il recherchera.

Vous pouvez également faire mysql --print-defaultspour vous montrer comment les valeurs de configuration qu'il utilisera. Cela peut également être utile pour identifier le fichier de configuration qu'il charge.


1
+1 car c'est la manière recommandée par mysql de le faire. Pour Windows, un moyen simple consiste à vider la sortie dans un fichier si vous souhaitez analyser le contenu.
kta

Sur Windows, il m'a indiqué une liste d'emplacements mais pas le bon, que j'arrive à trouver avec mysql workbench ( stackoverflow.com/a/17953456/1504300 ).
reallynice

3
Pas sûr que cela ait une importance, mais vous voudrez peut-être utiliser à la mysqldplace demysql
nl-x

2
Et toujours dans Windows, je constate que my.ini est lu à partir du répertoire ProgramData, et cela n'apparaît pas dans la réponse suggérée ici.
nl-x

2
J'ai voté pour mysqld --print-defaults, cela m'a donné exactement ce que je voulais lorsque j'ai googlé cette question.
Per Lundberg

28

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


Cela fonctionne également pour MySQL 5.7. C'est C:\ProgramData\MySQL\MySQL Server 5.7\my.inipar défaut.
Ryan Shillington le

18

Une alternative consiste à utiliser

mysqladmin variables

2
Il ne dit pas vraiment où se trouve le fichier cnf dans mes variables. J'utilise actuellement MySQL 5.5.20. Cependant, je peux dire qu'il était une fois cela fonctionnait comme je l'ai vu précédemment dans les variables. Peut-être que quelque chose a changé depuis le passage à la version 5.5.
Hengjie

13

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:

Comment trouver le fichier de configuration MySQL?


9

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"


4

En utilisant MySQL Workbench, il sera affiché sous "État du serveur": entrez la description de l'image ici


3

J'ai trouvé cela vraiment utile:

  1. Recherchez le processus MySQL dans Services sous Control Panel -> Administration Tools
  2. Cliquez avec le bouton droit de la souris et choisissez Properties
  3. Cliquez et sélectionnez le Path to executableet voyez s'il contient le chemin vers lemy.ini/my.cfg

1
Cela a fonctionné pour moi sur mon installation Server 2008, merci.
delliottg

2

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

1

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-filecommutateur qui pointe vers l'emplacement de votre fichier de configuration.


1

Juste au cas où vous utilisez Mac, cela peut également être réalisé en:

sudo dtruss mysqld 2>&1 | grep cnf

1

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.

entrez la description de l'image ici

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:

entrez la description de l'image ici

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.cnfavec succès, il utilise donc celui-ci.


C'est fondamentalement l'équivalent de la première réponse, pour Windows. Merci.
Aaron Wallentine

0

J'ai installé mysql use brew install mysql

mysqld --verbose --help | less

Et cela montre:

entrez la description de l'image ici

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.