Mysql - is marked as crashed and should be repaired

概述

上周发生了一个Mysql报错的问题,今天有时间整理一下产生的原因和来龙去脉,Mysql的版本是5.5,发生错误的表存储引擎都是MyISAM,产生的报错信息是Table 'xxxxxx' is marked as crashed and should be repaired

定位问题

产生的后果是Nginx服务没有响应,找到Mysql的进程,想做的是查找到mysql的错误日志路径,查看错误信息,错误信息里的关键词是定位问题、解决错误的有效手段。

在多说一句Linux服务器中的进程管理,使用 ps aux里面主要留意的信息是PID、进程所属用户和后面启动进程所执行的Bash命令。

ini 复制代码
ps aux | grep mysql

mysql    17743  4.7 33.1 3722028 2604540 ?     Sl   3月01 338:55 
/usr/local/mysql/libexec/mysqld 
--defaults-file=/usr/local/mysql/etc/my.cnf 
--basedir=/usr/local/mysql 
--datadir=/usr/local/mysql/data 
--plugin-dir=/usr/local/mysql/lib/mysql/plugin 
--user=mysql 
--log-error=/usr/local/mysql/var/mysql_error.log 
--open-files-limit=10240 
--pid-file=/usr/local/mysql/var/mysql.pid 
--socket=/tmp/mysql.sock 
--port=3306
  • 配置文件路径: --defaults-file /usr/local/mysql/etc/my.cnf
  • Mysql文件路径: --basedir /usr/local/mysql
  • Mysql数据报错路径: --datadir /usr/local/mysql/data
  • Mysql错误日志 --log-error /usr/local/mysql/var/mysql_error.log

使用 tail -f -n 20 /usr/local/mysql/var/mysql_error.log 观测错误信息,如果想让log的行数展示的多些,可以指定最后行数,例如想展示20行,tail -f -n 20 /usr/local/mysql/var/mysql_error.log,报错消息如下图:

成因

网上查了一下,错误的产生原因,有网友说是频繁查询和更新表造成的索引错误,还有说法是Mysql数据库因某种原因而受到了损坏,如:数据库服务器突发性断电,在数据表提供服务时对表的源文件进行某种操作都有可能导致,Mysql数据表被损坏而无法读取数据,总之就是因为某些不可测的问题造成表的损坏。

我个人估计是没有正确编写和使用代码导致的,出现问题的表都是MyISAM存储引擎。

解决办法

命令行方式

1、登录,切换到error的数据库上:

css 复制代码
mysql -u root -p

use cc;

2、检查出现问题的表的状态

sql 复制代码
check table cc_user_area;

3、修复表(table_name 需要修复的表名)

css 复制代码
repair table table_name

4.检查一下状态,如下图

sql 复制代码
check table cc_user_address;

还有一种更为便捷的方法,使用Navicat来处理,首先连接上数据库,选择表,右键->Maintain(维护)->Repair Tables(修复表)->Extended(扩展)

修复就完成了,服务也正常使用了,有时候需要规范的编码,才不会出现奇奇怪怪的问题。

相关推荐
0和1的舞者4 分钟前
公共类的注意事项详细讲解
经验分享·后端·开发·知识·总结
小北方城市网16 分钟前
Spring Cloud Gateway 自定义过滤器深度实战:业务埋点、参数校验与响应改写
运维·jvm·数据库·spring boot·后端·mysql
jason.zeng@150220719 分钟前
POM构造Spring boot多模块项目
java·spring boot·后端
indexsunny24 分钟前
互联网大厂Java面试实录:Spring Boot微服务在电商场景中的应用与挑战
java·spring boot·redis·mysql·security·microservices·interview
海星船长丶30 分钟前
预编译与sql注入,正则回溯绕过,mysql常见绕过,报错注入7大常用函数
服务器·数据库·sql·mysql·网络安全
PythonFun35 分钟前
WPS单元格中如何分别设置中英字体为不同字号
数据库·mysql·wps
猿与禅39 分钟前
Spring Boot 3.x 集成 Caffeine 缓存框架官方指南
spring boot·后端·缓存·caffeine
Mikhail_G1 小时前
Mysql数据库操作指南——数据库(零基础篇)
大数据·数据库·sql·mysql·数据分析
虾说羊1 小时前
Springboot中配置欢迎页的方式
java·spring boot·后端
漫漫求1 小时前
Go的panic、defer、recover的关系
开发语言·后端·golang