Antworten:
Wenn Sie unter Linux arbeiten, starten Sie das 'mysqld' mit strace
z 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.
ps auxf
den 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 stop
oder mysqladmin -u root -p shutdown
. Führen Sie dann strace
den von Ihnen kopierten Befehl mysql aus. So würde es aussehen:strace mysqld --basedir=/usr/local/mysql
open(...
Leitung nicht. Stattdessen habe ich 4 Zeilen, die mit enden = -1 Err#2
. Woher weiß ich jetzt, welche Datei geladen ist?
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.
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
!includedir
. Ich versuche herauszufinden, warum die !includedir
Direktive in meiner /etc/mysql/my.cnf
Datei nicht funktioniert.
mysqld
mit dem vollen Pfad anrufen müssen ?!
Wenn Sie es ausführen mysql --verbose --help | less
, erfahren Sie in Zeile 11, nach welchen .cnf
Dateien gesucht wird.
Sie können auch mysql --print-defaults
zeigen, wie die Konfigurationswerte verwendet werden. Dies kann auch hilfreich sein, um festzustellen, welche Konfigurationsdatei geladen wird.
mysqld
anstelle vonmysql
mysqld --print-defaults
gab mir genau das, was ich wollte, als ich diese Frage googelte.
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
C:\ProgramData\MySQL\MySQL Server 5.7\my.ini
standardmäßig aktiviert.
Eine Alternative ist zu verwenden
mysqladmin variables
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:
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"
Ich fand das wirklich nützlich:
Control Panel -> Administration Tools
Properties
Path to executable
und prüfen Sie, ob es den Pfad zum enthältmy.ini/my.cfg
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
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-file
Datei " überprüfen, der einen Schalter haben sollte , der zeigt, wo sich Ihre Konfigurationsdatei befindet.
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.
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:
Es ist klar, dass MySQL nacheinander eine Liste von Konfigurationsdateien durchsucht. In meinem Fall wurde es C:\mysql-5.7.19-winx64\my.cnf
erfolgreich gefunden, sodass es dieses verwendet.