Określ, który plik konfiguracyjny MySQL jest używany

142

Czy istnieje polecenie określające, który plik konfiguracyjny jest obecnie używany przez MySQL 5.0?

yalestar
źródło

Odpowiedzi:

60

Jeśli korzystasz z Linuksa, uruchom 'mysqld' stracenp strace ./mysqld.

Wśród wszystkich innych wywołań systemowych znajdziesz coś takiego:

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

Tak więc, jak widzisz, zawiera listę plików .cnf, których próbuje użyć i których ostatecznie używa.


źródło
9
I jak to zrobić w działającym systemie, niczego nie psując?
Milan Babuškov
5
@ MilanBabuškov Powinieneś uruchomić ps auxfi znaleźć polecenie wykonane dla MySQL. Zwykle wygląda to na coś takiego jak mysqld --basedir=/usr/local/mysql ...(uwaga ... oznacza tylko, że w poleceniu może być więcej flag, ale nie będę ich wszystkich wymieniać). Po znalezieniu go skopiuj całość, a następnie zamknij MySQL. Jeśli używasz Linuksa, jest to /etc/init.d/mysqld stoplub mysqladmin -u root -p shutdown. Następnie uruchom straceskopiowane polecenie mysql. Tak by to wyglądało:strace mysqld --basedir=/usr/local/mysql
Hengjie
Nie mam open(...linii. Zamiast tego mam 4 wiersze, które kończą się na = -1 Err#2. Skąd mam wiedzieć, który plik jest załadowany?
mgPePe
4
fwiiw, na Macu możesz użyć dtruss zamiast strace: sudo dtruss mysqld 2>&1|grep my.cnf@mgPePe, to wyjście prawdopodobnie oznacza, że ​​żaden z plików nie został znaleziony, więc żaden nie został otwarty.
vitaly
268

Zaczerpnięte z fantastycznej książki 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
Mark B.
źródło
2
I zakładam, że ostatni wymieniony plik wygrywa?
mlissner
5
to dziwne ... Sprawdziłem każdego z nich i wszystkie są puste (na moim Macu) .. jakiś pomysł dlaczego?
opactwo
7
To nie daje załadowanej konfiguracji. raczej możliwe konfiguracje niestandardowe, które mogą zostać załadowane
mgPePe
4
Nie sądzę, aby to wyświetliło listę plików określonych przez !includedir. Próbuję dowiedzieć się, dlaczego !includedirdyrektywa w moim /etc/mysql/my.cnfpliku nie działa.
Buttle Butkus
2
Dlaczego miałbyś dzwonić mysqldz pełną ścieżką ?!
panepeter
65

Jeśli uruchomisz mysql --verbose --help | less, powie ci o linii 11, których .cnfplików będzie szukał.

Możesz również zrobić, mysql --print-defaultsaby pokazać, jakie wartości konfiguracyjne będą używane. Może to być również przydatne w określaniu, który plik konfiguracyjny jest ładowany.

staticsan
źródło
1
+1, ponieważ jest to zalecany przez mysql sposób, aby to zrobić. W przypadku systemu Windows jednym prostym sposobem jest zrzucenie danych wyjściowych do pliku, jeśli chcesz analizować zawartość.
kta
W systemie Windows podał mi listę lokalizacji, ale nie tę właściwą, którą udaje mi się znaleźć za pomocą środowiska roboczego mysql ( stackoverflow.com/a/17953456/1504300 ).
ładnie
3
Nie jestem pewien, czy to powinno mieć znaczenie, ale możesz chcieć użyć mysqldzamiastmysql
nl-x
2
I nadal w systemie Windows mam wrażenie, że plik my.ini jest odczytywany z katalogu ProgramData, czego nie widać w sugerowanej tutaj odpowiedzi.
nl-x
2
Głosowałem za mysqld --print-defaults, dało mi to dokładnie to, czego chciałem, kiedy w Google wpisałem to pytanie.
Per Lundberg
28

Korzystam z systemu Windows i zainstalowałem najnowszą wersję społeczności MySQL 5.6

To, co zrobiłem, aby zobaczyć, jakiego pliku konfiguracyjnego używa, to przejść do Narzędzia administracyjne> Usługi> MySQL56> Kliknij prawym przyciskiem myszy> Właściwości i sprawdź ścieżkę do pliku wykonywalnego:

"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
źródło
Działa to również w przypadku MySQL 5.7. Jest C:\ProgramData\MySQL\MySQL Server 5.7\my.inidomyślnie.
Ryan Shillington
18

Alternatywą jest użycie

mysqladmin variables
Steve
źródło
2
Właściwie nie mówi, gdzie znajduje się plik cnf w moich zmiennych. Obecnie używam MySQL 5.5.20. Jednak mogę powiedzieć, że kiedyś działało to tak, jak widziałem to wcześniej w zmiennych. Być może coś się zmieniło od czasu przejścia na 5.5.
Hengjie
13

mysqld --help --verbose jest niebezpieczny. Możesz łatwo nadpisać plik pidfile dla uruchomionej instancji! użyj go z --pid-file = XYZ

Aha, i naprawdę nie możesz go używać, jeśli masz uruchomioną więcej niż 1 instancję. Wyświetli tylko domyślną wartość.

Naprawdę dobry artykuł o tym:

Jak znaleźć plik konfiguracyjny MySQL?

Sasha
źródło
9

Właśnie zrobiłem szybki test na Ubuntu:

  • zainstalowany serwer mysql, który utworzył /etc/mysql/my.cnf

  • mysqld --verbose --help | grep -A 1 "Opcje domyślne"

110112 13:35:26 [Uwaga] Wtyczka „FEDERATED” jest wyłączona.
Domyślne opcje są odczytywane z następujących plików w podanej kolejności: /etc/my.cnf /etc/mysql/my.cnf /usr/etc/my.cnf ~ / .my.cnf

  • utworzono /etc/my.cnf i /usr/etc/my.cnf, każdy z innym numerem portu

  • zrestartował mysql - używał numeru portu ustawionego w /usr/etc/my.cnf

W międzyczasie znalazłem również opcję --defaults-file w mysqld. Jeśli podasz tam plik konfiguracyjny, tylko ten zostanie użyty, niezależnie od tego, co zostanie zwrócone przez / usr / sbin / mysqld --verbose --help | grep -A 1 "Opcje domyślne"

Herta
źródło
4

Korzystając z MySQL Workbench, będzie on widoczny pod "Stanem serwera": wprowadź opis obrazu tutaj

fanThomas
źródło
3

Uważam, że to naprawdę przydatne:

  1. Znajdź proces MySQL w sekcji Usługi pod Control Panel -> Administration Tools
  2. Kliknij prawym przyciskiem myszy i wybierz Properties
  3. Kliknij i wybierz Path to executablei zobacz, czy zawiera ścieżkę do plikumy.ini/my.cfg
Łukasz
źródło
1
To zadziałało w przypadku mojej instalacji Server 2008, dzięki.
delliottg
2

Na niektórych serwerach zainstalowano i skonfigurowano wiele wersji MySQL. Upewnij się, że masz do czynienia z poprawną wersją działającą z poleceniem Unix:

ps -ax | grep mysql
Heather McVay
źródło
1

Dla osób korzystających z serwera Windows z mysql jako usługą, prostym sposobem sprawdzenia, jaki plik konfiguracyjny używasz, jest otwarcie panelu sterowania usług, znalezienie usługi mysql (w moim przypadku 'MYSQL56'), kliknięcie prawym przyciskiem myszy i kliknięcie właściwości . Następnie możesz sprawdzić "Ścieżkę do defaults-filepliku wykonywalnego", która powinna mieć przełącznik wskazujący miejsce, w którym znajduje się plik konfiguracyjny.

Kershrew
źródło
1

Na wypadek, gdybyś korzystał z Maca, można to również osiągnąć poprzez:

sudo dtruss mysqld 2>&1 | grep cnf
talsibony
źródło
1

Jeśli korzystasz z systemu Windows, możesz użyć Sysinternals procmon . Otwórz go i skonfiguruj ustawienia filtru w ten sposób, a następnie kliknij „Dodaj”. Teraz procmon będzie monitorował mysqld.

wprowadź opis obrazu tutaj

Teraz uruchom serwer mysql w normalny sposób. Procmon przechwyci operacje mysql w tle. Wyszukaj „moje”. w panelu wyników procmon, a znajdziesz coś takiego:

wprowadź opis obrazu tutaj

Jest jasne, że mysql przeszukuje listę plików konfiguracyjnych po kolei. W moim przypadku C:\mysql-5.7.19-winx64\my.cnfudało się, więc używa tego.

Po prostu uczący się
źródło
Jest to w zasadzie odpowiednik najlepszej odpowiedzi dla systemu Windows. Dziękuję Ci.
Aaron Wallentine
0

Zainstalowałem mysql, użyj brew install mysql

mysqld --verbose --help | less

I to pokazuje:

wprowadź opis obrazu tutaj

Jądro
źródło