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

机房一台服务器上的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数据库,重新恢复即可。

时间: 2024-10-17 23:32:04

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

MySQL实例多库某张表数据文件损坏导致xxx库无法访问故障恢复

一.问题发现 命令行进入数据库实例手动给某张表进行alter操作,发现如下报错. mysql> use xx_xxx; No connection. Trying to reconnect... Connection id: 5 Current database: *** NONE *** Reading table information for completion of table and column names You can turn off this feature to get

mysql5.7 本地计算机上的mysql 服务启动后停止 的问题解决

mysql5.7 本地计算机上的mysql 服务启动后停止. 问题: 在cmd 下mysql服务mysql服务无法启动任何错误法启动 服务没有报告任何错误 在服务里面启动是 早上来了发现项目有问题,一般把apache mysql 重启一下就没事了. apache 重启了,可是mysql重启不了, 就讲他停了.在服务里启动,这下可好....报错.就上面的死活起不来 ....项目还在跑不起来,客服那边打电话催....急死了,百度了好多方法. 好多都是需要重新初始化..mysqld  --initia

django-celery启动后迅速关闭的解决办法

日志中也没有打印什么明显的错误,只是显示连接了rabbitmq后就关闭了 [2019-09-11 06:08:45,729: INFO/Beat] beat: Starting... [2019-09-11 06:08:45,731: INFO/MainProcess] Connected to amqp://guest:**@127.0.0.1:5672// [2019-09-11 06:08:45,732: INFO/Beat] Writing entries (0)... [2019-09

MySql启动报错,无法更新PID文件

MySql启动报错 Starting MySQL.. ERROR! The server quit without updating PID file (/var/lib/mysql..) 1,查看错误日志 2017-08-10 19:38:14 31865 [Note] InnoDB: Initializing buffer pool, size = 50.0M InnoDB: mmap(53657600 bytes) failed; errno 12 2017-08-10 19:38:14

mysql安装后找不到sock文件

mysql rpm安装方式之后,启动找不到sock文件,经排查是之前安装的由mysql, 需要时yum list installed mysql 或者  rpm -qa |grep -i mysql 查看是否已有安装 有则卸载,免得冲突 命令: yum remove 软件包名 或者 rpm -e 软件包名

maven jetty 启动后,不能修改静态文件,js,css,html

解决办法: 1.从jetty的jar包中(位置可能不同,有的jetty-web中)拷贝一份webdefault.xml文件 2.将webdefault.xml 中的useFileMappedBuffer  设置为false. <init-param> <param-name>useFileMappedBuffer</param-name> <param-value>false</param-value></init-param> 3.

记:cloudstack--gluster主存储上的一个文件损坏导致SSVM启动失败

cloudstack的系统vm(ssvm不停的重建失败).- 1.cloudstack-management 的关键日志 这行 cannot read header 'mnt.......':Invalid argument 2.cloudstack 存储(gluster)的关键日志 这里看不到什么有帮助的错误日志 3.cloudstack agent(libvirtd) 的日志(重建系统vm会随机在所有的计算节点上去重建) 这里也出现了 cannot read header 'mnt.....

MySQL ibdata1占用空间大 释放MySQL ibdata1文件的空间

MySQL ibdata1占用空间大  释放MySQL ibdata1文件的空间 背景:最近公司一台服务器报警,磁盘空间报警超阀值.  原来mysql数据库数据目录特别大,前一篇文章中介绍的是变更mysql数据文件的目录,此文主要介绍如何把mysql占用的空间释放出来. 说明: mysql有多种存储引擎,比如MyISAM.InnoDB很常用. 如果用的InnoDB, 且使用mysql默认的配置文件,MySQL的数据都会存放在ibdata1文件中,经过一段时间此文件会变的非常大,占用大量磁盘空间.

MySQL ibdata1文件太大的解决办法

在MySQL数据库中,如果不指定innodb_file_per_table=1参数单独保存每个表的数据,MySQL的数据都会存放在ibdata1文件里,时间久了这个文件就会变的非常大. 下面是参考网上的一些资料,把数据分别保存在各数据库子目录里的方法,这样新产生的ibdata1文件就不会太大了.下面是在Ubuntu 14.04.12 x64,MySQL5.5上对ibdata1进行瘦身,操作过程的整理. 1.备份数据库中的数据. mysqldump -u root -p --extended-in