在MySQL中使用log_bin_trust_function_creators


Answers:


14

此变量控制二进制日志记录是否应该信任存储函数的创建者,以免不创建会导致不安全事件的存储函数。例如。具有UUID功能。

在文档中对此进行了很好的解释:

创建存储的函数时,必须声明它是确定性的或未修改数据。否则,对于数据恢复或复制可能是不安全的。

默认情况下,要接受CREATE FUNCTION语句,必须显式指定DETERMINISTIC,NO SQL或READS SQL DATA中的至少一个。否则会发生错误:

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)

要放松函数创建的上述条件(您必须具有SUPER特权并且必须声明函数为确定性或不修改数据),请将全局log_bin_trust_function_creators系统变量设置为1。

参考:mysql-documentation(阅读示例解释)。

关于第二个问题,如果它是动态的,并且在重新启动服务器后会改变:

  • 是的,它是一个动态变量。

  • 如果您不更新配置以反映更改,则该变量将在重新启动后更改。

参考:mysql-documentation-again


它需要一个布尔值吗?正确,对我来说它设置为TRUE。是否表示它为“ 1”?
tesla747

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

好,我明白了。但是是否有必要特别针对该参数将其更改为“ 1”?现在,由于我将其设置为TRUE,因此当我重新启动mysql服务时,它将再次更改
tesla747

1
那就对了!因此,要使其持久化,还应该在my.cnf文件中输入相同的配置值。
mysql_user 2015年

1
@ tesla747是的...启用二进制日志记录时适用。
mysql_user 2015年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.