Uso de log_bin_trust_function_creators no MySQL

14

Para que serve log_bin_trust_function_creators? Além disso, o valor do parâmetro é dinâmico? Isso mudará se eu reiniciar meu serviço MySQL?

tesla747
fonte

Respostas:

12

Essa variável controla se o log binário deve confiar nos criadores da função armazenada para não criar funções armazenadas que causarão eventos inseguros. Por exemplo. tendo funções UUID.

Isso foi explicado bem na documentação:

Ao criar uma função armazenada, você deve declarar que é determinista ou que não modifica dados. Caso contrário, pode não ser seguro para recuperação ou replicação de dados.

Por padrão, para que uma instrução CREATE FUNCTION seja aceita, pelo menos um dos DETERMINISTIC, NO SQL ou READS SQL DATA deve ser especificado explicitamente. Caso contrário, ocorre um erro:

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)

Para relaxar as condições anteriores na criação da função (que você deve ter o privilégio SUPER e que uma função deve ser declarada determinística ou não modificar dados), configure a variável global do sistema log_bin_trust_function_creators como 1.

Referência: mysql-documentation (leia isso como explica o exemplo).

Sobre sua segunda pergunta, se é dinâmica e será alterada se você reiniciar o servidor:

  • Sim, é uma variável dinâmica.

  • A variável será alterada após a reinicialização, se você não atualizar a configuração para refletir a alteração.

Referência: mysql-documentation-again

mysql_user
fonte
é preciso um valor booleano? Certo, está definido como VERDADEIRO para mim .. isso significa que é '1'?
tesla747
mysql> select if(1 is true,'TRUE','FALSE')\G *************************** 1. row *************************** if(1 is true,'TRUE','FALSE'): TRUE
Mysql_user
Ok, eu entendo isso. Mas é necessário alterá-lo para '1' particularmente para esse parâmetro? Agora desde que eu defini-lo como TRUE, quando eu reiniciar o serviço mysql vai mudar novamente
tesla747
1
Está certo! Portanto, para torná-lo persistente, você deve colocar o mesmo valor de configuração no seu arquivo my.cnf.
Mysql_user
1
@ tesla747 sim ... aplica-se quando o log binário está ativado.
Mysql_user