《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》文件-日志文件-错误日志