mysql中update的执行逻辑(mysql每日一讲)

                                       一条更新语句的执行


执行   update  test A set a=1 where b=2
1、这条语句通过连接器,分析器,优化器到执行器,当b为主键时,从索引数直接定位到b=2的所有记录,放入结果集
2、将1赋值给a
3、新行数据更新到内存,并写入redo_log日志(黑板),状态为prepare
4、 写入binlog(账本),提交事物,将状态改为commit

redo log 和binlog的比较
1、redo log是innodb引擎特有的,binlog是mysql中server层实现的,所有引擎都可以使用binlog
2、redo log是物理日志,记录着某个数据页的操作
binlog是逻辑日志,记录这个语句的原始逻辑,给那个字段的值变化为什么
3、redo log是循环写入的,会覆盖。binlog是累加操作

错误删除数据后如何恢复数据?
1、找到最近的一次全量备份数据,将数据恢复到库中(这个数据可能是一周前的)
2、找到binlog,由于记录着操作逻辑,找到备份的时间点后的所有语句,挨个执行直到删除的那一刻。

innodb_flush_log_at_trx_commit=1 表示每次事务的redo log都持久化到binlog
sync_binlog=1  表示每次事物的binlog都持久化到磁盘
建议这两个都设置成1,保证mysql异常重启后数据不丢失。

 

binlog默认是关闭状态,通过show variables like 'log_%';   可以查看

详见   https://www.cnblogs.com/shamo89/p/8676480.html

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值