当前位置: 首页 > news >正文

关于mysql数据文件损坏导致的mysql无法启动的问题

环境

rocky linux 9 (跟centos几乎一模一样)

myqsl 8.0, 存储引擎使用innodb

问题描述

1. 服务器异常关机,重启启动后发现mysql无法连接,使用命令查看mysql状态:

systemctl status mysqld

发现mysql服务没启动,尝试启动mysql服务

systemctl start mysqld

上述命令执行后卡住不动,服务也没法正常启动

2. ctrl + c 强行取消命令执行,然后去查看一下mysql的启动日志,对于我目前的环境,mysql的启动日志位于:/var/log/mysql/  

vi /var/log/mysql/mysqld.log  =====部分输出
InnoDB: End of page dump
InnoDB: Page may be an update undo log page
2021-02-10T14:22:14.800611Z 0 [ERROR] [MY-011906] [InnoDB] Database page corruption on disk or a failed file read of page [page id: space=4294967279, page number=611]. You may have to recover from a backup.

根据日志,很明显是数据库文件损坏(断电导致)

3. 调整配置,尝试使用恢复模式强行启动mysql

vi /etc/my.cnf.d/mysql-server.cnf## 在[mysqld]标签下方添加一行配置
innodb_force_recovery=1## 完整文件如下
[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
log-error=/var/log/mysql/mysqld.log
pid-file=/run/mysqld/mysqld.pid
innodb_force_recovery=1

再次尝试启动mysql,执行 systemctl start mysqld.。执行此命令后,可能还会卡住,此时要有点耐心,多等一会(至多五分钟)。如果执行命令过程中提示超时,也建议继续等待(此时mysql已经在后台尝试启动了)。提示超时后,可以使用systemctl status mysqld命令不停的查看启动状态。超过5分钟还没有启动成功,就不建议再等待了。

如果启动不了,将上述配置文件中的innodb_force_recovery的值修改为2再重试上述步骤,还不行的话就改为3、4、5、6,每次+1,直到启动成功。需要注意的是,此值大于等于4的时候,强制启动数据库有丢失部分数据的风险。

4. 数据库启动成功后,处于一个只读模式,此时只能读不能写。下一步的操作思路可以总结为:

        1. 登录数据库,使用命令执行表检查,查出损坏的表

        2. 导出损坏的表

        3. 删除损坏的表

        4. 重建损坏的表

上述步骤操作起来有点复杂,我这边用的是一种简单粗暴的方式,就是备份所有的表,另起一台数据库整个重建。

## 导出全部的表
mysqldump -uroot -p123456 --all-databases  > all_data_backup.sql## 在新的数据库上边导入全部的表
mysql -uroot -p123456 -e "source all_data_backup.sql"

http://www.lryc.cn/news/157311.html

相关文章:

  • 深度学习之视频分类项目小记
  • pandas(四十三)Pandas实现复杂Excel的转置合并
  • 42、springboot 的 路径匹配 和 内容协商
  • 一文讲解Linux内核内存管理架构
  • 教你如何使用API接口获取数据
  • 集美大学计算机改考408!福建省全面改考,仅剩一个自命题院校
  • Hololens2部署很慢可能是unity工程选择不对
  • 群论学习记录
  • Fiddler安装与使用教程(2) —— 软测大玩家
  • ChatGPT集锦
  • CRM系统中的工作流管理及其重要性
  • Go framework-go-zero
  • 【Python】【Fintech】用Python和蒙特卡洛法预测投资组合未来收益
  • 网络层重点协议-IP协议(结构分析)
  • windows使用vim编辑文本powershell
  • 学单片机有前途吗?
  • 【计算机网络】 子网划分
  • vscode ros配置
  • 【权限提升-Windows提权】-UAC提权之MSF模块和UACME项目-DLL劫持-不带引号服务路径-不安全的服务权限
  • 【C++】—— 特殊类设计
  • MFC删除Button控件具体操作
  • vue、js实现页面全屏
  • 从零开始探索C语言(四)----循环
  • JS 替换 JSON 数组中的指定字段名
  • WebSocket消息推送
  • 二维码智慧门牌管理系统:让城市管理更智能、便捷
  • React动态添加标签组件
  • [Linux]套接字通信
  • MySQL的故事——MySQL架构与历史
  • 手写Mybatis:第12章-完善ORM框架,增删改查操作