4.Binary log format

介绍

Binary logs可以按照以下三种方式进行输出:

  1. STATEMENT:记录实际的SQL语句。
  2. ROW:将记录对每行所做的更改。例如,更新语句更新10行,更新所有10行的信息都写入日志,而在STATEMENT下只有update写入。
  3. MIXED:自动判断采用上述哪种方式。

有些语句在不同的服务器上执行时会导致不同的结果。例如,UUID()函数的输出因服务器而异。这些语句称为非确定性语句,对于基于语句的复制不安全。在这些情况下,当您设置MIXED格式时,MySQL服务器会切换到基于行的格式。

设置与调试

1 设置

可以通过binlog_format设置全局或者会话的binlog输出格式。

mysql> SET GLOBAL binlog_format = 'STATEMENT';
或
SET GLOBAL binlog_format = 'ROW';
或
SET GLOBAL binlog_format = 'MIXED';

2 调整兼容性

MYSQL 8.0的日志格式为version 2,与MYSQL 5.6.6之前的格式不兼容,假如需要兼容可以通过以下命令解决

mysql> SET @@GLOBAL.log_bin_use_v1_row_events=0;

3 安全性

创建存储函数时,必须声明它是确定性的或不修改数据。否则,Binary logs日志记录可能不安全。默认情况下,要接受CREATE FUNCTION语句,必须至少明确指定DETERMINISTIC,NO SQL或READS SQL DATA中的一个。否则会发生错误

  • DETERMINISTIC:指出一个子程序是否对给定的输入总是产生同样的结果。
  • NO SQL:没有SQl语句,当然也不会修改数据
  • READS SQL DATA:只是读取数据,当然也不会修改数据

ERROR 1418 (HY000): This function has none of DETERMINISTIC

有两种解决方式:

  1. 强制设置NON-DETERMINISTIC的函数为DETERMINISTIC

  2. 修改如下参数:

    mysql> SET GLOBAL log_bin_trust_function_creators = 1;

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值