《MySQL系列-InnoDB引擎12》启动关闭与恢复

Posted DATA数据猿

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了《MySQL系列-InnoDB引擎12》启动关闭与恢复相关的知识,希望对你有一定的参考价值。

启动、关闭与恢复

  InnoDB是mysql数据库得存储引擎之一,因此InnoDB存储引擎得启动和关闭,可以说是MySQL实例得启动过程中对InnoDB存储引擎的处理过程。

  在关闭时,参数innodb_fast_shutdown影响着表的存储引擎为InnoDB的行为。该参数可取值为0、1、2,默认值为1。

mysql> show variables like 'innodb_fast_shutdown';
+----------------------+-------+
| Variable_name        | Value |
+----------------------+-------+
| innodb_fast_shutdown | 1     |
+----------------------+-------+
1 row in set (0.06 sec)
  • 0 表示在MySQL数据库关闭时,InnoDB需要完成所有的full purge和merge insert buffer,并且将所有的脏页刷新回磁盘。这需要一些时间,有时甚至需要几个小时完成。
  • 1是参数innodb_fast_shutdown的默认值,表示不需要完成上诉的full purge和merge insert buffer操作,但是在缓冲池中一些数据脏页还是会刷新回到磁盘。
  • 2表示不完成full purge和merge insert buffer操作,也不将缓冲池中的数据脏页写回磁盘,而是将日志写入日志文件。这样不会有任何事务的丢失,但是下次MySQL数据库启动时,回进行恢复操作(recovery)。

  当正常关闭MySQL数据库时,下次的启动应该会正常。但是如果没有正常的关闭数据库,比如:用kill命令关闭数据库,MySQL运行中重启服务器,又或者是innodb_fast_shutdown=2。那么下次MySQL数据库启动时会对InnoDB存储引擎的表进行恢复操作。

  参数innodb_force_recovery影响了整个InnoDB存储引擎恢复的状况。该参数默认值为0。代表的是当需要恢复时,进行所有的恢复操作,当不能进行有效恢复时,如数据页发生了corruption,MySQL数据库可能发生宕机(crash),并把错误写入错误日志中。

mysql> show variables like 'innodb_force_recovery';
+-----------------------+-------+
| Variable_name         | Value |
+-----------------------+-------+
| innodb_force_recovery | 0     |
+-----------------------+-------+
1 row in set (0.00 sec)

  但是,在某些情况下,可能并不需要进行完整的恢复操作,因为用户自己知道怎么进行恢复。比如在对一个表进行alter table操作时发生了意外,数据库重启时会对InnoDB表进行回滚操作,对于一个大表来说,这可能需要很长时间。这时用户可以自行进行恢复,如可以把表删除,从备份中重新导入数据到表,可能这些操作的速度远远快于回滚操作。

  参数innodb_force_recovery还可以设置6个非零值:1~6。大的数字包含了前面所有小数字表示的影响,具体情况如下:

  • 1(srv_force_ignore_corrupt): 忽略检查到的corrupt页。
  • 2(srv_force_no_background): 阻止Master Thread线程的运行,如Master Thread线程需要进行full purge操作,而这会导致crash。
  • 3(srv_force_no_trx_undo): 阻止Master Thread线程的运行,如Master Thread线程需要进行full purge操作,而这会导致crash。
  • 4(srv_force_no_ibuf_merge): 不进行插入缓冲的合并操作。
  • 5(srv_force_no_undo_log_scan): 不查看撤销日志(undo log),InnoDB存储引擎会将未提交的事务视为已提交。
  • 6(srv_force_no_log_redo): 不进行前滚的操作。

  需要注意的是,在设置了参数innodb_force_recovery大于0后,用户可以对表进行select、create、drop等操作,但insert、update和delete这类DML操作是不允许的。

以上是关于《MySQL系列-InnoDB引擎12》启动关闭与恢复的主要内容,如果未能解决你的问题,请参考以下文章

《MySQL系列-InnoDB引擎14》文件-日志文件-错误日志

《MySQL系列-InnoDB引擎14》文件-日志文件-错误日志

《MySQL系列-InnoDB引擎21》文件-PID文件

《MySQL系列-InnoDB引擎13》文件-参数文件

《MySQL系列-InnoDB引擎13》文件-参数文件

《MySQL系列-InnoDB引擎23》文件-InnoDB存储引擎文件-表空间文件