数据库运维之InnoDB存储引擎表损坏修复方法

简介: InnoDB存储引擎表的损坏可能是多种因素导致的,比如服务器断电、系统崩溃、硬盘损坏、写数据过程中mysqld进程被kill掉。

InnoDB存储引擎表的损坏可能是多种因素导致的,比如服务器断电、系统崩溃、硬盘损坏、写数据过程中mysqld进程被kill掉。

严重的损坏可能导致无法执行SELECT语句或InnoDB引擎意外退出,甚至导致InnoDB向前滚动恢复崩溃。在这种情况下,我们可以使用innodb_force_recovery选项强制 InnoDB 存储引擎启动,同时阻止后台操作运行,以便使用SELECT ... INTO OUTFILE从数据库中转储表中数据,以这种方式获得的大部分数据都是完好无损的。

例如,将以下行添加到选项文件的 [mysqld] 部分,然后再重新启动服务器:

[mysqld]
innodb_force_recovery = 1

注意:

    在强制 InnoDB 恢复时,应始终从 innodb_force_recovery=1 开始,并且仅在必要时增加值。在此之前,请确保做好数据库的备份副本,以便需要重建数据库。

    innodb_force_recovery设置为 4 或以上可能会永久损坏数据文件,只有在数据库的物理副本测试设置成功后,才能在生产环境使用4或更大的值。

innodb_force_recovery的默认值是0(正常启动,不使用恢复模式),可配置的值为1~6,较大的值会包含较小的值的所有功能。举个例子,配置为3,那么会包含选项1、2的所有功能。

当innodb_force_recovery配置为 3 或更小的值可以转储表,数据相对安全,因为只有损坏的单页上的某些数据丢失。值为 4 或更高值会比较危险,因为数据文件可能会永久损坏。值为6时,因为数据页处于废弃状态,这可能会给 B 树和其他数据库结构带来更多的破坏。为了安全,innodb_force_recovery>0时禁止使用INSERT、DELETE、UPDATE操作。innodb_force_recovery>=4时InnoDB进入只读模式。

innodb_force_recovery选项:

1 (SRV_FORCE_IGNORE_CORRUPT)      

检查到的错误页,仍允许服务运行。在转储表时会跳过损坏的索引和页。

2 (SRV_FORCE_NO_BACKGROUND)  

阻止主线程和任何清理线程运行,执行清理操作时可能会引起crash。

3 (SRV_FORCE_NO_TRX_UNDO)    

不执行事务回滚。

4 (SRV_FORCE_NO_IBUF_MERGE)

不执行 change buffer的合并操作。此值可能会永久损坏数据文件。使用此值后,将删除并重建所有二级索引且将 InnoDB 设置为只读。   

5 (SRV_FORCE_NO_UNDO_LOG_SCAN)

启动数据库时不查看undo log,InnoDB将未提交的事务视为已提交。此值可能会永久损坏数据文件。

6 (SRV_FORCE_NO_LOG_REDO)  

redo log不做前滚操作。

通过innodb_force_recovery启动后,可进行如下操作:

1.导出数据

 select * into outfile '/tmp/outfile.txt' from tb1;

2.删除损坏的表

 drop table tb1;

3.创建新表

 create table `tb1` (id varchar(20));

4.导入数据

 LOAD DATA local INFILE '/tmp/outfile.txt' IGNORE INTO TABLE tb1;

如果表数据损坏导致无法转储数据,可以尝试加上ORDER BY primary_key,这个操作可以跳过表中损坏的部分转储数据。如果数据结构已经损坏,可能无法使用复杂的查询语句,只能通过SELECT * FROM tb1来保存数据。


欢迎大家留言交流。

