mysql 从库报错1418分析处理--生产案例

mysql 从库报错1418分析处理–生产案例

某天管理员反应某系统主从报错如下:
Last_Errno: 1418
Last_Error: Worker 1 failed executing transaction ‘c87541e5-d534-11e9-fc56-f85990571ecd:94190xxx’ at master log mysql-bin.000078, end_log_pos 1019424988.

ERROR 1418 (HY000): 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)

Query: ‘CREATE DEFINER=xxxxxxuser@% FUNCTION currVal(seq_name VARCHAR(50)) RETURNS bigint(20)
BEGIN
DECLARE value BIGINT;
SELECT current_vlaue INTO value
FROM f_wase_base_sequence
WHRER upper(name) = upper(seq_name);
RETURNS value;
END’,Error 1418

确认主从相关变量设置:
查看报错是主库有创建不确定函数,
主库设置了 log_bin_trust_function_creators =on;
从库设置了 log_bin_trust_function_creators =off;
因主从相关此变量设置不一样导致复制中断。

内在原因:

二进制日志包含有关修改数据库内容的SQL语句的信息,该信息以描述修改的“ 事件 ”的形式存储。二进制日志有两个重要目的分别是主从复制和备份恢复。

但是注意存储程序(存储过程和函数,触发器和事件)有关的某些二进制日志记录问题:
在某些情况下,一条语句可能会影响主库和从库上不同的行集。如果修改数据的存储程序是不确定的,则它是不可重复的。这可能导致主库和从库的数据不同,或导致还原的数据与原始数据不同。

在MySQL中创建存储函数时,必须声明它是确定性的或未修改数据。否则,对于数据恢复或复制可能是不安全的。默认情况下,一个CREATE FUNCTION语句被创建,至少明确指定DETERMINISTIC,NO SQL或READS SQL DATA其中一项,否则会发生1418错误。

后续处理:
经过和项目组沟通,项目组确认后续不使用此函数,主库删除此函数并且设置log_bin_trust_function_creators=off,并修复主从。相关mysql开发规范也是不建议或者禁止使用函数。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值