ocx请确保该二进制存储在指定的路径中_23.7 存储过程的二进制日志

本文详细介绍了MySQL存储过程、函数、触发器和事件在二进制日志记录中的注意事项,包括复制安全性、确定性要求及潜在风险。讨论了基于语句和基于行的二进制日志格式对存储程序的影响,强调了DETERMINISTIC关键字的重要性,以及如何通过设置log_bin_trust_function_creators变量来放宽创建函数的限制。
摘要由CSDN通过智能技术生成

c8a298b63de547175fb3effe8449d8eb.png

参考官方文档:

https://dev.mysql.com/doc/refman/5.7/en/stored-programs-logging.html

二进制日志包含有关修改数据库内容的SQL语句的信息。 该信息以描述修改的“事件”的形式存储。 二进制日志有两个重要目的:

  • 对于复制,二进制日志在主复制服务器上用作要发送到从属服务器的语句的记录。 主服务器将其二进制日志中包含的事件发送到其从属服务器,这些服务器执行这些事件以对主服务器进行相同的数据更改。
  • 某些数据恢复操作需要使用二进制日志。 还原备份文件后,将重新执行备份后记录的二进制日志中的事件。 这些事件使数据库从备份更新到时间点。

但是,如果在语句级别进行日志记录,则存储的程序(存储过程和函数,触发器和事件)存在某些二进制日志记录问题:

  • 在某些情况下,语句可能会影响主服务器和从服务器上的不同行集。
  • 在从属服务器上执行的复制语句由从属SQL线程处理(具有最高权限)。 程序可以在主服务器和从服务器上遵循不同的执行路径,因此用户可以编写包含危险语句的例程,该例程将仅在从服务器上执行,并由具有完全权限的线程处理。
  • 如果修改数据的存储程序是不确定的,则它不可重复。 这可能导致主站和从站上的数据不同,或导致还原的数据与原始数据不同。

通常,当SQL语句级别(基于语句的二进制日志记录)发生二进制日志记录时,会导致此处描述的问题。 如果使用基于行的二进制日志记录,则日志包含由于执行SQL语句而对各个行所做的更改。 执行例程或触发器时,将记录行更改,而不是进行更改的语句。 对于存储过程,这意味着不记录CALL语句。 对于存储的函数,将记录函数内的行更改,而不是函数调用。 对于触发器,将记录触发器所做的行更改。 在slave端,只能看到行更改,而不是存储的程序调用。

混合格式二进制日志记录(binlog_format = MIXED)使用基于语句的二进制日志记录,除了一些基于行的二进制日志记录才能够产生正确结果的情况除外。 对于混合格式,当存储的函数,存储过程,触发器,事件或预准备语句包含对基于语句的二进制日志记录不安全的任何内容时,整个语句将标记为不安全并以行格式记录。 用于创建和删除过程,函数,触发器和事件的语句始终是安全的,并以语句格式记录。

在MySQL中使用存储函数的

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值