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(扩展)

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

相关推荐
ihgry几秒前
java并发编程(juc理论篇)
后端
啥都不懂的小小白6 分钟前
MVCC深度解析:MySQL如何实现高效无阻塞的并发读写
数据库·mysql·mvcc
austin流川枫7 分钟前
🔥MySQL的大表优化方案 (实战分享)
java·mysql·性能优化
码界奇点9 分钟前
基于Spring Boot和Vue.js的视频点播管理系统设计与实现
java·vue.js·spring boot·后端·spring·毕业设计·源代码管理
程序员根根10 分钟前
MySQL 事务全解析:从 ACID 特性到实战落地(部门 - 员工场景)
数据库·后端
爱吃山竹的大肚肚10 分钟前
MySQL 支持的各类索引
java·数据库·sql·mysql·spring·spring cloud
黑白极客11 分钟前
mysql的 order by是怎么工作的?redo-log和binlog为什么采用双确认机制?
数据库·mysql
程序员水自流14 分钟前
MySQL常用内置函数详细介绍
java·数据库·mysql
小韩博17 分钟前
PHP-MySQL 数据请求与 SQL 注入多样性(小迪 43 课笔记整理)
sql·mysql·php
赵思空20 分钟前
window docker 安装 mysql 数据库,及不能连接问题
数据库·mysql·docker