Mysql创建Function报1418错误

来源:互联网 发布:mac 播放器 自动字幕 编辑:程序博客网 时间:2024/06/07 05:09
今天在本地创建了一个自定义函数用来生成随机数做列主键,本地测试成功后放到生产环境后,一直报错。
仔细查看报错信息:
错误代码:1418

This function has none of DETERMINISTIC, NO SQL, or READS SQL DATA in its declaration and binary logging


看到binary logging感觉很奇怪,创建函数和二进制日志文件有什么关系,查询资料后发现,原来是因为生产环境使用了
两台数据库服务器进行主从复制备份。binary log进行同步时需要知道函数创建的语句是什么类型,否则可能造成同步数据不一致现象。
所以需要在RETURNS TYPE后面,BEGIN前面加上创建类型。
如RETURN VARCHAR(10) 
  DETERMINISTIC
一般有下面这几种类型:
1)DETERMINISTIC:不确定的
2)NO SQL:没有SQL语句
3)READS SQL DATA:读取数据,不涉及修改数据
4)MODIFIES SQL DATA:涉及到修改数据
5)CONTAINS SQL:包含了SQL语句
可以根据需要选择合适的类型
这种设置方法在数据库服务重启后会失效,如果想要数据库重启仍能生效,可以在my.conf文件的[mysqld]后面加上
log_bin_trust_routine_creators=1;
原创粉丝点击