mysql innodb崩溃断言

自从星期五以来,我的innodb数据库有一些非常大的麻烦。 每当我对大约22GB的特定表执行一些操作时,mysql服务器崩溃。 插入数据工作,其他表上的所有其他操作也正常工作。

根据'innochecksum'所有页面都可以。 我已经尝试使用force_innodb_recovery <= 4,但服务器过去了,当在第6199219行的表中转储表时,我得到一个丢失的连接错误。 即使在一些正常的查询中也会发生崩溃。 行号总是一样的。

以下是我的错误日志关于崩溃的内容:

 sr @ kirk:〜$ sudo mysqld --console --verbose
 150215 19:20:15 [注]插件'FEDERATED'被禁用。
 150215 19:20:15 InnoDB:InnoDB内存堆被禁用
 150215 19:20:15 InnoDB:Mutexes和rw_locks使用GCCprimefacesbuiltins
 150215 19:20:15 InnoDB:压缩表使用zlib 1.2.3.4
 InnoDB:初始化缓冲池,大小= 20.0G
 150215 19:20:18 InnoDB:完成缓冲池的初始化
 150215 19:20:18 InnoDB:最高支持的文件格式是梭子鱼。
 150215 19:20:22 InnoDB:等待后台线程启动
 150215 19:20:23 InnoDB:5.5.41开始; 日志序号80382959696
 150215 19:20:23 [注]服务器主机名(bind-address):'0.0.0.0'; 港口:3306
 150215 19:20:23 [注]  - '0.0.0.0'parsing为'0.0.0.0';
 150215 19:20:23 [注]在IP上创build的服务器套接字:“0.0.0.0”。
 150215 19:20:23 [Warning] --relay-log和--relay-log-index都没有被使用; 所以当这个MySQL服务器充当奴隶并且改变他的主机名时复制可能会中断! 请使用'--relay-log = mysqld-relay-bin'来避免这个问题。
 150215 19:20:23 [错误]服务器ID未设置,将无法启动从站
 150215 19:20:23 [错误]无法创build从属线程
 150215 19:20:23 [Note] Event Scheduler:加载了0个事件
 150215 19:20:23 [注意] mysqld:准备连接。
版本:'5.5.41-0ubuntu0.12.04.1'socket:'/var/run/mysqld/mysqld.sock'port:3306(Ubuntu)
 150215 19:22:28 InnoDB:在文件btr0pcur.c中的线程140612062639872中的断言失败428行
 InnoDB:断言失败:page_is_comp(next_page)== page_is_comp(page)
 InnoDB:我们故意生成一个内存陷阱。
 InnoDB:提交详细的错误报告到http://bugs.mysql.com。
 InnoDB:如果你重复断言失败或崩溃,甚至
 InnoDB:在mysqld启动之后,可能会有
 InnoDB:InnoDB表空间中的损坏。 请参阅
 InnoDB:http://dev.mysql.com/doc/refman/5.5/en/forcing-innodb-recovery.html
 InnoDB:关于强制恢复。
 18:22:28 UTC  -  mysqld得到信号6;
这可能是因为你遇到了一个错误。 这个二进制也有可能
或者其中一个链接的图书馆是腐败的,build造不当的,
或错误configuration。 这个错误也可能是由于硬件故障造成的。
我们将尽我们所能收集一些有希望帮助的信息
诊断问题,但由于我们已经坠毁,
一定是错误的,这可能会失败。

的key_buffer_size = 16777216
 read_buffer_size = 131072
 max_used_connections = 142
 max_threads的= 151
 THREAD_COUNT = 142
 connection_count = 142
有可能mysqld最多可以使用
 key_buffer_size +(read_buffer_size + sort_buffer_size)* max_threads = 1274444 K字节的内存
希望没关系; 如果不是,则减less方程中的一些variables。

线程指针:0x7fe83528e930
试图回溯。 您可以使用以下信息来了解
 mysqld死了。 如果在这之后你看不到任何消息,那么事情就会发生
非常错误
 stack_bottom = 7fe2cc0b6e60 thread_stack 0x30000
的mysqld(my_print_stacktrace + 0x29)[0x7fe814a2bd79]
的mysqld(handle_fatal_signal + 0x483)[0x7fe8148f0923]
 /lib/x86_64-linux-gnu/libpthread.so.0(+0xfcb0)[0x7fe81361fcb0]
 /lib/x86_64-linux-gnu/libc.so.6(gsignal+0x35)[0x7fe812c860d5]
 /lib/x86_64-linux-gnu/libc.so.6(abort+0x17b)[0x7fe812c8983b]
 mysqld的(+ 0x63ddbd)[0x7fe814b0ddbd]
 mysqld的(+ 0x5f7eee)[0x7fe814ac7eee]
 mysqld的(+ 0x5dae0c)[0x7fe814aaae0c]
的mysqld(_Z13rr_sequentialP11READ_RECORD + 0x19)[0x7fe8149c4e59]
的mysqld(_Z10sub_selectP4JOINP13st_join_tableb + 0x71)[0x7fe8147f5bf1]
 mysqld的(+ 0x336914)[0x7fe814806914]
的mysqld(_ZN4JOIN4execEv + 0xc03)[0x7fe814816563]
的mysqld(_Z12mysql_selectP3THDPPP4ItemP10TABLE_LISTjR4ListIS1_ES2_jP8st_orderSB_S2_SB_yP13select_resultP18st_select_lex_unitP13st_select_lex +量0x130)[0x7fe814811cb0]
的mysqld(_Z13handle_selectP3THDP3LEXP13select_resultm + 0x17c)[0x7fe814817cdc]
 mysqld的(+ 0x2fb9b4)[0x7fe8147cb9b4]
的mysqld(_Z21mysql_execute_commandP3THD + 0x16a6)[0x7fe8147d3a06]
的mysqld(_Z11mysql_parseP3THDPcjP12Parser_state + 0x10f)[0x7fe8147d8c1f]
的mysqld(_Z16dispatch_command19enum_server_commandP3THDPcj + 0x1f26)[0x7fe8147dac16]
的mysqld(_Z24do_handle_one_connectionP3THD + 0x1bd)[0x7fe81488198d]
的mysqld(handle_one_connection +为0x50)[0x7fe8148819f0]
 /lib/x86_64-linux-gnu/libpthread.so.0(+0x7e9a)[0x7fe813617e9a]
 /lib/x86_64-linux-gnu/libc.so.6(clone+0x6d)[0x7fe812d442ed]

试图得到一些变数。
有些指针可能无效,导致转储中止。
查询(7fe268004b60):是一个无效的指针
连接ID(线程ID):14
状态:NOT_KILLED

在http://dev.mysql.com/doc/mysql/en/crashing.html手册页包含
信息应该可以帮助你找出造成这次事故的原因。

我的系统是32GB RAM的Ubuntu 12.04

你有什么想法,我可以尝试解决这个问题? 我做了我所有数据的备份。

先进的和非常感谢我的可怜的英语。

这是腐败。

查看失败的断言 – page_is_comp(next_page) == page_is_comp(page) 。 它会检查下一页是否与当前格式相同(紧凑或冗余)。

InnoDB索引可以是任何一种格式,但是混合是不可能的。

因此,继续innodb_force_recovery = 1,2,3,4,5,6(尝试每个值,直到MySQL启动),转储数据库,从头开始重新创buildInnoDB表空间。

如果MySQL甚至没有启动innodb_force_recovery = 6或崩溃,当你查询(顺便说一句,添加选项–skip-lock-tables到mysqldump,它有时帮助),然后检查出https://twindb.com/recover-corrupt -mysql数据库/