Laden Sie my.cnf neu, ohne den MySQL-Dienst neu zu starten

26

Ich muss einen MySQL-Server als Replikationsmaster konfigurieren.

Ich habe my.cnf geändert, um binäre Protokolle zu aktivieren, aber um die Konfiguration neu zu laden, muss ich den Dienst mit neu laden /etc/init.d/mysqld restart. Das Problem ist, dass der Server mehrere Anfragen pro Sekunde erhält und ich nicht alle Daten verlieren möchte, die in der Zwischenzeit eintreffen könnten.

Gibt es eine Möglichkeit, die Konfigurationsdatei my.cnf neu zu laden, ohne den Dienst neu zu starten?

David Espart
quelle
3
/etc/init.d/restartwürde den ganzen Host neu starten. Sie denken wahrscheinlich an/etc/init.d/mysqld restart
Kevin M
Ja, ich erwähne mysqld restart. Bearbeitet Danke!
David Espart

Antworten:

28

Speziell MySQL:
Die Optionen in my.cnf sind Systemvariablen . Diese Variablen sind entweder dynamisch (können zur Laufzeit geändert werden) oder nicht dynamisch. Diejenigen, die dynamisch sind, können zur Laufzeit mit der SET-Variablensyntax geändert werden. Sie können die Variablen mit sehen SHOW VARIABLES;. Laut diesem Link im Handbuch ist die Option für das binäre Protokoll jedoch nicht dynamisch. Es sieht also so aus, als müssten Sie neu starten. Vielleicht möchten Sie warten, bis jemand, der sich mit MySQL etwas besser auskennt als ich, dies bestätigt.

Daemons im Allgemeinen:
Unter Linux enthält /etc/init.d/ Skripts, mit denen Daemons (Dienste) gestartet und gestoppt werden. Da es sich um Skripte handelt, können Sie diese mit einem Texteditor anzeigen. Viele dieser Skripte benötigen ein Reload-Argument. Wenn Sie sich mein mysql-Skript ansehen, wird beim erneuten Laden als Argument der Befehl mysqladmin verwendet. So heißt es im Handbuch für mysqladmin unter reload:

neu laden

Reload the grant tables.

Es sieht also im Allgemeinen so aus, als ob dies nicht für Konfigurationsänderungen gedacht ist, sondern für Änderungen der Berechtigungen (möglicherweise der entsprechende Befehl zum Löschen von Berechtigungen?).

Kyle Brandt
quelle
2
Hey, sehr gute Erklärung. Es scheint jedoch, dass es keine Möglichkeit gibt, dies ohne Neustart zu tun. Wenn niemand eine Lösung oder einen Workaround beantwortet, werde ich Ihre Frage akzeptieren. Vielen Dank.
David Espart
Laut Ihrem Link sieht es aus wie SET GLOBAL binlog_format = 'STATEMENT'; würde den Trick machen?
Kyle Smith
Andere Kyle: Sieht so aus, aber ich denke, dass die binäre Protokollierung bereits aktiviert sein muss, damit etwas getan werden kann (und möglicherweise festgelegt wird). Diese Variable wurde später als meine aktuelle Version 5.0.x von mysql eingeführt, sodass ich sie nicht testen kann.
Kyle Brandt
Ich musste nach der SET-Befehlssyntax suchen - hier ist ein Link, falls es jemand anderes benötigt: dev.mysql.com/doc/refman/5.1/en/set-option.html
Mark McDonald
4
Es ist auch erwähnenswert, welche Variablen dynamische Änderungen sind, wenn Sie MySQL-Versionen ausprobieren. Zum Beispiel können Sie in 5.x das langsame Abfrageprotokoll on-the-fly aktivieren, aber in 4.x nicht (wie ich gestern festgestellt habe!).
Coops
1

Ich habe mich nach einer Lösung umgesehen, war aber nicht zufrieden mit der begrenzten Hilfe, die ich gefunden habe. Ein Kerl hat einen Kill angeboten -HUP .. hat bei mir nicht funktioniert ..

Was ich getan habe, war die Apache-Instanzen anzuhalten und später fortzusetzen. Hat wie ein Zauber auf einem Server funktioniert, auf dem ich durchschnittlich 25 aktive Anfragen pro Sekunde habe.

mit sudo (offensichtlich) pkill -STOP httpd && /etc/init.d/mysqld restart && pkill -CONT httpd

Natürlich können der Name Ihres Apache-Prozesses und / oder die Skripte für den Neustart von MySQL von meinen abweichen, aber Sie haben die richtige Vorstellung!

Hassan Abdul Rehman
quelle