innodb_fast_shutdown
MySQL在平时工作时,会将大量的数据都保存在内存当中。那么在关闭的时候,什么东西需要持久化?什么东西不需要持久化呢?
在MySQL中,innodb_fast_shutdown
参数控制着关闭行为。它的可取值有0、1、2。
顾名思义,fast_shutdown,0表示不需要快速关闭、1需要快速关闭。
- 0:在关闭时需要将内存与磁盘中数据不一致的数据页都进行刷盘行为。主要包含有:
- 删除无用的undo页。
- 将log buffer中的日志都flush到log files。
- merge change buffer。
- flush dirty page
- 1:在关闭时,只进行刷新脏页行为。不需要purge all、merge change buffer。
- 2:在关闭时,只进行flush log buffer。不需要purge all、merge change buffer、flush dirty。
注意
- 在进行大版本升级时,需要将该参数设置为0
- 该参数默认值为1
- 该参数设置为2时,下次重启将会做
crash recovery
行为
innodb_force_recovery
有的时候由于MySQL在关闭前存在一些重操作行为,导致MySQL启动需要消耗大量的时间,但是我们需要能够尽可能快速的启动MySQL服务。
MySQL提供了参数innodb_force_recovery
来规定MySQL启动过程中需要做的行为动作。
该参数可选值为0~6,当该参数设置值大于0时,可以对表执行select、create、drop操作,但insert、update或者delete这类操作是不允许的。
- 0:表示恢复时执行所有的恢复操作。
- 1:(SRV_FORCE_IGNORE_CORRUPT)忽略检查到的corrupt页
- 2:(SRV_FORCE_NO_BACKGROUND)阻止主线程的运行,如主线程需要执行full purge操作,会导致crash
- 3:(SRV_FORCE_NO_TRX_UNDO)不执行事务回滚操作
- 4:(SRV_FORCE_NO_IBUF_MERGE)不执行插入缓冲的合并操作
- 5:(SRV_FORCE_NO_UNDO_LOG_SCAN)不查看撤销日志(Undo Log),InnoDB存储引擎会将未提交的事务视为已提交
- 6:(SRV_FORCE_NO_LOG_REDO)不执行前滚的操作