Utilisation de log_bin_trust_function_creators dans MySQL


14

À quoi ça sert log_bin_trust_function_creators? De plus, la valeur du paramètre est-elle dynamique? Cela changera-t-il si je redémarre mon service MySQL?

Réponses:


12

Cette variable contrôle si la journalisation binaire doit faire confiance aux créateurs de fonctions stockées pour ne pas créer de fonctions stockées qui provoqueront des événements dangereux. Par exemple. ayant des fonctions UUID.

Cela a été bien expliqué dans la documentation:

Lorsque vous créez une fonction stockée, vous devez déclarer qu'elle est déterministe ou qu'elle ne modifie pas les données. Sinon, il peut être dangereux pour la récupération ou la réplication de données.

Par défaut, pour qu'une instruction CREATE FUNCTION soit acceptée, au moins l'une des données DETERMINISTIC, NO SQL ou READS SQL DATA doit être spécifiée explicitement. Sinon, une erreur se produit:

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)

Pour assouplir les conditions précédentes sur la création de fonction (que vous devez avoir le privilège SUPER et qu'une fonction doit être déclarée déterministe ou pour ne pas modifier les données), définissez la variable système globale log_bin_trust_function_creators sur 1.

Référence: mysql-documentation (lisez ceci comme il l'explique avec l'exemple.)

À propos de votre deuxième question, si elle est dynamique et changera-t-elle si vous redémarrez le serveur:

  • Oui, c'est une variable dynamique.

  • La variable changera au redémarrage, si vous ne mettez pas à jour la configuration pour refléter le changement.

Référence: mysql-documentation-again


faut-il une valeur booléenne? Bon, il est réglé sur VRAI pour moi .. cela signifie-t-il que c'est «1»?
tesla747

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

Ok je comprends ça. Mais est-il nécessaire de le changer en «1» en particulier pour ce paramètre? Maintenant, depuis que je l'ai défini comme VRAI, lorsque je redémarrerai le service mysql, cela changera-t-il à nouveau
tesla747

1
C'est vrai! Donc, pour le rendre persistant, vous devez également mettre la même valeur de configuration dans votre fichier my.cnf.
mysql_user

1
@ tesla747 yep ... il s'applique lorsque la journalisation binaire est activée.
mysql_user
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.