当mysql损坏时候,如何修复mysql

MySQL表损坏预防与修复 Normal 0 7.8 磅 0 2 false false false EN-US ZH-CN X-NONE 阅读详情

一、问题描述

今天在线运行的一个mysql崩溃了,重启后发现还是无法正常启动。
查看错误日志,如下:

2018-08-20 10:19:16 7740 [Note] InnoDB: Page size:8192 Pages to analyze:8
2018-08-20 10:19:16 7740 [Note] InnoDB: Page size: 8192, Possible space_id count:0
2018-08-20 10:19:16 7740 [Note] InnoDB: Page size:16384 Pages to analyze:4
2018-08-20 10:19:16 7740 [Note] InnoDB: Page size: 16384, Possible space_id count:0
2018-08-20 10:19:16 7fdb72c8b740  InnoDB: Operating system error number 2 in a file operation.
InnoDB: The error means the system cannot find the path specified.
InnoDB: If you are installing InnoDB, remember that you must create
InnoDB: directories yourself, InnoDB does not create them.
InnoDB: Error: could not open single-table tablespace file ./data_dep/report.ibd
InnoDB: We do not continue the crash recovery, because the table may become
InnoDB: corrupt if we cannot apply the log records in the InnoDB log to it.
InnoDB: To fix the problem and start mysqld:
InnoDB: 1) If there is a permission problem in the file and mysqld cannot
InnoDB: open the file, you should modify the permissions.
InnoDB: 2) If the table is not needed, or you can restore it from a backup,
InnoDB: then you can remove the .ibd file, and InnoDB will do a normal
InnoDB: crash recovery and ignore that table.
InnoDB: 3) If the file system or the disk is broken, and you cannot remove
InnoDB: the .ibd file, you can set innodb_force_recovery > 0 in my.cnf
InnoDB: and force InnoDB to continue crash recovery here.
180820 10:19:16 mysqld_safe mysqld from pid file /opt/mysqldata/bidw.pid ended

二、问题分析

1、从日志中可以看出是innodb引擎出了问题。日志里提示到 Error: could not open single-table tablespace file ./data_dep/report.ibd ,通过这个报错信息可以判断出来,mysql丢失这个数据文件,或者是该数据文件损坏,当mysql启动的时候检测有问题,将进行恢复,提示正常恢复该数据文件,

2、日志中也提供了解决方法,有强制恢复的方法。在mysql的配置文件my.cnf里找到 [mysqld]字段下,添加 innodb_force_recovery=1:

my.cnf代码如下:


   
  1. [mysqld]
  2. innodb_force_recovery = 1

innodb_force_recovery参数说明:

如果innodb_force_recovery = 1不生效,则可尝试2——6几个数字
然后重启mysql,重启成功。然后使用mysqldump或 pma 导出数据,执行修复操作等。修复完成后,把该参数注释掉,还原默认值0。
配置文件的参数:innodb_force_recovery
innodb_force_recovery影响整个InnoDB存储引擎的恢复状况。默认为0,表示当需要恢复时执行所有的恢复操作(即校验数据页/purge undo/insert buffer merge/rolling back&forward),当不能进行有效的恢复操作时,mysql有可能无法启动,并记录错误日志;
innodb_force_recovery可以设置为1-6,大的数字包含前面所有数字的影响。当设置参数值大于0后,可以对表进行select,create,drop操作,但insert,update或者delete这类操作是不允许的。

  • 1(SRV_FORCE_IGNORE_CORRUPT):忽略检查到的corrupt页。
  • 2(SRV_FORCE_NO_BACKGROUND):阻止主线程的运行,如主线程需要执行full purge操作,会导致crash。
  • 3(SRV_FORCE_NO_TRX_UNDO):不执行事务回滚操作。
  • 4(SRV_FORCE_NO_IBUF_MERGE):不执行插入缓冲的合并操作。
  • 5(SRV_FORCE_NO_UNDO_LOG_SCAN):不查看重做日志,InnoDB存储引擎会将未提交的事务视为已提交。
  • 6(SRV_FORCE_NO_LOG_REDO):不执行前滚的操作

