Nicht nur bei der Datenbank Wiederherstellung, auch bei Funktionen die nicht deterministisch sind.
Folgende Funktion ist nicht deterministisch:
CREATE FUNCTION func_count_something(p_someid INT) RETURNS INTEGER BEGIN DECLARE some_count INTEGER; SELECT COUNT(*) INTO artikel_count FROM some_table WHERE someid = p_someid; RETURN some_count; END;
Fehlermeldung bei der Erstellung:
[HY000][1418] 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)
Gleiche Funktion – deterministisch:
CREATE FUNCTION func_count_something(p_someid INT) RETURNS INTEGER -- this two lines do the trick DETERMINISTIC READS SQL DATA BEGIN DECLARE some_count INTEGER; SELECT COUNT(*) INTO artikel_count FROM some_table WHERE someid = p_someid; RETURN some_count; END;
dev.mysql.com – 25.7 Stored Program Binary Logging
Helfen würde auch ein:
SET GLOBAL log_bin_trust_function_creators = 1;
zur Erstellungszeit einer FUNCTION.