mysql innodb文件ibdata1损坏导致mysql无法启动

摘要:
问题描述:1mysql数据库5.6无法正常启动。2.问题是由直接复制和替换innodb-frm和idb文件以添加数据表引起的。3.innodb文件ibdata1和ib_logfile0,ib_Logfile1损坏,数据不一致。4没有SQL备份。数据无法正常登录和导出。注意:Innodb表不能直接复制和替换frm和idb文件。而是使用工具正常导入和导出。Myisam表可以直接复制和替换文件。解决方案1:启用MySQL错误

问题描述

1 mysql数据库5.6无法正常启动

2 直接复制替换innodb的frm和idb文件来新增数据表导致的问题

3 innodb文件ibdata1,ib_logfile0,ib_logfile1损坏,数据不一致

4 没有sql备份,无法正常登陆和导出当天数据

注意事项

innodb的表不能直接复制替换frm和idb文件,而是使用工具正常导入导出,myisam表可以直接复制替换文件

解决方法

1 开启mysql错误日志,观察日志来判断数据库什么问题(此次问题比较清楚,innodb损坏,ibdata1损坏导致)

2 innodb_force_recovery (0-6级别) 此次使用6强制启动

   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大于0后,可以对标进行select、create、drop操作,但insert、update或者delete这类操作是不允许的

3 innodb_force_recovery=6 正常启动mysql后,无法使用navicat工具导出数据量大的的数据库,正常工具导出还会导致数据库崩溃(此处没有最近的sql备份,只有损坏后数据库目录直接备份,但是ibdata1损坏,所以这个备份没有意义,所以此处还是要导出正常的sql备份,用来恢复当天最近的数据)

4 尝试使用innochecksum  -f ibdata1工具来修复ibdata损坏,但是没有效果

5 使用mysqldump命令进行导出(此处遇到问题,和原来业务的数据编码问题,重新创建mysql环境,数据库创建问题,表创建问题,索引创建问题)

   1 数据编码问题,此处并不是普通的中文乱码问题,而是编码: JUSTEP154053; 提示: KSQL语法错误,源程序服务tomcat启动问题

      这个编码问题分为两步 :tomcat启动报错,数据库和表的编码问题,tomcat正常启动后里的程序页面报错,这是数据的编码问题

   2 此处遇到数据库,表创建,数据问题,手动创建新的utf-8,但是不生效,虽然都和原环境一直,但还是会出现编码报错,业务有问题

   3 解决无论导入和导出都需要加上--default-character-set=utf8(防止编码: JUSTEP154053,防止mysql错误导入ERROR 1064 (42000))

   4 此次为了快速解决,使用了原来2018-04月的备份数据库,使用原来数据库的库和表结构,清空数据

   5 导出来加-t 只导出数据,不导出表结构

6 解决步骤

   1 导出三个库所需的数据 --default-character-set=utf8 只导出数据,不导结构

   2 确保导出备份数据可以使用后,删除原有数据库文件

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

   4 innodb_force_recovery = 0 重新启动mysql 重建 ib_logfile0、ib_logfile1、ibdata1 此时所有数据表都无法打开

   5 重新导入数据文件 --default-character-set=utf8 导入数据

mysql数据恢复通过frm和idb文件(此处没有使用)

记录参考https://blog.csdn.net/Sonny_alice/article/details/80198200

整个恢复过程其实可以总结为下面几步:

一:无表数据结构

(1):恢复表结构

(2):复制出来创建表的sql语句

(3):恢复表数据(在恢复表数据的时候,首先需要解除当前创建的表与默认生成的.ibd文件间的关系,接着将要恢复数据表的.ibd文件与当前创建的表联系起来即可)

(4):alter table songlyric discard tablespace;alter table songlyric import tablespace;

免责声明:文章转载自《mysql innodb文件ibdata1损坏导致mysql无法启动》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇什么是session?gvisor debug下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

mysql创建触发器

首先,我们来了解一下什么是触发器,触发器,就是在对一张表数据进行增(insert),删(delete),改(update)的时候,为了保持数据的一致性,对别的表也要进行相应的数据修改。 我们都知道mysql最后事务提交后,数据是会保存到磁盘上的,那么每次在insert,delete,update时候旧数据和新数据,会在内存中生成临时的行数据,分别叫old和...

spring-boot整合mybatis(web mysql logback配置)

pom.xml相关的配置说明。 配置文件看着比价多,在创建spring-boot项目的时候,自需要添加web,mysql,mybatis三个选项即可 <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns...

mysql 怎么通过sql语句批量去掉某一个表中某一个字段的多余字符

采用替换,把”<img src="http://t.zoukankan.com/“替换为空格," />也替换为空格,曾经在网上看到过这样的SQL,替换字段中字符串中的某些字符update 表名 set 要修改的字段名= replace(要修改的字段名,‘<img src="http://t.zoukankan.com/’,'')updat...

go语言中操作mysql的方法

需要下载指定的golang的mysql驱动包 > go get github.com/go-sql-driver/mysql 下面的例子: package main; import ( "database/sql" _ "github.com/go-sql-driver/mysql" "fmt" ) func main() {...

nodejs中mysql用法

1、建立数据库连接:createConnection(Object)方法      该方法接受一个对象作为参数,该对象有四个常用的属性host,user,password,database。与php中链接数据库的参数相同。属性列表如下: host:       连接数据库所在的主机名. (默认: localhost) port:     ...

python3.6+RF连接mysql

接口自动化中会遇到有操作数据库的动作 目录 1、安装第三方库 2、安装pymysql 3、数据库操作 1、安装第三方库 使用在线安装:pip install robotframework_databaselibrary -i https://pypi.tuna.tsinghua.edu.cn/simple --trusted-host pypi.tuna....