MySQL5.7 服务 crash 后无法启动

事发背景

测试环境更换数据盘,直接采取在线将数据目录暴力拷贝到新盘,然后将原服务关闭,启用新盘。

服务是可以正常启动的,但是没多会开发就反应服务down了,错误日志输出

2017-05-17 15:06:28 0x7ffdadff7700  InnoDB: Assertion failure in thread 140727522653952 in file trx0purge.cc line 167
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.7/en/forcing-innodb-recovery.html
InnoDB: about forcing recovery.
07:06:28 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.
Attempting to collect some information that could help diagnose the problem.
As this is a crash and something is definitely wrong, the information
collection process might fail.

key_buffer_size=8388608
read_buffer_size=2097152
max_used_connections=0
max_threads=1000
thread_count=0
connection_count=0
It is possible that mysqld could use up to
key_buffer_size + (read_buffer_size + sort_buffer_size)*max_threads = 4117496 K  bytes of memory
Hope that‘s ok; if not, decrease some variables in the equation.

Thread pointer: 0x7ffda8000900
Attempting backtrace. You can use the following information to find out
where mysqld died. If you see no messages after this, something went
terribly wrong...
stack_bottom = 7ffdadff6d98 thread_stack 0x40000
/usr/local/mysql/bin/mysqld(my_print_stacktrace+0x35)[0xf32bd5]
/usr/local/mysql/bin/mysqld(handle_fatal_signal+0x4a4)[0x77b844]
/lib64/libpthread.so.0(+0xf7e0)[0x7ffe223e17e0]
/lib64/libc.so.6(gsignal+0x35)[0x7ffe2108c5e5]
/lib64/libc.so.6(abort+0x175)[0x7ffe2108ddc5]
/usr/local/mysql/bin/mysqld[0x10c5da5]
/usr/local/mysql/bin/mysqld(_ZN20TrxUndoRsegsIterator8set_nextEv+0x322)[0x1093822]
/usr/local/mysql/bin/mysqld[0x1095ea3]
/usr/local/mysql/bin/mysqld(_Z9trx_purgemmb+0x6ad)[0x10974bd]
/usr/local/mysql/bin/mysqld[0x1076178]
/usr/local/mysql/bin/mysqld(srv_purge_coordinator_thread+0x86f)[0x107914f]
/lib64/libpthread.so.0(+0x7aa1)[0x7ffe223d9aa1]
/lib64/libc.so.6(clone+0x6d)[0x7ffe21142aad]

Trying to get some variables.
Some pointers may be invalid and cause the dump to abort.
Query (0): is an invalid pointer
Connection ID (thread ID): 0
Status: NOT_KILLED

The manual page at http://dev.mysql.com/doc/mysql/en/crashing.html contains
information that should help you find out what is causing the crash.

查看了提示的链接,可能的影响因素包括、

1、数据文件或索引文件有坏页

2、mysqld服务在运行期间,有其它项目操作数据文件和索引文件

这条和先前的操作有关,在mysqld服务运行期间我直接将数据文件拷贝到了另一盘,这样做很可能导致副本的数据和索引是不一致的

按照官网给出的建议对日志中的stack进行了解析

vim /data1/sql/mysqld.sym
0xf32bd5
0x77b844
0x7f751eed67e0
0x7f751db815e5
0x7f751db82dc5
0x10c5da5
0x1093822
0x1095ea3
0x10974bd
0x1076178
0x107914f
0x7f751eeceaa1
0x7f751dc37aad

nm -D -n /usr/local/mysql/bin/mysqld > /data1/sql/mysqld.sym                         

resolve_stack_dump -s /data1/sql/mysqld.sym -n /data1/sql/mysqld.stack
0xf32bd5 my_print_stacktrace + 53
0x77b844 handle_fatal_signal + 1188
0x7f751eed67e0 _end + 486423968
0x7f751db815e5 _end + 466152357
0x7f751db82dc5 _end + 466158469
0x10c5da5 _Z23ut_dbg_assertion_failedPKcS0_m + 170
0x1093822 _ZN20TrxUndoRsegsIterator8set_nextEv + 802
0x1095ea3 _Z14trx_purge_stopv + 5363
0x10974bd _Z9trx_purgemmb + 1709
0x1076178 _Z26srv_get_active_thread_typev + 1048
0x107914f srv_purge_coordinator_thread + 2159
0x7f751eeceaa1 _end + 486391905
0x7f751dc37aad _end + 466899053

找不出导致crash的根本原因,暂时的解决方案是通过设置innodb_force_recovery来启动

相关内容参考InnoDB Recovery

1、设置innodb_force_recovery 先后设置1和2都无效,最后设置为3后启动成功

2、启动后dump所有的数据库,恢复到新建实例中

时间: 2024-10-20 02:56:41

MySQL5.7 服务 crash 后无法启动的相关文章

