这篇文章主要讲解了“Innodb关键特性之怎么实现启动、关闭和恢复”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Innodb关键特性之怎么实现启动、关闭和恢复”吧!

参数innodb_fast_shutdown影响着表的存储引擎为Innodb的行为,该参数可以取值为0、1、2,默认值为1,支持全动态局设置。

设置为1:关闭MySQL的时候不会做清除脏页和插入缓冲区的合并操作,也不会将脏页刷新到磁盘。

设置为0:会做清除脏页和插入缓冲区的合并操作,也会将脏页全部刷新到磁盘上面去,但是这个时候关闭的速度也是最慢的。

设置为2:不会做清除脏页和插入缓冲区的合并操作,也不会将脏页刷新到磁盘,但是会刷新到redo log里面,再下次启动

mysql时候恢复。

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

但在某些情况下,可能不需要执行完整的恢复操作。例如在进行alter table操作时,这时发生意外,数据库重启时会对Innodb表执行回滚操作。对于一个大表,这需要很长时间,甚至可能是几个小时。这时可以自行恢复,例如将表删除,从备份中重新将数据导入表中,这些操作可能要快于回滚操作。

innodb_force_recovery可以设置6个非零值:

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):不查看重做日志,InnoDB存储引擎会将未提交的事务视为已提交。

6(SRV_FORCE_NO_LOG_REDO):不执行前滚的操作。

备注:当设置innodb_force_recovery大于0后,可以对表进行select、create、drop操作,但insert、update或者delete这类操作是不允许的。

下面做一个实验,来模拟故障的发生。

查看相关参数:

mysql>showvariableslike'innodb_force%';+-----------------------------+-------+|Variable_name|Value|+-----------------------------+-------+|innodb_force_load_corrupted|OFF||innodb_force_recovery|0|+-----------------------------+-------+2rowsinset(0.01sec)mysql>showvariableslike'innodb_fast%';+----------------------+-------+|Variable_name|Value|+----------------------+-------+|innodb_fast_shutdown|1|+----------------------+-------+1rowinset(0.01sec)

手动开启事务,防止auto commit,并更新1000000条记录,不提交。

mysql>starttransaction;QueryOK,0rowsaffected(0.00sec)mysql>updaterank_itemsetcity=5000limit1000000;QueryOK,1000000rowsaffected(4min34.50sec)Rowsmatched:1000000Changed:1000000Warnings:0

然后kill掉mysql进程,启动mysql,查看错误日志输出。

2020-08-05T07:07:20.271772Z0[Note]InnoDB:Startinginbackgroundtherollbackofuncommittedtransactions2020-08-05T07:07:20.271806Z0[Note]InnoDB:Removedtemporarytablespacedatafile:"ibtmp1"2020-08-05T07:07:20.271826Z0[Note]InnoDB:Rollingbacktrxwithid393530,901725rowstoundo2020-08-05T07:07:20.271841Z0[Note]InnoDB:CreatingsharedtablespacefortemporarytablesInnoDB:Progressinpercents:12020-08-05T07:07:20.272012Z0[Note]InnoDB:Settingfile'./ibtmp1'sizeto12MB.Physicallywritingthefilefull;Pleasewait...2020-08-05T07:07:20.344665Z0[Note]InnoDB:File'./ibtmp1'sizeisnow12MB.2020-08-05T07:07:20.346201Z0[Note]InnoDB:96redorollbacksegment(s)found.96redorollbacksegment(s)areactive.2020-08-05T07:07:20.346228Z0[Note]InnoDB:32non-redorollbacksegment(s)areactive.2020-08-05T07:07:20.346492Z0[Note]InnoDB:Waitingforpurgetostart2020-08-05T07:07:20.396629Z0[Note]InnoDB:5.7.26started;logsequencenumber2487709568662020-08-05T07:07:20.396654Z0[Note]InnoDB:page_cleaner:1000msintendedlooptook30517ms.Thesettingsmightnotbeoptimal.(flushed=0andevicted=0,duringthetime.)2020-08-05T07:07:20.397332Z0[Note]InnoDB:Loadingbufferpool(s)from/data/mysql/data/ib_buffer_pool2020-08-05T07:07:20.398205Z0[Note]Plugin'FEDERATED'isdisabled.2020-08-05T07:07:20.405796Z0[Warning]FailedtosetupSSLbecauseofthefollowingSSLlibraryerror:SSLcontextisnotusablewithoutcertificateandprivatekey2020-08-05T07:07:20.405835Z0[Note]Serverhostname(bind-address):'*';port:160082020-08-05T07:07:20.405919Z0[Note]IPv6isavailable.2020-08-05T07:07:20.405943Z0[Note]-'::'resolvesto'::';2020-08-05T07:07:20.406018Z0[Note]ServersocketcreatedonIP:'::'.2020-08-05T07:07:20.471375Z0[Note]EventScheduler:Loaded0events2020-08-05T07:07:20.471641Z0[Note]/usr/local/mysql/bin/mysqld:readyforconnections.Version:'5.7.26'socket:'/tmp/mysqld.sock'port:16008Sourcedistribution2020-08-05T07:07:31.464532Z0[Note]InnoDB:page_cleaner:1000msintendedlooptook10068ms.Thesettingsmightnotbeoptimal.(flushed=5784andevicted=0,duringthetime.)23456782020-08-05T07:08:13.440447Z0[Note]InnoDB:Bufferpool(s)loadcompletedat20080515:08:1391011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991002020-08-05T07:12:12.083704Z0[Note]InnoDB:Rollbackoftrxwithid393530completed2020-08-05T07:12:12.083776Z0[Note]InnoDB:Rollbackofnon-preparedtransactionscompleted

可以看到rollback过程用了很久。

感谢各位的阅读,以上就是“Innodb关键特性之怎么实现启动、关闭和恢复”的内容了,经过本文的学习后,相信大家对Innodb关键特性之怎么实现启动、关闭和恢复这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是亿速云,小编将为大家推送更多相关知识点的文章,欢迎关注!