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

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
日志服务 SLS,月写入数据量 50GB 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


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

相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
17天前
|
存储 Oracle 关系型数据库
【赵渝强老师】MySQL InnoDB的数据文件与重做日志文件
本文介绍了MySQL InnoDB存储引擎中的数据文件和重做日志文件。数据文件包括`.ibd`和`ibdata`文件,用于存放InnoDB数据和索引。重做日志文件(redo log)确保数据的可靠性和事务的持久性,其大小和路径可由相关参数配置。文章还提供了视频讲解和示例代码。
126 11
【赵渝强老师】MySQL InnoDB的数据文件与重做日志文件
|
17天前
|
存储 Oracle 关系型数据库
【赵渝强老师】MySQL InnoDB的表空间
InnoDB是MySQL默认的存储引擎,主要由存储结构、内存结构和线程结构组成。其存储结构分为逻辑和物理两部分,逻辑存储结构包括表空间、段、区和页。表空间是InnoDB逻辑结构的最高层,所有数据都存放在其中。默认情况下,InnoDB有一个共享表空间ibdata1,用于存放撤销信息、系统事务信息等。启用参数`innodb_file_per_table`后,每张表的数据可以单独存放在一个表空间内,但撤销信息等仍存放在共享表空间中。
|
17天前
|
存储 Oracle 关系型数据库
【赵渝强老师】MySQL InnoDB的段、区和页
MySQL的InnoDB存储引擎逻辑存储结构与Oracle相似,包括表空间、段、区和页。表空间由段和页组成,段包括数据段、索引段等。区是1MB的连续空间,页是16KB的最小物理存储单位。InnoDB是面向行的存储引擎,每个页最多可存放7992行记录。
|
17天前
|
存储 Oracle 关系型数据库
【赵渝强老师】MySQL的InnoDB存储引擎
InnoDB是MySQL的默认存储引擎,广泛应用于互联网公司。它支持事务、行级锁、外键和高效处理大量数据。InnoDB的主要特性包括解决不可重复读和幻读问题、高并发度、B+树索引等。其存储结构分为逻辑和物理两部分,内存结构类似Oracle的SGA和PGA,线程结构包括主线程、I/O线程和其他辅助线程。
【赵渝强老师】MySQL的InnoDB存储引擎
|
2月前
|
SQL 存储 关系型数据库
mysql 数据库空间统计sql
mysql 数据库空间统计sql
47 0
|
2月前
|
存储 缓存 关系型数据库
详细解析MySQL中的innodb和myisam
总之,InnoDB和MyISAM各有千秋,选择合适的存储引擎应基于对应用程序特性的深入理解,以及对性能、数据完整性和可扩展性的综合考量。随着技术发展,InnoDB因其全面的功能和日益优化的性能,逐渐成为更广泛场景下的首选。然而,在特定条件下,MyISAM依然保留其独特的价值。
131 0
|
4月前
|
监控 关系型数据库 MySQL
在Linux中,mysql的innodb如何定位锁问题?
在Linux中,mysql的innodb如何定位锁问题?
|
4月前
|
SQL 数据库 数据安全/隐私保护
CTFHUB 2021-第五空间 yet_another_mysql_injection
CTFHUB 2021-第五空间 yet_another_mysql_injection
30 0
|
17天前
|
SQL 关系型数据库 MySQL
12 PHP配置数据库MySQL
路老师分享了PHP操作MySQL数据库的方法,包括安装并连接MySQL服务器、选择数据库、执行SQL语句(如插入、更新、删除和查询),以及将结果集返回到数组。通过具体示例代码,详细介绍了每一步的操作流程,帮助读者快速入门PHP与MySQL的交互。
30 1
|
19天前
|
SQL 关系型数据库 MySQL
go语言数据库中mysql驱动安装
【11月更文挑战第2天】
32 4