快乐学习
前程无忧、中华英才非你莫属!

MySQL-innodb_force_recovery引出来的一个低级错误!

今天打开数据库,准备做个实验,当插入数据的时候,报错了!

在添加数据的时候给我报了个错误,以为C盘满了,一打开不对,还有很多空间。到底为什么呢,直接查错误日志就行了。

log并没有直接吐出带error的信息,却是InnoDB底层引擎给我吐出了这些信息~

InnoDB: A new raw disk partition was initialized or

InnoDB: innodb_force_recovery is on: we do not allow

InnoDB: database modifications by the user. Shut down

InnoDB: mysqld and edit my.cnf so that newraw is replaced

InnoDB: with raw, and innodb_force_... is removed.


innodb_force_recovery 从文中找到了这个关键的参数,TA肯定有问题!咱们就去配置文件看看他到底是什么妖魔鬼怪!


在数据库的配置文件中找到它,信息都提示我们呢,先关闭mysql服务去找到按个参数然后删除它!不声明它的话,一般默认就为0,之后这种低级问题就不会出现!

想起来了,之前因为C盘空间大,我把mysql的数据文件ibdata1、转移到其他盘,以及把巨大的mysql的日志删除了!导致mysql死活都起不开!

因自从接触了mysql这么久,心想它是没有超过 200百兆的MySQL,一直没有把它放在眼里,心想这玩意有什么难的没有小编解决不了的,大不了求助资深DBA!

因为日志已经损坏或者没了,也没有全备,以及其他恢复机制,我只能采用非常规手段,首先修改innodb_force_recovery参数,使mysqld跳过恢复步骤,将mysqld 启动,将数据导出来然后重建数据库。



innodb_force_recovery可以设置为1-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):不执行前滚的操作。
注意 
  a 当设置参数值大于0后,可以对表进行select,create,drop操作,但insert,update或者delete这类操作是不允许的。

  b 当innodb_purge_threads 和 innodb_force_recovery一起设置会出现一种loop现象:   




建议这种非常规的做法,到最后奥如果没有办法了,且哪些坏掉的数据页,日志,和数据库done掉丢失的数据不重要,那就可以使用此参数跳过那些异常!这个参数也要遵循日志异常的级别从小开始,不要上来就直接设置6,要根据相应报错级别,来设置参数值!


打赏
赞(0) 打赏
未经允许不得转载:同乐学堂 » MySQL-innodb_force_recovery引出来的一个低级错误!

特别的技术,给特别的你!

联系QQ:1071235258QQ群:710045715

觉得文章有用就打赏一下文章作者

非常感谢你的打赏,我们将继续给力更多优质内容,让我们一起创建更加美好的网络世界!

支付宝扫一扫打赏

微信扫一扫打赏

error: Sorry,暂时内容不可复制!