63.innodb_force_recovery 参数
innodb_force_recovery参数影响了整个innodb_存储引恢复的状况,该参数默认值是0,代表当发生需要恢复时,进行所有的恢复操作,当不能进行有效恢复时,如果数据页发生corruption,mysql数据库可能发生宕机,并把错误写入到错误日志中。
mysql> select @@innodb_force_recovery; +-------------------------+ | @@innodb_force_recovery | +-------------------------+ | 0 | +-------------------------+
但是,在某些情况下不需要进行完整的恢复操作,因为用户自己知道怎么进行恢复,比如在对一个大表进行alter table操作时发生了意外,数据库重启时会对innodb表进行回滚操作,对于一个大表来说这需要很长的时间,可能是几个小时。这时用户可以自行进行恢复,如把表删除,从备份中重新导入数据列表,可能这些操作的速度要远远快于回滚操作
innodb_force_recorey还提供了6个非0的值供选择:1~6。大的数字表示包含了前面的所有小数字表示的影响。
- 1(srv_force_ignore_corrupt):忽略查到的corrupt页
- 2(srv_force_no_backgound):阻止maste thread 线程运行,如Master thread 线程需要进行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):不进行前滚操作
需要注意的是:在设置了参数innodb_force_recovery大于0后,用户可以对表进行select,create和drop操作,但是insert、update、delete这类DML操作是不允许的。
该参数最多可以设置到3这个级别,如果设置的越靠后,那么会对数据库造成不可恢复的破坏,切记切记!!!
浙公网安备 33010602011771号