当前位置: 首页 > news >正文

做公司网站需要有座机吗q网站建设

做公司网站需要有座机吗,q网站建设,北京朝阳区二手房出售,个体户做网站有用吗MySQL日志 主要包括错误日志、查询日志、慢查询日志、事务日志、二进制日志几大类。其中#xff0c;比较重要的还要属二进制日志binlog#xff08;归档日志#xff09;和事务日志redo log#xff08;重做日志#xff09;和undo log#xff08;回滚日志#xff09;。 今…MySQL日志 主要包括错误日志、查询日志、慢查询日志、事务日志、二进制日志几大类。其中比较重要的还要属二进制日志binlog归档日志和事务日志redo log重做日志和undo log回滚日志。 今天就来聊聊 redo log重做日志、binlog归档日志、两阶段提交、undo log 回滚日志。 redo log redo log重做日志是InnoDB存储引擎独有的它让MySQL拥有了崩溃恢复能力。 比如 MySQL 实例挂了或宕机了重启时InnoDB存储引擎会使用redo log恢复数据保证数据的持久性与完整性。 MySQL 中数据是以页为单位你查询一条记录会从硬盘把一页的数据加载出来加载出来的数据叫数据页会放入到 Buffer Pool 中。 后续的查询都是先从 Buffer Pool 中找没有命中再去硬盘加载减少硬盘 IO 开销提升性能。 更新表数据的时候也是如此发现 Buffer Pool 里存在要更新的数据就直接在 Buffer Pool 里更新。 然后会把“在某个数据页上做了什么修改”记录到重做日志缓存redo log buffer里接着刷盘到 redo log 文件里。 理想情况事务一提交就会进行刷盘操作但实际上刷盘的时机是根据策略来进行的。 小贴士每条 redo 记录由“表空间号数据页号偏移量修改数据长度具体修改的数据”组成 刷盘时机 InnoDB 存储引擎为 redo log 的刷盘策略提供了 innodb_flush_log_at_trx_commit 参数它支持三种策略 0 设置为 0 的时候表示每次事务提交时不进行刷盘操作 1 设置为 1 的时候表示每次事务提交时都将进行刷盘操作默认值 2 设置为 2 的时候表示每次事务提交时都只把 redo log buffer 内容写入 page cache innodb_flush_log_at_trx_commit 参数默认为 1 也就是说当事务提交时会调用 fsync 对 redo log 进行刷盘 另外InnoDB 存储引擎有一个后台线程每隔1 秒就会把 redo log buffer 中的内容写到文件系统缓存page cache然后调用 fsync 刷盘。 也就是说一个没有提交事务的 redo log 记录也可能会刷盘。 为什么呢 因为在事务执行过程 redo log 记录是会写入redo log buffer 中这些 redo log 记录会被后台线程刷盘。 除了后台线程每秒1次的轮询操作还有一种情况当 redo log buffer 占用的空间即将达到 innodb_log_buffer_size 一半的时候后台线程会主动刷盘。 下面是不同刷盘策略的流程图。 innodb_flush_log_at_trx_commit0 为0时如果MySQL挂了或宕机可能会有1秒数据的丢失。 innodb_flush_log_at_trx_commit1 为1时 只要事务提交成功redo log记录就一定在硬盘里不会有任何数据丢失。 如果事务执行期间MySQL挂了或宕机这部分日志丢了但是事务并没有提交所以日志丢了也不会有损失。 innodb_flush_log_at_trx_commit2 为2时 只要事务提交成功redo log buffer中的内容只写入文件系统缓存page cache。 如果仅仅只是MySQL挂了不会有任何数据丢失但是宕机可能会有1秒数据的丢失。 日志文件组 硬盘上存储的 redo log 日志文件不只一个而是以一个日志文件组的形式出现的每个的redo日志文件大小都是一样的。 比如可以配置为一组4个文件每个文件的大小是 1GB整个 redo log 日志文件组可以记录4G的内容。 它采用的是环形数组形式从头开始写写到末尾又回到头循环写如下图所示。 在个日志文件组中还有两个重要的属性分别是 write pos、checkpoint write pos 是当前记录的位置一边写一边后移 checkpoint 是当前要擦除的位置也是往后推移 每次刷盘 redo log 记录到日志文件组中write pos 位置就会后移更新。 每次 MySQL 加载日志文件组恢复数据时会清空加载过的 redo log 记录并把 checkpoint 后移更新。 write pos 和 checkpoint 之间的还空着的部分可以用来写入新的 redo log 记录。 如果 write pos 追上 checkpoint 表示日志文件组满了这时候不能再写入新的 redo log 记录MySQL 得停下来清空一些记录把 checkpoint 推进一下。 redo log 小结 相信大家都知道 redo log 的作用和它的刷盘时机、存储形式。 现在我们来思考一个问题只要每次把修改后的数据页直接刷盘不就好了还有 redo log 什么事 它们不都是刷盘么差别在哪里 1 Byte 8bit 1 KB 1024 Byte 1 MB 1024 KB 1 GB 1024 MB 1 TB 1024 GB 实际上数据页大小是16KB刷盘比较耗时可能就修改了数据页里的几 Byte 数据有必要把完整的数据页刷盘吗 而且数据页刷盘是随机写因为一个数据页对应的位置可能在硬盘文件的随机位置所以性能是很差。 如果是写 redo log一行记录可能就占几十 Byte只包含表空间号、数据页号、磁盘文件偏移 量、更新值再加上是顺序写所以刷盘速度很快。 所以用 redo log 形式记录修改内容性能会远远超过刷数据页的方式这也让数据库的并发能力更强。 其实内存的数据页在一定时机也会刷盘我们把这称为页合并讲 Buffer Pool的时候会对这块细说 binlog redo log 它是物理日志记录内容是“在某个数据页上做了什么修改”属于 InnoDB 存储引擎。 而 binlog 是逻辑日志记录内容是语句的原始逻辑类似于“给 ID2 这一行的 c 字段加 1”属于MySQL Server 层。 不管用什么存储引擎只要发生了表数据更新都会产生 binlog 日志。 那 binlog 到底是用来干嘛的 可以说MySQL数据库的数据备份、主备、主主、主从都离不开binlog需要依靠binlog来同步数据保证数据一致性。 binlog会记录所有涉及更新数据的逻辑操作并且是顺序写。 记录格式 binlog 日志有三种格式可以通过binlog_format参数指定。 statement row mixed 指定statement记录的内容是SQL语句原文比如执行一条update T set update_timenow() where id1记录的内容如下。 同步数据时会执行记录的SQL语句但是有个问题update_timenow()这里会获取当前系统时间直接执行会导致与原库的数据不一致。 为了解决这种问题我们需要指定为row记录的内容不再是简单的SQL语句了还包含操作的具体数据记录内容如下。 row格式记录的内容看不到详细信息要通过mysqlbinlog工具解析出来。 update_timenow()变成了具体的时间update_time1627112756247条件后面的1、2、3 都是该行数据第 1 个~3 个字段的原始值假设这张表只有 3 个字段。 这样就能保证同步数据的一致性通常情况下都是指定为row这样可以为数据库的恢复与同步带来更好的可靠性。 但是这种格式需要更大的容量来记录比较占用空间恢复与同步时会更消耗IO资源影响执行速度。 所以就有了一种折中的方案指定为mixed记录的内容是前两者的混合。 MySQL会判断这条SQL语句是否可能引起数据不一致如果是就用row格式否则就用statement格式。 写入机制 binlog的写入时机也非常简单事务执行过程中先把日志写到binlog cache事务提交的时候再把binlog cache写到binlog文件中。 因为一个事务的binlog不能被拆开无论这个事务多大也要确保一次性写入所以系统会给每个线程分配一个块内存作为binlog cache。 我们可以通过binlog_cache_size参数控制单个线程 binlog cache 大小如果存储内容超过了这个参数就要暂存到磁盘Swap。 binlog日志刷盘流程如下 上图的 write是指把日志写入到文件系统的 page cache并没有把数据持久化到磁盘所以速度比较快 上图的 fsync才是将数据持久化到磁盘的操作 write和fsync的时机可以由参数sync_binlog控制默认是0。 为0的时候表示每次提交事务都只write由系统自行判断什么时候执行fsync。 虽然性能得到提升但是机器宕机page cache里面的 binglog 会丢失。 为了安全起见可以设置为1表示每次提交事务都会执行fsync就如同binlog 日志刷盘流程一样。 最后还有一种折中方式可以设置为N(N1)表示每次提交事务都write但累积N个事务后才fsync。 在出现IO瓶颈的场景里将sync_binlog设置成一个比较大的值可以提升性能。 同样的如果机器宕机会丢失最近N个事务的binlog日志。 两阶段提交 redo log重做日志让InnoDB存储引擎拥有了崩溃恢复能力。 binlog归档日志保证了MySQL集群架构的数据一致性。 虽然它们都属于持久化的保证但是则重点不同。 在执行更新语句过程会记录redo log与binlog两块日志以基本的事务为单位redo log在事务执行过程中可以不断写入而binlog只有在提交事务时才写入所以redo log与binlog的写入时机不一样。 回到正题redo log与binlog两份日志之间的逻辑不一致会出现什么问题 我们以update语句为例假设id2的记录字段c值是0把字段c值更新成1SQL语句为update T set c1 where id2。 假设执行过程中写完redo log日志后binlog日志写期间发生了异常会出现什么情况呢 由于binlog没写完就异常这时候binlog里面没有对应的修改记录。因此之后用binlog日志恢复数据时就会少这一次更新恢复出来的这一行c值是0而原库因为redo log日志恢复这一行c值是1最终数据不一致。 为了解决两份日志之间的逻辑一致问题InnoDB存储引擎使用两阶段提交方案。 原理很简单将redo log的写入拆成了两个步骤prepare和commit这就是两阶段提交。 使用两阶段提交后写入binlog时发生异常也不会有影响因为MySQL根据redo log日志恢复数据时发现redo log还处于prepare阶段并且没有对应binlog日志就会回滚该事务。 再看一个场景redo log设置commit阶段发生异常那会不会回滚事务呢 并不会回滚事务它会执行上图框住的逻辑虽然redo log是处于prepare阶段但是能通过事务id找到对应的binlog日志所以MySQL认为是完整的就会提交事务恢复数据。 undo log 数据库事务四大特性中有一个是 原子性 具体来说就是 原子性是指对数据库的一系列操作要么全部成功要么全部失败不可能出现部分成功的情况。 我们知道如果想要保证事务的原子性就需要在异常发生时对已经执行的操作进行回滚在 MySQL 中恢复机制是通过 回滚日志undo log 实现的所有事务进行的修改都会先先记录到这个回滚日志中然后再执行相关的操作。 如果执行过程中遇到异常的话我们直接利用 回滚日志 中的信息将数据回滚到修改之前的样子即可并且回滚日志会先于数据持久化到磁盘上。这样就保证了即使遇到数据库突然宕机等情况当用户再次启动数据库的时候数据库还能够通过查询回滚日志来回滚将之前未完成的事务。 另外MVCC 的实现依赖于隐藏字段、Read View、undo log。在内部实现中InnoDB 通过数据行的 DB_TRX_ID 和 Read View 来判断数据的可见性如不可见则通过数据行的 DB_ROLL_PTR 找到 undo log 中的历史版本。 每个事务读到的数据版本可能是不一样的在同一个事务中用户只能看到该事务创建 Read View 之前已经提交的修改和该事务本身做的修改。 总结 MySQL InnoDB 引擎使用 redo log(重做日志) 保证事务的持久性使用 undo log(回滚日志) 来保证事务的原子性。 MySQL数据库的数据备份、主备、主主、主从都离不开binlog需要依靠binlog来同步数据保证数据一致性。 https://zhuanlan.zhihu.com/p/609972086
http://www.pierceye.com/news/30178/

