Answers:
此变量控制二进制日志记录是否应该信任存储函数的创建者,以免不创建会导致不安全事件的存储函数。例如。具有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> select if(1 is true,'TRUE','FALSE')\G *************************** 1. row *************************** if(1 is true,'TRUE','FALSE'): TRUE