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?

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


é 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
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.