相关文章:

  • 石家庄专门做网站免费建设一个可以访问的网站
  • Ie8网站后台编辑文章徐州招标投标信息网
  • 建设银行网站明细多长时间骨科医院网站优化服务商
  • 一流的网站建设哪家好网站建设实训的目的
  • 德语网站建设监理公司宣传册设计样本
  • 二级网站建设情况说明书企业购物网站开发
  • 网站建设与功能模块百度号码认证平台首页
  • 建设网站需要给钱吗在线阅读 wordpress主题
  • 一般ppt模板都会发不到什么网站网页版梦幻西游周游方壶
  • 漳州电脑网站建设手机微网站制作系统
  • 网站构建建设制作平台施工企业负责人是指企业的
  • 百度搜索链接入口织梦网站怎样做seo
  • 北京未来科技城开发建设有限公司 网站微信下载安装免费2022
  • 济南网站哪家做的好长春哪家网络公司做网站专业
  • 百度地图添加到网站乐装网
  • html编辑器在哪里设置seo职业发展
  • 网站开发源码杭州建筑设计公司排名
  • 怎么建立一个网站当站长建设网站报告
  • 如何设置网站icon优秀网站的颜色搭配
  • php网站开发基础教程网站建设徐州
  • 甘肃省交通建设集团有限公司网站四川seo推广方案
  • 有专业做网站的吗网站公司本地网页制作软件
  • 番禺企业网站建设网站建设广州
  • 学做衣服网站知乎wordpress子页面密码错误
  • 一级a做爰网站免费书画展示网站模板
  • 现在pc端网站开发用的什么技术中国国防建设网站
  • 做英雄联盟网站的图片素材公司如何登录网站做就业登记
  • 餐饮网站建设公司旅游主题网站怎么做
  • 烟台建站程序镇江个人网站建设
  • 外贸工厂网站做seo多吗seo技能培训课程