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


Ich muss einen MySQL-Server konfigurieren, der als Replikationsmaster fungiert.

Ich habe my.cnf modifiziert, um Binärlogs zu aktivieren, aber jetzt muss ich den Dienst neu laden, um die Konfiguration neu zu laden /etc/init.d/mysqld restart. Das Problem ist, dass der Server mehrere Abfragen pro Sekunde erhält und ich nicht alle Daten verlieren möchte, die währenddessen ankommen könnten.

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


25
2017-10-28 10:55


Ursprung


/etc/init.d/restart würde den gesamten Host neu starten. Du denkst wahrscheinlich darüber nach /etc/init.d/mysqld restart - Kevin M
Ja, ich habe mysqld neustart. Bearbeitet. Vielen Dank! - David Espart


Antworten:


MySQL spezifisch:
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;. Aber laut Dieser Link im Handbuch, die binäre Protokolloption ist nicht dynamisch. Es sieht also so aus, als müsste man neu starten. Vielleicht möchten Sie auf jemanden warten, der Mysql ein wenig besser als ich weiß, dies zu bestätigen.

Dämonen im Allgemeinen:
In Linux enthält /etc/init.d/ Skripte, die Dämonen (Dienste) starten und stoppen. Da dies Skripte sind, können Sie sie mit einem Texteditor anzeigen. Viele dieser Skripts benötigen ein Reload-Argument. Wenn ich mein mysql-Skript anschaue, verwende ich als Argument erneut den Befehl mysqladmin. Das Handbuch für mysqladmin unter reload sagt also:

neu laden

Reload the grant tables.

Es sieht im Allgemeinen so aus, dass dies nicht für Konfigurationsänderungen, sondern für Änderungen von Privilegien gilt (Vielleicht der äquivalente Flush-Privilegien-Befehl?).


27
2017-10-28 11:15



Hey, sehr gute Erklärung. Es scheint, dass es keine Möglichkeit gibt, es 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
Anderer Kyle: Sieht so aus, aber ich denke, dass die binäre Protokollierung bereits dafür aktiviert sein müsste, um irgendetwas zu tun (und vielleicht eingestellt zu sein). Diese Variable wurde später als meine aktuelle Version 5.0.x von MySQL eingeführt, so dass ich nicht testen kann. - Kyle Brandt♦
Ich musste nach der SET-Befehlssyntax suchen - hier ist ein Link, falls jemand anders es braucht: dev.mysql.com/doc/refman/5.1/de/set-option.html - Mark McDonald
Es ist auch erwähnenswert, welche Variablen dynamische Änderungen sind, wenn Sie MySQL-Versionen bevorzugen. Zum Beispiel in 5.x können Sie das langsame Abfrageprotokoll on-the-fly aktivieren, aber in 4.x können Sie nicht (wie ich gestern entdeckte!). - Coops


Ich habe nach einer Lösung gesucht, aber ich war nicht zufrieden mit der begrenzten Hilfe, die ich gefunden habe. Ein Kerl bot eine Tötung-HUP .. hat nicht für mich funktioniert ..

was ich getan habe, war die Apache-Instanzen anzuhalten .. und dann später sie später .. funktionierte wie ein Charme auf einem Server, wo ich durchschnittlich 25 aktive Anfragen pro Sekunde habe.

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

Natürlich kann Ihr Apache Prozess Name und / oder MySQL Neustart Skripte von mir abweichen, aber Sie bekommen die Idee richtig!


1
2018-03-03 07:32