windows服务安装后立即启动

置serviceProcessInstaller1控件的Account属性为"LocalSystem" 设置serviceInstaller1控件的StartType属性为"Automatic" 在private void ProjectInstaller_AfterInstall(object sender, InstallEventArgs e)事件中,添加以下代码: Process p = new Process(); p.StartInfo.FileName

C#编写的windows服务安装后启动提示“服务启动后又停止了”

使用C#编写的windows服务安装到服务器上行后进行启动时,总是提示“服务启动后又停止了”. 检查了服务逻辑是没问题,安装在开发本地也是正常,网上查了资料说是可能是服务没有注册,我检查了服务是正常注册,相对应的方法试很多了,但是都没有解决.后来无意中看了一个帖子说可以在windows的本地服务日志里边看报错信息.看到这个,我的问题就有办法处理了,查了一下保存信息,提示找不到“E:\\”,看到这里我就明白是怎么回事了,我的开发机有E盘,服务器上没有E盘,而我的日志文件默认写在E盘,所以服务启动后

AlarmManager、PendingIntent的使用附件Home监听十分钟后再度启动应用取消服务

AlarmManager.PendingIntent的使用\附件Home监听十分钟后再次启动应用取消服务 AlarmManager.PaddingIntent的使用\ \附件Home监听十分钟后再次启动应用取消服务 对应AlarmManage有一个AlarmManagerServie服务程 序,该服务程序才是正真提供闹铃服务的,它主要维护应用程序注册下来的各类闹铃并适时的设置即将触发的闹铃给闹铃设备(在系统中,linux实现的设备名 为”/dev/alarm”),并且一直监听闹铃设备,一旦有闹铃

MySQL在windows系统中修改datadir路径后无法启动问题,报错1067

windows server2008下如何更改MySQL数据库的目录的帖子已经很多了,这里简单介绍一个步骤,如果不成功请先查看其它帖子. 更改默认的mysql数据库目录 将 C:\Documents and Settings\All Users\Application Data\MySQL\MySQL Server 5.1\data 改到 D:\MysqlData 1. 建立文件夹 D:\MysqlData 2. 停止 mysql 服务,将 "C:\Documents and Settings\

zabbix agent端启动时报错:“错误1053:服务没有及时响应启动或控制请求”

按照前面文章的方法,又想加一台Windows服务器到zabbix监控,结果在最后一步,点击右键菜单"启动"时,却报错了. 我就是在zabbix agent端服务器的DOS窗口,执行"D:\zabbix_agents_2.4.4.yg\bin\win64>zabbix_agentd.exe -c D:\zabbix_agents_2.4.4.yg\conf\zabbix_agentd.win.conf -d"命令.(注意我的路径,并不一定照搬.) 里面的&quo

oracle各服务说明及cmd启动启动命令

成功安装Oracle 11g后,共有7个服务,一.这七个服务的含义分别为:1. Oracle ORCL VSS Writer Service:Oracle卷映射拷贝写入服务,VSS(Volume Shadow Copy Service)能够让存储基础设备(比如磁盘,阵列等)创建高保真的时间点映像,即映射拷贝(shadow copy).它可以在多卷或者单个卷上创建映射拷贝,同时不会影响到系统的系统能.(非必须启动)2. OracleDBConsoleorcl:Oracle数据库控制台服务,orcl

WAS集群系列(15):WAS集群服务的关闭与启动

***********************************************声明************************************************ 原创作品,出自 "深蓝的blog" 博客, 欢迎转载,转载时请务必注明出处(http://blog.csdn.net/huangyanlong),否则作者保留追究版权法律责任. 表述有错误之处,请您留言或邮件([email protected])指明,不胜感激. 原文链接:http://blo

Internet连接共享访问,依赖服务或组无法启动

问题与现象 在启用本地Internet连接共享给VMware的虚拟网卡时,出现了如下错误提示,导致无法启用(如图一示): Internet连接共享访问被启用时,出现了一个错误.依赖服务或组无法启动      图一 原因探讨 Internet连接共享依赖于 Internet Connection sharing(ICS)服务,只有该服务启动后才可以实现.一般来说当我们启用Internet连接共享时,系统会主动尝试启动该服务,但是当该服务被禁用或其依赖服务被禁用时,则系统无法使其自动启动,此时即会出

[转]监控windows服务,当服务停止后自动重启服务

近期花时间研究了一下windows和linux下某服务停了后自动重启的功能,在网上收集了些资料,并经过测试,在此整理一下.这里介绍的是windows服务的监控,是通过批处理来实现的.本例是监控windows的Computer Browser为例,每60秒检测一次(可根据实际需要调整间隔),当发现服务停止后自动重启.AutostartService.bat批处理文件内容如下 @echo off rem 定义循环间隔时间和监测的服务: set secs=60 set srvname="Compute