Odpowiedzi:
Jeśli korzystasz z Linuksa, uruchom 'mysqld' strace
np 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.
ps auxf
i 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 stop
lub mysqladmin -u root -p shutdown
. Następnie uruchom strace
skopiowane polecenie mysql. Tak by to wyglądało:strace mysqld --basedir=/usr/local/mysql
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?
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.
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
!includedir
. Próbuję dowiedzieć się, dlaczego !includedir
dyrektywa w moim /etc/mysql/my.cnf
pliku nie działa.
mysqld
z pełną ścieżką ?!
Jeśli uruchomisz mysql --verbose --help | less
, powie ci o linii 11, których .cnf
plików będzie szukał.
Możesz również zrobić, mysql --print-defaults
aby 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.
mysqld
zamiastmysql
mysqld --print-defaults
, dało mi to dokładnie to, czego chciałem, kiedy w Google wpisałem to pytanie.
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
C:\ProgramData\MySQL\MySQL Server 5.7\my.ini
domyślnie.
Alternatywą jest użycie
mysqladmin variables
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:
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"
Uważam, że to naprawdę przydatne:
Control Panel -> Administration Tools
Properties
Path to executable
i zobacz, czy zawiera ścieżkę do plikumy.ini/my.cfg
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
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-file
pliku wykonywalnego", która powinna mieć przełącznik wskazujący miejsce, w którym znajduje się plik konfiguracyjny.
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.
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:
Jest jasne, że mysql przeszukuje listę plików konfiguracyjnych po kolei. W moim przypadku C:\mysql-5.7.19-winx64\my.cnf
udało się, więc używa tego.