Verwendung von log_bin_trust_function_creators in MySQL


14

Wofür ist das gut log_bin_trust_function_creators? Ist der Wert des Parameters auch dynamisch? Wird sich das ändern, wenn ich meinen MySQL-Dienst neu starte?

Antworten:


12

Diese Variable steuert, ob die binäre Protokollierung den Erstellern gespeicherter Funktionen vertrauen soll, um keine gespeicherten Funktionen zu erstellen, die unsichere Ereignisse verursachen. Z.B. mit UUID-Funktionen.

Dies wurde in der Dokumentation gut erklärt:

Wenn Sie eine gespeicherte Funktion erstellen, müssen Sie entweder angeben, dass sie deterministisch ist oder dass sie keine Daten ändert. Andernfalls ist es möglicherweise nicht sicher für die Datenwiederherstellung oder -replikation.

Standardmäßig muss mindestens eines von DETERMINISTIC, NO SQL oder READS SQL DATA explizit angegeben werden, damit eine CREATE FUNCTION-Anweisung akzeptiert wird. Andernfalls tritt ein Fehler auf:

ERROR 1418 (HY000): This function has none of DETERMINISTIC, NO SQL, or READS SQL DATA in its declaration and binary logging is enabled (you *might* want to use the less safe log_bin_trust_function_creators variable)

Setzen Sie die globale Systemvariable log_bin_trust_function_creators auf 1, um die vorherigen Bedingungen bei der Funktionserstellung zu lockern (Sie müssen über das SUPER-Privileg verfügen und eine Funktion muss als deterministisch deklariert werden oder um Daten nicht zu ändern).

Referenz: mysql-documentation (lesen Sie dies wie am Beispiel erklärt.)

Zu Ihrer zweiten Frage, ob sie dynamisch ist und sich ändern wird, wenn Sie den Server neu starten:

  • Ja, es ist eine dynamische Variable.

  • Die Variable ändert sich beim Neustart, wenn Sie die Konfiguration nicht aktualisieren, um die Änderung widerzuspiegeln.

Referenz: mysql-documentation-again


nimmt es einen booleschen Wert an? Richtig, es ist für mich auf TRUE gesetzt. Bedeutet das, dass es '1' ist?
Tesla747

mysql> select if(1 is true,'TRUE','FALSE')\G *************************** 1. row *************************** if(1 is true,'TRUE','FALSE'): TRUE
mysql_user

OK das verstehe ich. Aber muss es speziell für diesen Parameter auf '1' geändert werden? Jetzt, da ich es auf WAHR gesetzt habe, ändert es sich wieder, wenn ich den Mysql-Dienst neu
starte

1
Das ist richtig! Um es dauerhaft zu machen, sollten Sie denselben Konfigurationswert auch in Ihre my.cnf-Datei einfügen.
mysql_user

1
@ tesla747 yep ... es gilt, wenn die binäre Protokollierung aktiviert ist.
mysql_user
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.