DBAtlas · 数据库运维图谱

1418: Function has none of DETERMINISTIC, NO SQL, or READS SQL DATA (binary logging enabled)(函数未声明 DETERMINISTIC、NO SQL 或 READS SQL DATA 中的任何一项)

MySQL

含义

正在创建存储函数,但已启用二进制日志,且该函数没有声明任何确定性/数据访问特性。从复制安全的角度看此类函数存在歧义,因此 MySQL 拒绝创建。

原因

在 log_bin 为 ON 且 log_bin_trust_function_creators=OFF 时,定义函数时未指定 DETERMINISTIC、NO SQL 或 READS SQL DATA 特性。没有这些特性,MySQL 无法确定该函数在副本上会产生相同的结果。

解决方法

用正确的特性声明函数的行为:如果确实是确定性的,添加 DETERMINISTIC;不访问数据则用 NO SQL;只读取数据则用 READS SQL DATA。如果确定这些函数是安全的,可以作为统一策略设置 log_bin_trust_function_creators=1;但正确声明特性才是最安全的做法。确保特性与函数的实际行为一致。

在 DBAtlas 中打开 →

同一数据库的其他条目