)
项目简介
本项目采用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一起正常。