【mysql】InnoDB存储引擎的关闭

InnoDB存储引擎的关闭

1.innodb_fast_shutdown

  1. 如果设置为0,是最保险的一种数据库关闭方式,它需要做的相关操作包括一个全量的回滚段PURGE操作、CHANGE BUFFER的merge操作、将所有日志刷入日志文件及磁盘、将所有Buffer Pool中的脏页刷入到数据文件及磁盘,这些做完后,才会去关闭数据库,这种方式是最慢的一种,也是最安全的,不过需要的时间可能比较长,一般用于正常维护数据库
  2. 设置为1,默认设置的方式。这种方式相比上面设置为0的时候,不会去做CHANGE BUFFER 的merge操作,也不会去做一个全量的PURGE操作,其他操作和上面是一样的,这种方式相对上一种而言,安全方面的操作都做了,只是为了在一定程度上加快一点速度
  3. 设置为2,只会将已经产生的日志刷入到磁盘,其他所有操作都不会做。这样的话,产生的实际后果就相当于一次数据库异常退出,即所谓的Crash。也许唯一比Crash好的就是,这种方式还有点时间用来尽可能的保证数据的安全,将没有刷入磁盘的日志数据刷到磁盘中。如果是为了快速转移数据,那么设置成这种方式是有必要的,数据恢复可以放到新的机器上去做。

2.存储引擎的关闭,包括五个部分

  • 第一步,将所有Buffer Pool中的脏页刷入到磁盘,将最新的日志LSN写入到日志文件及ibdata的相应位置中,记录最新的日志情况,这一步是真正的InnoDB存储引擎的关闭,也是最费时间的一部分,当然也还是决定于fast_shutdown参数。做完这步,数据库的数据就在逻辑上及物理上保证了完整性。
  • 第二步,通知并等待所有正在工作或是处于等待状态的线程退出,包括最著名的Master线程、PURGE线程等,当然还有所有的异步IO线程。在线程退出之后,接下来就是关闭所有的子模块、子系统,包括Change Buffer、日志系统、锁管理系统、事务系统及数据字典系统等
  • 第三步,释放一些子模块,将InnoDB所占用的一些资源释放掉,比如操作系统的IO队列、文件系统等
  • 第四步,释放操作系统层面的用于多线程同步的临界区及事件等对象
  • 第五步,将所有使用的内存都释放掉。

完成上面这些操作,InnoDB就属于正常关闭了。

你可能感兴趣的:(mysql)