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?

yalestar
la source

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.


la source
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
Marque B
la source
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.

statique
la source
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

Alexandru Trandafir Catalin
la source
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
Steve
la source
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?

Sasha
la source
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"

Herta
la source
4

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

fanThomas
la source
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
Luke
la source
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
Heather McVay
la source
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.

Kershrew
la source
1

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

sudo dtruss mysqld 2>&1 | grep cnf
talsibony
la source
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.

Juste un apprenant
la source
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

Noyau
la source