2021-08-11 mysql8 损坏恢复数据InnoDB

mysql8 损坏恢复数据InnoDB


)

项目简介

本项目采用springCloud,项目部署在Centos7.6 opt 下

错误分析

1.项目运行半年后,得知/opt文件磁盘已满,需求迁移到/home 下,迁移到home下后mysql一直启动失败报粗如下图:
在这里插入图片描述
这个错误是mysql迁移了目录造成的,原本以为错误提示解决问题,初始化添加lower_case-table_names=1,my文件socke文件路径opt改为home都无法解决,干脆备份mysql下data数据目录,删除mysql重新安装,安装完成mysql正常启动,现在恢复数据删除已经安装的data,把备份的data放到mysql目录下,但是依然mysql启动失败,经过试验不能删除data,正确的操作是用备份的data覆盖新的data文件,启动报权限不足如下图:
在这里插入图片描述
用chmod -R 777 data 后启动mysql正常启动,数据也恢复了,但是生产环境这样操作后,客户在使用系统时,mysql就挂错误如下:
在这里插入图片描述分析得表损坏,再次启动mysql再也无法启动了;

解决思路

通过上图错误日志输入红框网址如下图:
在这里插入图片描述
大意是在配置文件my.ini 添加innodb_force_recovery = 1 这个参数值0-6级,分别代表不同含义:
1 ( SRV_FORCE_IGNORE_CORRUPT)
即使检测到损坏的页面,也让服务器运行 。尝试 跳过损坏的索引记录和页面,这有助于转储表。 SELECT * FROM tbl_name
2 ( SRV_FORCE_NO_BACKGROUND)
阻止主线程和任何清除线程运行。如果在清除操作期间发生意外退出,此恢复值会阻止它。
3 ( SRV_FORCE_NO_TRX_UNDO)
崩溃恢复后 不运行事务 回滚。
4 ( SRV_FORCE_NO_IBUF_MERGE)
防止插入缓冲区合并操作。如果它们会导致崩溃,则不执行它们。不计算表 统计信息。此值可能会永久损坏数据文件。使用此值后,准备删除并重新创建所有二级索引。设置 InnoDB为只读。
5 ( SRV_FORCE_NO_UNDO_LOG_SCAN)
启动数据库时 不查看撤消日志: InnoDB即使是未完成的事务也视为已提交。此值可能会永久损坏数据文件。设置InnoDB为只读。
6 ( SRV_FORCE_NO_LOG_REDO)
不执行与恢复相关的重做日志前 滚。此值可能会永久损坏数据文件。使数据库页面处于过时状态,这反过来可能会给 B 树和其他数据库结构带来更多损坏。
在my.ini 添加innodb_force_recovery = 2 ,一次重1-6试,直到mysql能启动起来,启动完成备份数据,删除数据库,创建数据导入数据,恢复完成。
总结思路:
第一步:因为mysql已经无法启动起来,要想办法把mysql启动起来,启动起来通过官网提示配置文件添加innodb_force_recovery,直到启动;
第二步:mysqldump 导出数据库结构和数据(database_name.sql),删除数据库或者重新安装mysql,创建同样的数据库,导入(database_name.sql)启动mysql一起正常。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值