Вот несколько подробных объяснений, которые я нашел в документации.Надеюсь, это поможет вам понять.
Операторы CREATE FUNCTION
и INSERT
записываются в двоичный журнал, поэтому ведомый будет выполнять их.Поскольку slave SQL thread has full privileges
, он будет выполнять dangerous statement
.Таким образом, вызов функции по-разному влияет на главное и подчиненное устройства и составляет not replication-safe
.
. Чтобы защититься от этой опасности для серверов, на которых включено двоичное ведение журнала, создатели хранимых функций должны иметь привилегию SUPER, в дополнение кобычная привилегия CREATE ROUTINE, которая требуется.Аналогично, чтобы использовать ALTER FUNCTION, вы должны иметь привилегию SUPER в дополнение к привилегии ALTER ROUTINE.
Без привилегии SUPER произойдет ошибка:
ERROR 1419 (HY000): You do not have the SUPER privilege and
binary logging is enabled (you *might* want to use the less safe
log_bin_trust_function_creators variable)
Если вы не хотите, чтобы создатели функций имели привилегию SUPER (например, если все пользователи с CREATE ROUTINEпривилегиями в вашей системе являются опытные разработчики приложений), установите глобальную системную переменную log_bin_trust_function_creators
в 1
.
Вы также можете установить эту переменную, используя опцию --log-bin-trust-function-creators=1
при запуске сервера.Если двоичное ведение журнала не включено, log_bin_trust_function_creators
не применяется.SUPER не требуется для создания функции, если, как описано ранее, значение DEFINER в определении функции не требует этого.
src: https://dev.mysql.com/doc/refman/8.0/en/stored-programs-logging.html