注:当前进行innodb_force_recovery设置为1时启动mysql数据库,在数据恢复后,需要再innodb_force_recovery修改正常模式,也就是innodb_force_recovery=0,数据恢复方案可以参考第三步:方案解析(方法来源网友测试方案)

 

三、方案解析(恢复丢失数据测试参考)

一般修复方法参考:

第一种方法

建立一张新表:
create table demo_bak  #和原表结构一样,只是把INNODB改成了MYISAM。
把数据导进去
insert into demo_bak select * from demo;
删除掉原表:
drop table demo;
注释掉 innodb_force_recovery 之后,重启。
重命名:
rename table demo_bak to demo;
最后改回存储引擎:
alter table demo engine = innodb

第二种方法

另一个方法是使用mysqldump将表格导出,然后再导回到InnoDB表中。这两种方法的结果是相同的。
备份导出(包括结构和数据):
mysqldump -uroot -p123 test > test.sql
还原方法1:
use test;
source test.sql
还原方法2(系统命令行):
mysql -uroot -p123 test < test.sql;
注意,CHECK TABLE命令在InnoDB数据库中基本上是没有用的。

第三种方法

1、配置my.cnf

配置innodb_force_recovery = 1或2——6几个数字,重启MySQL

2、导出数据脚本

mysqldump -uroot -p123 test > test.sql
导出SQL脚本。或者用Navicat将所有数据库/表导入到其他服务器的数据库中。
注意:这里的数据一定要备份成功。然后删除原数据库中的数据。

3、删除ib_logfile0、ib_logfile1、ibdata1

备份MySQL数据目录下的ib_logfile0、ib_logfile1、ibdata1三个文件,然后将这三个文件删除

4、配置my.cnf

将my.cnf中innodb_force_recovery = 1或2——6几个数字这行配置删除或者配置为innodb_force_recovery = 0,重启MySQL服务

5、将数据导入MySQL数据库

mysql -uroot -p123 test < test.sql; 或者用Navicat将备份的数据导入到数据库中。
此种方法下要注意的问题:
  1、ib_logfile0、ib_logfile1、ibdata1这三个文件一定要先备份后删除;
  2、一定要确认原数据导出成功了
  3、当数据导出成功后,删除原数据库中的数据时,如果提示不能删除,可在命令行进入MySQL的数据目录,手动删除相关数据库的文件夹或者数据库文件夹下的数据表文件,前提是数据一定导出或备份成功。

 

资料参考:https://blog.youkuaiyun.com/l1028386804/article/details/77199194

修复断电损坏的MySQL数据表 遇到报错:Error: Table ‘p’ is marked as crashed and should be repaired Caused by: java.sql.SQLException: Table ‘表名’ is marked as crashed and should be repaired 1.表损坏的原因分析以下原因是导致mysql 表毁坏的常见原因: 1、 服务器突然断电导致 阅读详情

相关推荐

MySQL修改ib_logfilesN文件的同时进行了什么操作?

当MySQL执行写操作时,它会将相关的事务日志和重做日志记录到ib_logfile0和ib_logfile1中。在MySQL数据库中,有两个重要的日志文件,称为ib_logfile0和ib_logfile1,它们被用于记录事务日志和重做日志。在某些情况下,MySQL会同时修改这两个日志文件。总之,MySQL会同时修改两个ib_logfilesN文件,以确保事务日志和重做日志的一致性和持久性。语句时,MySQL将同时将相关的事务日志和重做日志记录到ib_logfile0和ib_logfile1中。

. 469

ib_logfile和mysql_bin_MySQL的InnoDB引擎中事务日志ib_logfile0和ib_logfile1详解

概念:事务日志或称redo日志,在mysql中默认以ib_logfile0,ib_logfile1名称存在,可以手工修改参数,调节开启几组日志来服务于当前mysql数据库,mysql采用顺序,循环写方式,每开启一个事务时,会把一些相关信息记录事务日志中(记录对数据文件数据修改的物理位置或叫做偏移量);这个系列文件个数由参数innodb_log_files_in_group控制,若设置为4,则命名为...

