MySQL Innodb表共享空间损坏无法启动

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS PostgreSQL,高可用系列 2核4GB
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介: 启动mysql后随即就又关闭了,mysql服务启动失败!!

线上数据库服务器上mysql运行一段时间了,突然出现了异常:


启动mysql后随即就又关闭了,mysql服务启动失败!!

查看mysql错误日志如下:


16092022:41:41 mysqld_safe Starting mysqld daemon with databases from /home/MysqlData/
2021-09-2022:41:41 0 [Note] /Data/app/mysql5.6.25/bin/mysqld (mysqld 5.6.25-log) starting as process 32372 ...
2021-09-2022:41:42 32372 [Note] Plugin 'FEDERATED' is disabled.
2021-09-2022:41:42 32372 [Warning] option 'innodb-write-io-threads': unsigned value 1000 adjusted to 642021-09-2022:41:42 32372 [Warning] option 'innodb-read-io-threads': unsigned value 1000 adjusted to 642021-09-2022:41:42 32372 [Note] InnoDB: Using atomics to ref count buffer pool pages
2021-09-2022:41:42 32372 [Note] InnoDB: The InnoDB memory heap is disabled
2021-09-2022:41:42 32372 [Note] InnoDB: Mutexes and rw_locks use GCC atomic builtins
2021-09-2022:41:42 32372 [Note] InnoDB: Memory barrier is not used
2021-09-2022:41:42 32372 [Note] InnoDB: Compressed tables use zlib 1.2.3
2021-09-2022:41:42 32372 [Note] InnoDB: Using CPU crc32 instructions
2021-09-2022:41:42 32372 [Note] InnoDB: Initializing buffer pool, size =1.0G
2021-09-2022:41:42 32372 [Note] InnoDB: Completed initialization of buffer pool
2021-09-2022:41:42 32372 [Note] InnoDB: Highest supported file format is Barracuda.
2021-09-2022:41:42 32372 [Note] InnoDB: Log scan progressed past the checkpoint lsn 202935879572021-09-2022:41:42 32372 [Note] InnoDB: Database was not shutdown normally!
2021-09-2022:41:42 32372 [Note] InnoDB: Starting crash recovery.
2021-09-2022:41:42 32372 [Note] InnoDB: Reading tablespace information from the .ibd files...
2021-09-2022:41:42 32372 [Note] InnoDB: Restoring possible half-written data pages
2021-09-2022:41:42 32372 [Note] InnoDB: from the doublewrite buffer...
InnoDB: Doing recovery: scanned up to log sequence number 202935961302021-09-2022:41:42 32372 [Note] InnoDB: Starting an apply batch of log records to the database...
InnoDB: Progress in percent: 495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899InnoDB: Apply batch completed
InnoDB: Last MySQL binlog file position 0136254, file name mysql-bin.000013
2021-09-2022:41:43 32372 [Note] InnoDB: 128 rollback segment(s) are active.
2021-09-2022:41:43 32372 [Note] InnoDB: Waiting for purge to start2021-09-2022:41:43 7f77a9edd700 InnoDB: Assertion failure in thread 140151928772352in file trx0purge.cc line 699InnoDB: Failing assertion: purge_sys->iter.trx_no <= purge_sys->rseg->last_trx_no
InnoDB: We intentionally generate a memory trap.
InnoDB: Submit a detailed bug report to http://bugs.mysql.com.
InnoDB: If you get repeated assertion failures or crashes, even
InnoDB: immediately after the mysqld startup, there may be
InnoDB: corruption in the InnoDB tablespace. Please refer to
InnoDB: http://dev.mysql.com/doc/refman/5.6/en/forcing-innodb-recovery.html
InnoDB: about forcing recovery.
02:41:43 UTC - mysqld got signal 6 ;
This could be because you hit a bug. It is also possible that this binary
or one of the libraries it was linked against is corrupt, improperly built,
or misconfigured. This error can also be caused by malfunctioning hardware.
We will try our best to scrape up some info that will hopefully help
diagnose the problem, but since we have already crashed,
something is definitely wrong and this may fail.


分析日志后发现,数据库无法重启的原因是因为ibdata1文件 (即共享表空间) 损坏,重启后无法正常恢复。


解决办法:

需要跳过恢复步骤,修改my.cnf文件,在my.cnf中的[mysqld]中添加:

innodb_force_recovery = 6

innodb_purge_threads = 1


修改后,接着重启Mysql服务,发现可正常启动。如果还是无法启动,则就需要删除mysql数据目录下的 "ibdata1、ib_logfile*" 等文件 (删除前,提前做好备份),然后再做Mysql服务启动操作!!


########innodb_force_recovery参数说明 ################

MySQL数据库当innodb表空间损坏时(如ibdata1文件损坏),尝试启动Mysql服务失败。这个时候可以使用innodb_force_recovery参数进行强制启动!下面说下这个参数的用法:


innodb_force_recovery参数解释:
-------------------------------------------------------------------------------------------------------------
innodb_force_recovery影响整个InnoDB存储引擎的恢复状况,默认值为0,表示当需要恢复时执行所有的恢复操作!!
当不能进行有效的恢复操作时,Mysql有可能无法启动,并记录下错误日志。
innodb_force_recovery可以设置为1-6,大的数字包含前面所有数字的影响。
当该参数的数值设置大于0后,可以对表进行select,create,drop操作,但insert,update或者delete这类操作是不允许的。
innodb_force_recovery=0   表示当需要恢复时执行所有的恢复操作;
innodb_force_recovery=1   表示忽略检查到的corrupt页;
innodb_force_recovery=2   表示阻止主线程的运行,如主线程需要执行full purge操作,会导致crash;
innodb_force_recovery=3   表示不执行事务回滚操作;
innodb_force_recovery=4   表示不执行插入缓冲的合并操作;
innodb_force_recovery=5   表示不查看重做日志,InnoDB存储引擎会将未提交的事务视为已提交;
innodb_force_recovery=6   表示不执行前滚的操作,强制重启!
-------------------------------------------------------------------------------------------------------------
记一次事故:
线上Mysql环境采用一主两从模式,突然一天上午发现主从库的Mysql服务都启动失败,最后排查是Mysql共享表空间ibdata1文件损坏了。
恢复记录:
1) 在主从库的Mysql配置文件my.cnf中添加
# vim /etc/my.cnf
innodb_force_recovery=6
2) 启动mysql服务
# service mysqld start
3)如果启动成功后,再将my.cnf文件中的"innodb_force_recovery=6"配置去掉,然后再次尝试mysql服务的重启,应该OK。
在主从库出现这种情况时,如果配置文件里之前就有这个参数,则尝试将该参数值修改为0或6,依次尝试重启。
————————————————
版权声明:本文为CSDN博主「林中静月下仙」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_21137441/article/details/122949036


*************** 当你发现自己的才华撑不起野心时,就请安静下来学习吧!***************

相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。 &nbsp; 相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情:&nbsp;https://www.aliyun.com/product/rds/mysql&nbsp;
相关文章
|
18天前
|
存储 关系型数据库 MySQL
介绍MySQL的InnoDB引擎特性
总结而言 , Inno DB 引搞 是 MySQL 中 高 性 能 , 高 可靠 的 存 储选项 , 宽泛 应用于要求强 复杂交易处理场景 。
59 15
|
5月前
|
存储 网络协议 关系型数据库
MySQL8.4创建keyring给InnoDB表进行静态数据加密
MySQL8.4创建keyring给InnoDB表进行静态数据加密
149 1
|
6月前
|
SQL 存储 关系型数据库
【YashanDB知识库】共享从 MySQL异常处理CONTINUE HANDLER的改写方法
【YashanDB知识库】共享从 MySQL异常处理CONTINUE HANDLER的改写方法
|
9月前
|
存储 缓存 关系型数据库
【MySQL进阶篇】存储引擎(MySQL体系结构、InnoDB、MyISAM、Memory区别及特点、存储引擎的选择方案)
MySQL的存储引擎是其核心组件之一,负责数据的存储、索引和检索。不同的存储引擎具有不同的功能和特性,可以根据业务需求 选择合适的引擎。本文详细介绍了MySQL体系结构、InnoDB、MyISAM、Memory区别及特点、存储引擎的选择方案。
1660 57
【MySQL进阶篇】存储引擎(MySQL体系结构、InnoDB、MyISAM、Memory区别及特点、存储引擎的选择方案)
|
5月前
|
SQL 缓存 关系型数据库
使用温InnoDB缓冲池启动MySQL测试
使用温InnoDB缓冲池启动MySQL测试
104 0
|
6月前
|
存储 关系型数据库 MySQL
【YashanDB知识库】共享从 MySQL异常处理CONTINUE HANDLER的改写方法
本文介绍了MySQL中`CONTINUE HANDLER FOR NOT FOUND`的用法及其在YashanDB中的改写方法。通过一个示例存储过程,展示了如何使用游标和异常处理机制来应对“未找到数据”的情况。在MySQL中,`CONTINUE HANDLER`用于捕获此类异常;而在YashanDB中,则需改用游标的`%NOTFOUND`属性和`NO_DATA_FOUND`异常处理。文章对比了两者的执行效果,帮助用户顺利完成从MySQL到YashanDB的业务迁移。
|
10月前
|
存储 Oracle 关系型数据库
【赵渝强老师】MySQL InnoDB的数据文件与重做日志文件
本文介绍了MySQL InnoDB存储引擎中的数据文件和重做日志文件。数据文件包括`.ibd`和`ibdata`文件,用于存放InnoDB数据和索引。重做日志文件(redo log)确保数据的可靠性和事务的持久性,其大小和路径可由相关参数配置。文章还提供了视频讲解和示例代码。
339 11
【赵渝强老师】MySQL InnoDB的数据文件与重做日志文件
|
9月前
|
存储 关系型数据库 MySQL
MySQL存储引擎详述:InnoDB为何胜出?
MySQL 是最流行的开源关系型数据库之一,其存储引擎设计是其高效灵活的关键。InnoDB 作为默认存储引擎,支持事务、行级锁和外键约束,适用于高并发读写和数据完整性要求高的场景;而 MyISAM 不支持事务,适合读密集且对事务要求不高的应用。根据不同需求选择合适的存储引擎至关重要,官方推荐大多数场景使用 InnoDB。
224 7
|
9月前
|
存储 关系型数据库 MySQL
Mysql索引:深入理解InnoDb聚集索引与MyisAm非聚集索引
通过本文的介绍,希望您能深入理解InnoDB聚集索引与MyISAM非聚集索引的概念、结构和应用场景,从而在实际工作中灵活运用这些知识,优化数据库性能。
552 7

推荐镜像

更多