Bestimmen Sie, welche MySQL-Konfigurationsdatei verwendet wird


142

Gibt es einen Befehl, um festzustellen, welche Konfigurationsdatei MySQL 5.0 derzeit verwendet?

Antworten:


60

Wenn Sie unter Linux arbeiten, starten Sie das 'mysqld' mit stracez strace ./mysqld.

Unter all den anderen Systemaufrufen finden Sie etwas wie:

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

Wie Sie sehen können, listet es die .cnf-Dateien auf, die es zu verwenden versucht und schließlich verwendet.


9
Und wie macht man das auf einem laufenden System, ohne etwas durcheinander zu bringen?
Milan Babuškov

5
@ MilanBabuškov Sie sollten ps auxfden für MySQL ausgeführten Befehl ausführen und suchen. Normalerweise sieht es so aus wie mysqld --basedir=/usr/local/mysql ...(beachten Sie, dass ... nur bedeutet, dass der Befehl möglicherweise mehr Flags enthält, aber ich werde nicht alles auflisten). Wenn Sie es gefunden haben, kopieren Sie das Ganze und fahren Sie MySQL herunter. Wenn Sie unter Linux sind, ist es /etc/init.d/mysqld stopoder mysqladmin -u root -p shutdown. Führen Sie dann straceden von Ihnen kopierten Befehl mysql aus. So würde es aussehen:strace mysqld --basedir=/usr/local/mysql
Hengjie