weixin_36271649的博客 4929

服务器突然断电,重启后找不到mysql.sock文件、innodb引擎表(日志表)损坏.md

服务器断电后重启,导致MySQL连接失败。mysql.sock文件丢失,innodb引擎表损坏,最直接的解决办法。

mysql ib logfile_Mysql 事务日志(Ib_logfile)

mysql的innodb中事务日志ib_logfile(0/1)概念:事务日志或称redo日志,在mysql中默认以ib_logfile0,ib_logfile1名称存在,可以手工修改参数,调节开启几组日志来服务于当前mysql数据库,mysql采用顺序,循环写方式,每开启一个事务时,会把一些相关信息记录事务日志中(记录对数据文件数据修改的物理位置或叫做偏移量);这个系列文件个数由参数innodb...

weixin_33411550的博客 908

ib_logfile0

ib_logfile0ib_logfile0ib_logfile0

戴尔G3/AWCC用户必看:揪出WMI Provider Host疯狂占用的元凶,附5.4.35旧版回退保姆级教程

本文针对戴尔G3/AWCC用户遇到的WMI Provider Host异常占用问题,提供了详细的诊断方法和解决方案。通过分析AWCC 5.5.14.0版本的资源占用问题,指导用户回退到稳定版AWCC 5.4.35,并附上保姆级教程和预防措施,帮助用户彻底解决系统卡顿问题。

weixin_30892037的博客 561

MySQL表损坏如何修复?

当 MySQL 表损坏时,通常表现为数据无法访问、查询报错(如或)或数据不一致。

zjw541806的博客 1203

VLA-JEPA:具身智能中潜空间世界模型的工程落地实践

世界模型是具身智能实现环境理解与因果推演的核心基础,其本质是在状态空间中建模‘动作→结果’的动力学规律。传统基于像素或文本的世界模型因高维、非平稳、弱语义等缺陷,在真实机器人场景中鲁棒性差、部署成本高。JEPA(联合嵌入预测架构)通过构建物理约束的潜空间,将视觉-语言-动作(VLA)信号统一编码为低维、可微、可解释的状态表征,显著提升模型对抖动、遮挡、光照突变等干扰的适应能力,并支持实时闭环控制。该范式已在UR5e、Franka等多构型机械臂及Jetson边缘平台完成实测验证,成为VLA系统从实验室走向产线

weixin_34357928的博客 336

如何修复MySQL中损坏的表

偶尔MySQL表可能会损坏,这意味着一个错误已经发生,其中的数据是不可读。虽然这种情况非常少见,遇到了那恭喜你中招了。如果你想从损坏的表中读取数据通常会导致服务器崩溃。 一些常见的原因损坏的表: - MySQL服务器在写过程中停止; - 外部程序同时修改服务器正在修改的表; - 机器意外关机; - 计算机硬件故障; - MySQL代码中有个bug。 如果您怀疑其中一个表已损坏,则应该在进行故障排除或试图修复该表之前对数据目录进行备份。这将有助于将数据丢失的风险降到最低。

码觉客的博客 1万+

STM32外部中断与事件机制深度解析:从硬件触发到软件响应

本文深入解析STM32外部中断与事件机制,从硬件触发到软件响应的完整流程。通过对比中断和事件的应用场景、响应速度及配置方法,帮助开发者优化嵌入式系统设计,特别适合需要低功耗或高实时性的项目。

weixin_29175469的博客 408

给MATLAB安装runtime插件

