• 关于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/  

    1. vi /var/log/mysql/mysqld.log
    2. =====部分输出
    3. InnoDB: End of page dump
    4. InnoDB: Page may be an update undo log page
    5. 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

    1. vi /etc/my.cnf.d/mysql-server.cnf
    2. ## 在[mysqld]标签下方添加一行配置
    3. innodb_force_recovery=1
    4. ## 完整文件如下
    5. [mysqld]
    6. datadir=/var/lib/mysql
    7. socket=/var/lib/mysql/mysql.sock
    8. log-error=/var/log/mysql/mysqld.log
    9. pid-file=/run/mysqld/mysqld.pid
    10. 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. 重建损坏的表

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

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

  • 相关阅读:
    2024年湖北副高职称评审条件是什么?需要准备什么材料?
    Docker数据卷的使用
    上周热点回顾(4.22-4.28)
    代码随想录算法训练营第1天|二分查找|移除元素
    【小沐学C++】git和github常见问题汇总
    【工作向/ros】roslaunch节点启动与重启
    带宽优化新思路:RoCE网卡聚合实现X2增长
    lintcode 631 · 最大矩阵II【矩阵 中等 vip】
    构建自己的无人驾驶系统
    Ubuntu 16.4虚拟机 配置Hadoop集群
  • 原文地址:https://blog.csdn.net/LLittleF/article/details/132732812