mysql --force -f_MySQL-innodb_force_recovery引出来的一个低级错误!

本文讲述了在遇到MySQL插入数据时由于innodb_force_recovery参数导致的错误,如何通过查看错误日志、理解该参数影响及调整其值来解决问题。强调了在设置该参数时应注意的操作限制,并提醒根据错误级别选择合适值。
摘要由CSDN通过智能技术生成

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

a92b52cb9dde7da257d25ebc6f0c424a.png

在添加数据的时候给我报了个错误,以为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,之后这种低级问题就不会出现!

319ea6d02fd9b6b55390db3a7b5fd046.png

想起来了,之前因为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,要根据相应报错级别,来设置参数值!

打赏

4500c9e7856fde5fb9f72da8bd70597a.png

2e064ed1ef37769cd5e2a0e3922c84d4.png微信扫一扫,打赏作者吧~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值