输入你刚刚下载压缩包的位置(小白提示:在 此电脑 中找到压缩包位置,右键属性复制位置)(!设置好以后然后填写下面输出exe文件的信息,包括文件的名字、作者、Email、公司、概述、描述,下面还可以选择额外的安装选项,exe文件运行需要的其他文件(图像、子程序等)、提供给用户的文件(readme.txt等)(很多方法是官网下载,但在官网下载还是会版本不对应,所以直接在你所用的MATLAB里搜索安装链接最靠谱)(!5.可以打包程序了(你发送文件的人电脑里没有MATLAB也可以查看运行你的程序了)

Pei_hua100的专栏 1万+

mysql修复损坏表_在MySQL中,如何修复损坏的表

本指南旨在作为故障排除资源和诊断MySQL设置的起点。有时,MySQL表损坏,这意味着发生了错误,并且其中的数据无法读取。损坏表的一些常见原因是:MySQL服务器在写数据的时候停止。外部程序同时修改由服务器修改的表。机器意外关闭,计算机硬件失败,在MySQL代码中有软件BUG。如果你怀疑某个表已损坏,则应在故障排除之前对数据目录进行备份或修复表,这将有助于减少数据丢失的风险。首先,停止MySQL服...

weixin_42509888的博客 570

掌握SiOME:从零构建OPC UA信息模型的完整指南

本文是掌握SiOME工具的完整指南,详细介绍了如何利用这款免费且强大的OPC UA建模工具,从零开始构建信息模型。内容涵盖从获取软件、创建命名空间、定义对象类型与变量,到添加方法、生成XML文件,并最终将其集成到开源的open62541服务器中。通过可视化建模,开发者可以高效、准确地设计复杂模型,大幅提升工业物联网与自动化项目的开发效率。

tcp8optimizer的博客 515

怎么损坏mysql_如何修复MySQL中损坏的表

本指南旨在用作诊断MySQL设置时的故障排除资源和起点。 我们将讨论许多MySQL用户遇到的一些问题,并提供解决特定问题的指导。 我们还将包含指向DigitalOcean教程的链接以及在某些情况下可能有用的官方MySQL文档。有时,MySQL表可能会损坏,这意味着发生了错误,并且其中包含的数据是不可读的。 尝试从损坏的表中读取通常会导致服务器崩溃。表损坏的一些常见原因是:MySQL服务器在写入过程...

weixin_42099530的博客 575

高通拨号流程介绍

本文介绍了高通平台(如SDX55)中APSS(A7处理器)与ModEM(Q6处理器)间的通信机制。

四儿家的小祖宗的博客 1067

STM32cubemx配置驱动DHT11模块

本篇文章将带大家学习使用DHT11湿温度模块,使用这个模块可以获取当前的温度和湿度数据。DHT11可以用于智能家居,蔬菜大棚等项目当中适用范围广。DHT11 是一种数字式温湿度传感器,由杜邦公司推出。它可以测量环境中的温度和湿度,并将测量结果以数字形式传输给微控制器或其他电子设备,适用于通过数字信号读取环境温湿度的应用场景。DHT11 传感器使用单总线数据交换协议,可以通过一个 I/O 引脚进行控制和数据传输。

m0_49476241的博客 5912

mysql表损坏及修复

1.表损坏的原因分析  以下原因是导致mysql 表毁坏的常见原因:  1、 服务器突然断电导致数据文件损坏。  2、 强制关机,没有先关闭mysql 服务。  3、 mysqld 进程在写表时被杀掉。  4、 使用myisamchk 的同时,mysqld 也在操作表。  5、 磁盘故障。  6、 服务器死机。  7、 mysql 本身的bug 。  2.表损坏的症状  一

public 2738

yolov8 PTQ和QAT量化实战(源码详解)

量化():是指将高精度浮点数(FP32)转换为低精度(8bit或4bit)整数的过程,它是模型部署中的一种非常重要的优化方法,可以在较少的精度损失下,大幅提供神经网络的效率和性能。目前主流的神经网络量化方式有PTQ和QATPTQ是训练后量化(),无需数据集和训练,直接量化模型权重QAT是量化感知训练(),量化后需要在数据集上继续微调训练。QAT过程中,我们首先需要选择哪些层需要进行finetune训练,并利用FP32对应层的输出作为监督进行训练。

@bangbang的博客 5326

MySQL表损坏修复解决方案

数据损坏原因MySQL表损坏一般是数据损坏,引起损坏的原因可能是由于磁盘损坏、系统崩溃或者MySQL服务器被崩溃等外部原因。例如有人使用kill -9终止进程,导致MySQL进程未能正常关闭,那么就很有可能导致数据损坏。 对于不同的引擎,数据损坏修复的方式不一样,作为一般情况可以尝试使用CHECK TABLE和REPAIR TABLE命令修复。MyISAM损坏的修复方案MyISAM损坏有两种修复方

yinn 2万+

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

mysql表空间损坏怎么办_mysql的表坏了怎么修复啊?

展开全部1. 表损坏的原因分析32313133353236313431303231363533e4b893e5b19e31333264626661以下原因是导致mysql 表毁坏的常见原因:1、 服务器突然断电导致数据文件损坏。2、 强制关机,没有先关闭mysql 服务。3、 mysqld 进程在写表时被杀掉。4、 使用myisamchk 的同时,mysqld 也在操作表。5、 磁盘故...

weixin_29879257的博客 920

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

如何修复损坏的 MySQL 表

有时,MySQL 表可能会损坏,这意味着发生了错误,其中保存的数据无法读取。尝试从损坏的表中读取通常会导致服务器崩溃。MySQL 服务器在写入过程中停止。外部程序修改了正在被服务器同时修改的表。机器意外关闭。计算机硬件故障。MySQL 代码中存在软件错误。如果你怀疑你的表之一已经损坏,你应该在排除故障或尝试修复表之前备份数据目录。这将有助于最小化数据丢失的风险。然后将所有数据复制到一个新的备份目录。在 Ubuntu 系统上,默认数据目录是备份完成后,你可以开始调查表是否确实损坏。

rubys_的专栏 1161

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

MySQL(134)如何修复损坏的表?

摘要:本文介绍了MySQL表损坏的修复方法,包括MyISAM和InnoDB两种引擎的修复步骤。对于MyISAM表,可以使用CHECK TABLE和REPAIR TABLE命令;对于InnoDB表,可能需要重建表空间或从备份恢复。文章还提供了使用mysqlcheck、myisamchk等工具的具体命令,以及一个Python脚本示例用于自动检测和修复表。最后强调了备份数据的重要性,并建议根据实际损坏情况选择适当的修复方案。

qq_43012298的博客 645

mysql 避免表损坏_MySQL表损坏预防与修复

1.表损坏的原因分析以下原因是导致mysql表毁坏的常见原因:1、服务器突然断电导致数据文件损坏。2、强制关机,没有先关闭mysql服务。3、mysqld进程在写表时被杀掉。4、使用myisamchk的同时,mysqld也在操作表。5、磁盘故障。6、服务器死机。7、mysql本身的bug。2.表损坏的症状一个损坏的表的典型症状如下:1、当在...

weixin_28932845的博客 397

mysql库索引损坏_mysql数据库索引损坏及修复经验分享

mysql表索引被破坏的问题及解决下午上班,惊闻我的dedecms的网站出问题了,访问一看,果然全屏报错,检查mysql日志,错误信息为:Table '.\dedecmsv4\dede_archives' is marked as crashed and should be repaired提示说cms的文章表dede_archives被标记有问题,需要修复。于是赶快恢复历史数据,上网查找原因。最...

weixin_31668255的博客 318

mysql数据表损坏了教你如何来修复[转载]

  mysql数据表损坏了教你如何来修复          1. 表损坏的原因分析     以下原因是导致mysql 表毁坏的常见原因:   1、 服务器突然断电导致数据文件损坏。   2、 强制关机,没有先关闭mysql 服务。   3、 mysqld 进程在写表时被杀掉。   4、 使用myisamchk 的同时,mysqld 也在操作表。   5、 磁盘故障。   6、...

sanzhongzhifu的专栏 899
上一篇: Unable to install mysqlclient on centos
下一篇: sql监控之mysql篇
幽默的荆轲君
博客等级 码龄10年 122粉丝 295原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值