首页 科技正文

allbetgmaing电脑版下载:一条update SQL语句是若何执行的

admin 科技 2020-06-25 61 0

一条更新语句的执行历程和查询语句类似,更新的流程涉及两个日志:redo log(重做日志)和binlog(归档日志)。好比我们要将ID(主键)=2这一行的值加(c:字段)1,SQL语句如下:

update T set c=c+1 where ID=2;
  • redo log

  重做日志是InnoDB引擎特有的,是物理日志,纪录在“某个数据页上做了什么修改“。巨细是牢固,可以举行设置巨细。若是我们设置一组4个文件,图中write pos是当前纪录的位置,往后推移而且循环;checkpoint是当前要擦除的位置,移动纪律和前者一样。两者之间的位置可以纪录新的操作

 

  

若是write pos 追上checkpoint,就移动checkpoint擦除一些纪录。以是纵然数据可以发生异常重启,InnoDB也可以保证之前提交的纪录不会丢,这就是MySQL的crash_safe能力。

  • binlog

  归档日志是MySQL的server层的实现的,所有引擎都可以使用。binlog纪录的是sql语句的原始逻辑,好比根剧'id'字段查询所有的信息;相比redo log的循环写入,binlog是追加写的,binlog文件写到一定巨细后会切换到下一个,不会笼罩以前的日志。

Binlog有两种模式,statement 花样的话是记sql语句, row花样会纪录行的内容,记两条,更新前和更新后都有。

上述语句在InnoDB中的执行流程如下:深色代表在执行器中执行的,浅色是在存储引擎中。

最后写入redolog分为了prepare和commit两步,用来保证两个日志写入的一致性,这就是“两阶段提交”。好比我们执行“update T set status = 1“时:

  • 若是写入redolog乐成,但写binlog失败,重启恢复时,数据库发现没有commit,那么事务自己回滚;备份恢复时没有binlog,数据库里的status值稳定。
  • 若是在commit失败,重启恢复时redolog和binlog一致,重新commit;备份恢复时有binlog,直接恢复。

总的来说binlog纪录了对数据库所有的逻辑操作,可以通过binlog来备份出一份完全相同的库;由于redolog是InnoDB引擎特有的,若是使用其他引擎,那么就要依赖binlog来纪录操作。

思索一个问题定期全量备份的周期“取决于系统重要性,有的是一天一备,有的是一周一备”。那么在什么场景下,一天一备会比一周一备更有优势呢?或者说,它影响了这个数据库系统的哪个指标?

一天一备,那么若是需要恢复数据的话,只要保证当天的binlog完整即可;一周一备的话就要保证一周的binlog完整;同时频仍全量备份需要更多存储空间,若何选择取决于营业的重要性,对应的指标是RTO(目的恢复时间)。

 -- 《MySQL实战45讲》条记二

,

欧博手机版

欢迎进入欧博手机版(Allbet Game):www.aLLbetgame.us,欧博官网是欧博集团的官方网站。欧博官网开放Allbet注册、Allbe代理、Allbet电脑客户端、Allbet手机版下载等业务。

版权声明

本文仅代表作者观点,
不代表本站Allbet欧博官网的立场。
本文系作者授权发表,未经许可,不得转载。

评论