相关文章
|
2月前
|
存储 缓存 关系型数据库
【MySQL进阶篇】存储引擎(MySQL体系结构、InnoDB、MyISAM、Memory区别及特点、存储引擎的选择方案)
MySQL的存储引擎是其核心组件之一,负责数据的存储、索引和检索。不同的存储引擎具有不同的功能和特性,可以根据业务需求 选择合适的引擎。本文详细介绍了MySQL体系结构、InnoDB、MyISAM、Memory区别及特点、存储引擎的选择方案。
【MySQL进阶篇】存储引擎(MySQL体系结构、InnoDB、MyISAM、Memory区别及特点、存储引擎的选择方案)
|
22天前
|
数据库 Windows
SqlServer数据恢复—SqlServer数据库所在分区损坏的数据恢复案例
一块硬盘上存放的SqlServer数据库,windows server操作系统+NTFS文件系统。由于误操作导致分区损坏,需要恢复硬盘里的SqlServer数据库数据。
|
2月前
|
SQL 存储 运维
从建模到运维:联犀如何完美融入时序数据库 TDengine 实现物联网数据流畅管理
本篇文章是“2024,我想和 TDengine 谈谈”征文活动的三等奖作品。文章从一个具体的业务场景出发,分析了企业在面对海量时序数据时的挑战,并提出了利用 TDengine 高效处理和存储数据的方法,帮助企业解决在数据采集、存储、分析等方面的痛点。通过这篇文章,作者不仅展示了自己对数据处理技术的理解,还进一步阐释了时序数据库在行业中的潜力与应用价值,为读者提供了很多实际的操作思路和技术选型的参考。
44 1
|
2月前
|
存储 关系型数据库 MySQL
MySQL存储引擎详述:InnoDB为何胜出?
MySQL 是最流行的开源关系型数据库之一,其存储引擎设计是其高效灵活的关键。InnoDB 作为默认存储引擎,支持事务、行级锁和外键约束,适用于高并发读写和数据完整性要求高的场景;而 MyISAM 不支持事务,适合读密集且对事务要求不高的应用。根据不同需求选择合适的存储引擎至关重要,官方推荐大多数场景使用 InnoDB。
78 7
|
2月前
|
关系型数据库 MySQL 数据库
数据库数据恢复—MYSQL数据库文件损坏的数据恢复案例
mysql数据库文件ibdata1、MYI、MYD损坏。 故障表现:1、数据库无法进行查询等操作;2、使用mysqlcheck和myisamchk无法修复数据库。
|
2月前
|
运维 监控 Cloud Native
云原生之运维监控实践:使用 taosKeeper 与 TDinsight 实现对 时序数据库TDengine 服务的监测告警
在数字化转型的过程中,监控与告警功能的优化对保障系统的稳定运行至关重要。本篇文章是“2024,我想和 TDengine 谈谈”征文活动的三等奖作品之一,详细介绍了如何利用 TDengine、taosKeeper 和 TDinsight 实现对 TDengine 服务的状态监控与告警功能。作者通过容器化安装 TDengine 和 Grafana,演示了如何配置 Grafana 数据源、导入 TDinsight 仪表板、以及如何设置告警规则和通知策略。欢迎大家阅读。
57 0
|
3月前
|
Oracle 关系型数据库 数据库
Oracle数据恢复—Oracle数据库文件有坏快损坏的数据恢复案例
一台Oracle数据库打开报错,报错信息: “system01.dbf需要更多的恢复来保持一致性,数据库无法打开”。管理员联系我们数据恢复中心寻求帮助,并提供了Oracle_Home目录的所有文件。用户方要求恢复zxfg用户下的数据。 由于数据库没有备份,无法通过备份去恢复数据库。
|
3月前
|
存储 Oracle 关系型数据库
【赵渝强老师】MySQL的InnoDB存储引擎
InnoDB是MySQL的默认存储引擎,广泛应用于互联网公司。它支持事务、行级锁、外键和高效处理大量数据。InnoDB的主要特性包括解决不可重复读和幻读问题、高并发度、B+树索引等。其存储结构分为逻辑和物理两部分,内存结构类似Oracle的SGA和PGA,线程结构包括主线程、I/O线程和其他辅助线程。
【赵渝强老师】MySQL的InnoDB存储引擎
|
3月前
|
存储 关系型数据库 MySQL
数据库引擎之InnoDB存储引擎
【10月更文挑战第29天】InnoDB存储引擎以其强大的事务处理能力、高效的索引结构、灵活的锁机制和良好的性能优化特性,成为了MySQL中最受欢迎的存储引擎之一。在实际应用中,根据具体的业务需求和性能要求,合理地使用和优化InnoDB存储引擎,可以有效地提高数据库系统的性能和可靠性。
60 5
|
4月前
|
运维 关系型数据库 MySQL
运维|MySQL 数据库被黑,心力交瘁
前一阵有一个测试用的 MySQL 数据库被黑了,删库勒索的那种,这里记录一下事情经过,给自己也敲个警钟。
64 2