完美解决mysql启动后随即关闭的问题(ibdata1文件损坏导致)

作者:jingxian 时间:2024-01-12 14:43:03 

机房一台服务器上的mysql运行一段时间了,突然出现了一个很奇怪的现象:重启后无法恢复了!准确情况是:启动mysql后随即就又关闭了。

查看mysql错误日志如下:

160920 22:41:41 mysqld_safe Starting mysqld daemon with databases from /home/MysqlData/
2016-09-20 22:41:41 0 [Note] /Data/app/mysql5.6.25/bin/mysqld (mysqld 5.6.25-log) starting as process 32372 ...
2016-09-20 22:41:42 32372 [Note] Plugin 'FEDERATED' is disabled.
2016-09-20 22:41:42 32372 [Warning] option 'innodb-write-io-threads': unsigned value 1000 adjusted to 64
2016-09-20 22:41:42 32372 [Warning] option 'innodb-read-io-threads': unsigned value 1000 adjusted to 64
2016-09-20 22:41:42 32372 [Note] InnoDB: Using atomics to ref count buffer pool pages
2016-09-20 22:41:42 32372 [Note] InnoDB: The InnoDB memory heap is disabled
2016-09-20 22:41:42 32372 [Note] InnoDB: Mutexes and rw_locks use GCC atomic builtins
2016-09-20 22:41:42 32372 [Note] InnoDB: Memory barrier is not used
2016-09-20 22:41:42 32372 [Note] InnoDB: Compressed tables use zlib 1.2.3
2016-09-20 22:41:42 32372 [Note] InnoDB: Using CPU crc32 instructions
2016-09-20 22:41:42 32372 [Note] InnoDB: Initializing buffer pool, size = 1.0G
2016-09-20 22:41:42 32372 [Note] InnoDB: Completed initialization of buffer pool
2016-09-20 22:41:42 32372 [Note] InnoDB: Highest supported file format is Barracuda.
2016-09-20 22:41:42 32372 [Note] InnoDB: Log scan progressed past the checkpoint lsn 20293587957
2016-09-20 22:41:42 32372 [Note] InnoDB: Database was not shutdown normally!
2016-09-20 22:41:42 32372 [Note] InnoDB: Starting crash recovery.
2016-09-20 22:41:42 32372 [Note] InnoDB: Reading tablespace information from the .ibd files...
2016-09-20 22:41:42 32372 [Note] InnoDB: Restoring possible half-written data pages
2016-09-20 22:41:42 32372 [Note] InnoDB: from the doublewrite buffer...
InnoDB: Doing recovery: scanned up to log sequence number 20293596130
2016-09-20 22:41:42 32372 [Note] InnoDB: Starting an apply batch of log records to the database...
InnoDB: Progress in percent: 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99
InnoDB: Apply batch completed
InnoDB: Last MySQL binlog file position 0 136254, file name mysql-bin.000013
2016-09-20 22:41:43 32372 [Note] InnoDB: 128 rollback segment(s) are active.
2016-09-20 22:41:43 32372 [Note] InnoDB: Waiting for purge to start
2016-09-20 22:41:43 7f77a9edd700 InnoDB: Assertion failure in thread 140151928772352 in file trx0purge.cc line 699
InnoDB: 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

解释:

innodb_force_recovery可以设置为1-6,大的数字包含前面所有数字的影响。

具体数字对应的含义:

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

再次启动mysql就ok了~

如果还无法启动,则需要删除数据目录datafile下的 ibdata1,ib_logfile*等文件。

启动后导出MySQL数据库,重新恢复即可。

标签:mysql,ibdata1,损坏
0
投稿

猜你喜欢

  • Python获取邮件地址的方法

    2022-05-29 10:53:05
  • 浅谈go语言renderer包代码分析

    2024-05-08 10:13:56
  • Windows安装MySQL8.0.16 的步骤及出现错误问题解决方法

    2024-01-25 06:27:36
  • Python实现压缩文件夹与解压缩zip文件的方法

    2023-07-31 20:43:09
  • python递归函数绘制分形树的方法

    2021-04-22 02:16:02
  • 关于vscode 默认添加python项目的源目录路径到执行环境的问题

    2022-01-29 06:00:34
  • 解决Python print输出不换行没空格的问题

    2021-03-21 11:05:57
  • 如何使用SQLServer数据库查询累计值

    2009-03-16 14:43:00
  • 被jQuery折腾得半死,揭秘为何jQuery为何在IE/Firefox下均无法使用

    2024-05-11 09:33:27
  • Python爬虫谷歌Chrome F12抓包过程原理解析

    2022-01-01 15:33:15
  • flask应用部署到服务器的方法

    2023-11-25 16:59:38
  • python 实现图片上传接口开发 并生成可以访问的图片url

    2021-03-19 01:02:02
  • python抖音表白程序源代码

    2021-01-29 17:12:38
  • 详解Python如何实现对比两个Excel数据差异

    2023-06-14 00:37:10
  • Go 结构体序列化的实现

    2024-05-21 10:26:40
  • Python logging日志库空间不足问题解决

    2021-08-24 15:59:17
  • 通过备份记录获取数据库的增长情况

    2024-01-17 20:21:26
  • *.HTC 文件的简单介绍

    2008-11-24 17:36:00
  • SqlServer2016模糊匹配的三种方式及效率问题简析

    2024-01-22 09:45:59
  • 深入理解typescript中的infer关键字的使用

    2023-10-13 19:19:33
  • asp之家 网络编程 m.aspxhome.com