Ich habe die open(...Leitung nicht. Stattdessen habe ich 4 Zeilen, die mit enden = -1 Err#2. Woher weiß ich jetzt, welche Datei geladen ist?
mgPePe

4
fwiiw, auf einem Mac können Sie dtruss anstelle von strace: sudo dtruss mysqld 2>&1|grep my.cnf@mgPePe verwenden. Diese Ausgabe bedeutet wahrscheinlich, dass keine der Dateien gefunden wurde und keine geöffnet wurde.
Vitaly

268

Entnommen aus dem fantastischen O'Reilly-Buch "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
Und ich gehe davon aus, dass die zuletzt aufgeführte Datei gewinnt?
mlissner

5
Das ist seltsam. Ich habe alle überprüft und sie sind alle leer (auf meinem Mac). Irgendeine Idee warum?
Abbood

7
Dies gibt nicht die geladene Konfiguration. eher mögliche benutzerdefinierte Konfigurationen, die geladen werden könnten
mgPePe

4
Ich glaube nicht, dass dies Dateien auflistet, die von angegeben sind !includedir. Ich versuche herauszufinden, warum die !includedirDirektive in meiner /etc/mysql/my.cnfDatei nicht funktioniert.
Buttle Butkus

2
Warum sollten Sie mysqldmit dem vollen Pfad anrufen müssen ?!
Panepeter

65

Wenn Sie es ausführen mysql --verbose --help | less, erfahren Sie in Zeile 11, nach welchen .cnfDateien gesucht wird.

Sie können auch mysql --print-defaultszeigen, wie die Konfigurationswerte verwendet werden. Dies kann auch hilfreich sein, um festzustellen, welche Konfigurationsdatei geladen wird.


1
+1, da dies der von MySQL empfohlene Weg ist, dies zu tun. Für Windows besteht eine einfache Möglichkeit darin, die Ausgabe in eine Datei zu kopieren, wenn Sie den Inhalt analysieren möchten.
kta

Unter Windows wurde mir eine Liste von Speicherorten angezeigt, aber nicht die richtige, die ich stattdessen mit der MySQL-Workbench ( stackoverflow.com/a/17953456/1504300 ) finde .
wirklich schön

3
Ich bin mir nicht sicher, ob es wichtig sein sollte, aber Sie möchten vielleicht mysqldanstelle vonmysql
nl-x

2
Und immer noch in Windows habe ich die Erfahrung gemacht, dass die Datei my.ini aus dem ProgramData-Verzeichnis gelesen wird, und dies wird in der hier vorgeschlagenen Antwort nicht angezeigt.
nl-x

2
Upvoted for mysqld --print-defaultsgab mir genau das, was ich wollte, als ich diese Frage googelte.
Per Lundberg

28

Ich bin unter Windows und habe die neueste Version von MySQL Community 5.6 installiert

Um zu sehen, welche Konfigurationsdatei verwendet wird, ging ich zu Verwaltung> Dienste> MySQL56> Rechtsklick> Eigenschaften und überprüfe den Pfad zur ausführbaren Datei:

"C: / Programme / MySQL / MySQL Server 5.6 / bin \ mysqld" --defaults-file = "C: \ ProgramData \ MySQL \ MySQL Server 5.6 \ my.ini" MySQL56


Dies funktioniert auch für MySQL 5.7. Es ist C:\ProgramData\MySQL\MySQL Server 5.7\my.inistandardmäßig aktiviert.
Ryan Shillington

18

Eine Alternative ist zu verwenden

mysqladmin variables

2
Es sagt eigentlich nicht, wo sich die cnf-Datei in meinen Variablen befindet. Ich verwende derzeit MySQL 5.5.20. Ich kann jedoch sagen, dass dies einmal so funktioniert hat, wie ich es zuvor in den Variablen gesehen habe. Vielleicht hat sich seit dem Wechsel zu 5.5 etwas geändert.
Hengjie

13

mysqld --help --verbose ist gefährlich. Sie können die PID-Datei zum Ausführen der Instanz einfach überschreiben! Verwenden Sie es mit --pid-file = XYZ

Oh, und Sie können es nicht wirklich verwenden, wenn mehr als eine Instanz ausgeführt wird. Es wird nur der Standardwert angezeigt.

Wirklich guter Artikel darüber:

Wie finde ich die MySQL-Konfigurationsdatei?


9

Habe gerade einen kurzen Test auf Ubuntu gemacht:

  • installierter MySQL-Server, der /etc/mysql/my.cnf erstellt hat

  • mysqld --verbose --help | grep -A 1 "Standardoptionen"

110112 13:35:26 [Hinweis] Das Plugin 'FEDERATED' ist deaktiviert.
Standardoptionen werden in der angegebenen Reihenfolge aus den folgenden Dateien gelesen: /etc/my.cnf /etc/mysql/my.cnf /usr/etc/my.cnf ~ / .my.cnf

  • Erstellt /etc/my.cnf und /usr/etc/my.cnf mit jeweils einer anderen Portnummer

  • mysql neu gestartet - es wurde die in /usr/etc/my.cnf festgelegte Portnummer verwendet

In der Zwischenzeit wurde auch die Option --defaults-file für mysqld gefunden. Wenn Sie dort eine Konfigurationsdatei angeben, wird nur diese verwendet, unabhängig davon, was von / usr / sbin / mysqld --verbose --help | zurückgegeben wird grep -A 1 "Standardoptionen"


4

Mit MySQL Workbench wird es unter "Server Status" angezeigt: Geben Sie hier die Bildbeschreibung ein


3

Ich fand das wirklich nützlich:

  1. Den MySQL-Prozess finden Sie unter Dienste unter Control Panel -> Administration Tools
  2. Klicken Sie mit der rechten Maustaste und wählen Sie Properties
  3. Klicken Sie auf und wählen Sie das aus Path to executableund prüfen Sie, ob es den Pfad zum enthältmy.ini/my.cfg

1
Dies hat bei meiner Server 2008-Installation funktioniert, danke.
Delliottg

2

Auf einigen Servern sind mehrere MySQL-Versionen installiert und konfiguriert. Stellen Sie sicher, dass Sie mit der richtigen Version arbeiten, die mit einem Unix-Befehl ausgeführt wird:

ps -ax | grep mysql

1

Für Benutzer, die Windows Server mit MySQL als Dienst ausführen, können Sie auf einfache Weise herausfinden, welche Konfigurationsdatei Sie ausführen, indem Sie die Systemsteuerung für Dienste öffnen, Ihren MySQL-Dienst suchen (in meinem Fall 'MYSQL56'), mit der rechten Maustaste klicken und auf Eigenschaften klicken . Dann können Sie von hier aus den "Pfad zur ausführbaren defaults-fileDatei " überprüfen, der einen Schalter haben sollte , der zeigt, wo sich Ihre Konfigurationsdatei befindet.


1

Nur für den Fall, dass Sie einen Mac ausführen, kann dies auch erreicht werden durch:

sudo dtruss mysqld 2>&1 | grep cnf

1

Wenn Sie unter Windows arbeiten, können Sie Sysinternals procmon verwenden . Öffnen Sie es und konfigurieren Sie die Filtereinstellung wie folgt. Klicken Sie dann auf "Hinzufügen". Jetzt überwacht procmon mysqld.

Geben Sie hier die Bildbeschreibung ein

Starten Sie nun Ihren MySQL-Server wie gewohnt. Procmon erfasst die Hintergrundoperationen von MySQL. Suche "mein". Im Ergebnisbereich von procmon finden Sie ungefähr Folgendes:

Geben Sie hier die Bildbeschreibung ein

Es ist klar, dass MySQL nacheinander eine Liste von Konfigurationsdateien durchsucht. In meinem Fall wurde es C:\mysql-5.7.19-winx64\my.cnferfolgreich gefunden, sodass es dieses verwendet.


Dies entspricht im Grunde der Top-Antwort für Windows. Danke.
Aaron Wallentine

0

Ich habe MySQL installiert. Verwenden Sie Brew Install MySQL

mysqld --verbose --help | less

Und es zeigt:

Geben Sie hier die Bildbeschreibung ein

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.