mysql binlog三种模式的区别

create table person(
	id bigint primary key comment '主键',
	name varchar(255) not null '姓名',
)
此时数据库里有三条数据
+--------+-----------+
| id     | name      |
+--------+-----------+
| 134068 | 略略略    |
| 812022 | 嘤嘤嘤    |
| 819439 | 哈哈哈    |
+--------+-----------+
在我们执行update person set name = 'low-low'语句,在三种模式下binlog记录的所呈现的是不一样的
可以用 mysqlbinlog -v /var/lib/mysql/日志名 进行查看
row:
	### UPDATE `tmp`.`person`
	### WHERE
	###   @1=134068
	###   @2='略略略'
	### SET
	###   @1=134068
	###   @2='low-low'
	### UPDATE `tmp`.`person`
	### WHERE
	###   @1=812022
	###   @2='嘤嘤嘤'
	### SET
	###   @1=812022
	###   @2='low-low'
	### UPDATE `tmp`.`person`
	### WHERE
	###   @1=819439
	###   @2='哈哈哈'
	### SET
	###   @1=819439
	###   @2='low-low'

statement:
	update person set name = 'he-he'
mixed
	会结合着两种情况,根据情况的不同结合着两种模式

区别:
	statement只会记录着一条sql语句
	row会记录着所有更改过的行记录的sql
	mixed若是简单sql,则会使用statement,若是复杂sql(涉及到多个函数)则会使用row

各自的优缺点:
	statement:
		优点:
			1 不需要记录每一行的变化,减少了binlog日志量,文件较小
		缺点:
			1 不是所有的UPDATE语句都能被复制,尤其是包含不确定操作的时候
			使用以下函数的语句无法被复制:LOAD_FILE()UUID()USER()FOUND_ROWS()SYSDATE()
			2 使用insert和update可能会产生更多的行级锁
			3 对于有 AUTO_INCREMENT 字段的 InnoDB表而言,INSERT 语句会阻塞其他 INSERT 语句
			4 执行复杂sql事务,会比row消耗更多资源
	row:
		优点:
			1 任何情况都可以被复制,这对复制来说是最 安全可靠 的。(比如:不会出现某些特定情况下
			的存储过程、function、trigger的调用和触发无法被正确复制的问题)
			2 相比statement,可能会产生更少的行锁
		缺点:
			1 相比statement,binlog 大了很多
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值