Załaduj ponownie plik my.cnf bez ponownego uruchamiania usługi MySQL

26

Muszę skonfigurować serwer MySQL, aby działał jako wzorzec replikacji.

Zmodyfikowałem plik my.cnf, aby aktywować dzienniki binarne, ale teraz, aby przeładować konfigurację, muszę ponownie załadować usługę /etc/init.d/mysqld restart. Problem polega na tym, że serwer odbiera kilka zapytań na sekundę, a tymczasem nie chcę stracić wszystkich danych.

Czy istnieje sposób na ponowne załadowanie pliku konfiguracyjnego my.cnf bez ponownego uruchamiania usługi?

David Espart
źródło
3
/etc/init.d/restartzrestartuje cały host. Prawdopodobnie myślisz o/etc/init.d/mysqld restart
Kevin M
Tak, mam na myśli mysqld restart. Edytowane. Dzięki!
David Espart

Odpowiedzi:

28

MySQL W szczególności:
Opcje w my.cnf są zmiennymi systemowymi . Te zmienne są dynamiczne (można je zmienić w czasie wykonywania) lub nie są dynamiczne. Te, które są dynamiczne, można zmieniać w czasie wykonywania za pomocą składni zmiennej SET. Możesz zobaczyć zmienne za pomocą SHOW VARIABLES;. Ale zgodnie z tym linkiem w instrukcji opcja dziennika binarnego nie jest dynamiczna. Wygląda na to, że musisz zrestartować. Możesz jednak poczekać, aż ktoś, kto zna mysql trochę lepiej ode mnie, potwierdzi to.

Ogólne
demony : W systemie Linux /etc/init.d/ przechowuje skrypty uruchamiające i zatrzymujące demony (usługi). Ponieważ są to skrypty, możesz je przeglądać za pomocą edytora tekstu. Wiele z tych skryptów wymaga argumentu przeładowania. Patrząc na mój skrypt mysql, przeładuj, ponieważ argument używa komendy mysqladmin. Tak więc instrukcja mysqladmin podczas przeładowania mówi:

przeładować

Reload the grant tables.

Wygląda na to, że generalnie nie dotyczy to zmian konfiguracji, ale raczej zmian uprawnień (może równoważne polecenie przywracania uprawnień?).

Kyle Brandt
źródło
2
Hej, bardzo dobre wytłumaczenie. Wygląda jednak na to, że nie można tego zrobić bez ponownego uruchomienia. Jeśli nikt nie odpowie na rozwiązanie lub obejście, zaakceptuję twoje pytanie. Dziękuję Ci.
David Espart
Zgodnie z twoim linkiem wygląda to tak: USTAW GLOBALNY binlog_format = 'STATEMENT'; zrobiłby lewę?
Kyle Smith
Inny Kyle: Wygląda na to, ale myślę, że rejestrowanie binarne musiałoby już być włączone, aby cokolwiek mogło zrobić (i być może być ustawione). Ta zmienna została wprowadzona później niż moja bieżąca wersja mysql 5.0.x, więc nie mogę przetestować.
Kyle Brandt
Musiałem poszukać składni polecenia SET - tutaj jest link na wypadek, gdyby ktoś go potrzebował: dev.mysql.com/doc/refman/5.1/en/set-option.html
Mark McDonald
4
Warto również wspomnieć, które zmienne są zmianami dynamicznymi, gdy masz szansę na wersje MySQL. Na przykład w 5.x możesz włączyć rejestrowanie wolnych zapytań w locie, ale w 4.x nie możesz (jak odkryłem wczoraj!).
Coops
1

szukałem rozwiązania tego problemu, ale nie byłem zadowolony z ograniczonej pomocy, którą znalazłem. Jeden facet zaproponował zabójstwo -HUP .. nie działało dla mnie ..

to, co zrobiłem, to wstrzymanie instancji apache .. a następnie kontynuowanie ich później .. działało jak urok na serwerze, na którym mam średnio 25 aktywnych żądań na sekundę.

z sudo (oczywiście) pkill -STOP httpd && /etc/init.d/mysqld restart && pkill -CONT httpd

oczywiście nazwa twojego procesu apache i / lub skrypty restartujące mysql mogą się różnić od moich, ale masz dobry pomysł!

Hassan Abdul Rehman
źródło