昊鼎王五:解决mysql导入function函数失败问题的方法

昊鼎王五:解决mysql导入function函数失败问题的方法

引子

有时候在WEB界面上操作,会报如下错:

nested exception is com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: FUNCTION haoding205_op.function_xyzInfo does not exist

排查

上面的意思是function函数没有找到,我明明是导入了数据库的啊,为什么没有呢?
再去查看导入日志:
原来是在创建存储过程时就出错了,信息如下:

ERROR 1418 (HY000): This function has none of DETERMINISTIC, NO SQL, or READS SQL DATA in its declaration and binary logging is enabled

原因定位

这是我们的主从MYSQL开启了bin-log(二进制LOG), 函数面临着如下选项

DETERMINISTIC     不确定的
NO SQL            没有SQl语句,当然也不会修改数据
READS SQL DATA    只是读取数据,当然也不会修改数据
MODIFIES SQL DATA 要修改数据
CONTAINS SQL      包含了SQL语句

解决方法

1.快速生效法

其中在function里面,只有 DETERMINISTIC, NO SQL 和 READS SQL DATA 被支持。如果我们开启了 bin-log, 我们就必须为我们的function指定一个参数。
解决方法:

mysql -uroot -p
mysql> show variables like 'log_bin_trust_function_creators';
+---------------------------------+-------+
| Variable_name                   | Value |
+---------------------------------+-------+
| log_bin_trust_function_creators | OFF   |
+---------------------------------+-------+
mysql> set global log_bin_trust_function_creators=1;
mysql> show variables like 'log_bin_trust_function_creators';
+---------------------------------+-------+
| Variable_name                   | Value |
+---------------------------------+-------+
| log_bin_trust_function_creators | ON    |
+---------------------------------+-------+

将该参数修改成ON之后,导入function函数就不会报上述的错误了。

2.冷生效法

在第一种方法修改了参数以后,如果mysqld重启,这个参数又会消失。为了使其不受重启影响,我们在/etc/my.cnf配置文件中
添加:

log_bin_trust_function_creators=1

/etc/my.cnf添加了如上的参数之后,重启之后就生效。然后再次导入function函数也不会报错了。

好了,聪明如你,解决function函数导入失败的问题的方法就写到这里了。
解决了阻挡导入的前的报错,下一篇讲如何更快更好的导出和导入function函数或MYSQL全库。

还有其他问题的可以在评论区留言或者如下联系方式扫码向我提问。
这里写图片描述

猜你喜欢

转载自blog.csdn.net/haoding205/article/details/81536126