当innodb启用时,Mysql无法启动

时间:2015-03-24 17:24:35

标签: mysql centos innodb crash-dumps

我正在使用Centos 5和mysql版本5.5.30。一切都很好,直到突然关机。

它崩溃了mysql并在正常启动时收到以下错误(在mysql错误日志文件中)。如果我禁用innodb(来自my.cnf),它启动mysql没有任何问题但只支持myisam。

150324 22:42:09 mysqld_safe mysqld from pid file /var/run/mysqld/mysqld.pid ended
150324 22:42:10 mysqld_safe Starting mysqld daemon with databases from /var/lib/mysql
150324 22:42:10 [Note] libgovernor.so not found
150324 22:42:10 [Warning] option 'max_allowed_packet': unsigned value 94371840000 adjusted to 1073741824
150324 22:42:10 [Note] Plugin 'FEDERATED' is disabled.
150324 22:42:10 InnoDB: The InnoDB memory heap is disabled
150324 22:42:10 InnoDB: Mutexes and rw_locks use GCC atomic builtins
150324 22:42:10 InnoDB: Compressed tables use zlib 1.2.3
150324 22:42:10 InnoDB: Using Linux native AIO
150324 22:42:10 InnoDB: Initializing buffer pool, size = 128.0M
150324 22:42:10 InnoDB: Completed initialization of buffer pool
150324 22:42:10 InnoDB: highest supported file format is Barracuda.
InnoDB: Log scan progressed past the checkpoint lsn 254624508054
150324 22:42:10  InnoDB: Database was not shut down normally!
InnoDB: Starting crash recovery.
InnoDB: Reading tablespace information from the .ibd files...
InnoDB: Restoring possible half-written data pages from the doublewrite
InnoDB: buffer...
InnoDB: Doing recovery: scanned up to log sequence number 254625886208
150324 22:42:56  InnoDB: Error: page 4 log sequence number 254626313846
InnoDB: is in the future! Current system log sequence number 254625886157.
InnoDB: Your database may be corrupt or you may have copied the InnoDB
InnoDB: tablespace but not the InnoDB log files. See
InnoDB: http://dev.mysql.com/doc/refman/5.5/en/forcing-innodb-recovery.html
InnoDB: for more information.
150324 22:42:56  InnoDB: Error: page 5 log sequence number 254631317961
InnoDB: is in the future! Current system log sequence number 254625886157.
InnoDB: Your database may be corrupt or you may have copied the InnoDB
InnoDB: tablespace but not the InnoDB log files. See
InnoDB: http://dev.mysql.com/doc/refman/5.5/en/forcing-innodb-recovery.html
InnoDB: for more information.
150324 22:42:56  InnoDB: Error: page 884737 log sequence number 254626106580
InnoDB: is in the future! Current system log sequence number 254625886157.
InnoDB: Your database may be corrupt or you may have copied the InnoDB
InnoDB: tablespace but not the InnoDB log files. See
InnoDB: http://dev.mysql.com/doc/refman/5.5/en/forcing-innodb-recovery.html
InnoDB: for more information.
150324 22:42:56  InnoDB: Error: page 901121 log sequence number 254628999816
InnoDB: is in the future! Current system log sequence number 254625886157.
InnoDB: Your database may be corrupt or you may have copied the InnoDB
InnoDB: tablespace but not the InnoDB log files. See
InnoDB: http://dev.mysql.com/doc/refman/5.5/en/forcing-innodb-recovery.html
InnoDB: for more information.
150324 22:42:57  InnoDB: Error: page 893070 log sequence number 254626307058
InnoDB: is in the future! Current system log sequence number 254625886157.
InnoDB: Your database may be corrupt or you may have copied the InnoDB
InnoDB: tablespace but not the InnoDB log files. See
InnoDB: http://dev.mysql.com/doc/refman/5.5/en/forcing-innodb-recovery.html
InnoDB: for more information.
150324 22:42:57  InnoDB: Error: page 900895 log sequence number 254626761099
InnoDB: is in the future! Current system log sequence number 254625886157.
InnoDB: Your database may be corrupt or you may have copied the InnoDB
InnoDB: tablespace but not the InnoDB log files. See
InnoDB: http://dev.mysql.com/doc/refman/5.5/en/forcing-innodb-recovery.html
InnoDB: for more information.
150324 22:42:58  InnoDB: Error: page 890447 log sequence number 254627421913
InnoDB: is in the future! Current system log sequence number 254625886157.
InnoDB: Your database may be corrupt or you may have copied the InnoDB
InnoDB: tablespace but not the InnoDB log files. See
InnoDB: http://dev.mysql.com/doc/refman/5.5/en/forcing-innodb-recovery.html
InnoDB: for more information.
InnoDB: Error: trying to access page number 4294054783 in space 0,
InnoDB: space name ./ibdata1,
InnoDB: which is outside the tablespace bounds.
InnoDB: Byte offset 0, len 16384, i/o type 10.
InnoDB: If you get this error at mysqld startup, please check that
InnoDB: your my.cnf matches the ibdata files that you have in the
InnoDB: MySQL server.
150324 22:42:58  InnoDB: Assertion failure in thread 47830133103776 in file fil0fil.c line 4493
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.5/en/forcing-innodb-recovery.html
InnoDB: about forcing recovery.
17:12:58 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.

key_buffer_size=8388608
read_buffer_size=131072
max_used_connections=0
max_threads=151
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 = 338533 K  bytes of memory
Hope that's ok; if not, decrease some variables in the equation.

Thread pointer: 0x0
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 = 0 thread_stack 0x40000
/usr/libexec/mysqld(my_print_stacktrace+0x2e)[0x7b865e]
/usr/libexec/mysqld(handle_fatal_signal+0x3e2)[0x6840d2]
/lib64/libpthread.so.0[0x305300eca0]
/lib64/libc.so.6(gsignal+0x35)[0x30520302c5]
/lib64/libc.so.6(abort+0x110)[0x3052031d70]
/usr/libexec/mysqld[0x86b338]
/usr/libexec/mysqld[0x84ab51]
/usr/libexec/mysqld[0x84b3ca]
/usr/libexec/mysqld[0x83b62b]
/usr/libexec/mysqld[0x80d3b4]
/usr/libexec/mysqld[0x80d5dc]
/usr/libexec/mysqld[0x80efae]
/usr/libexec/mysqld[0x7fcf88]
/usr/libexec/mysqld[0x7ca61a]
/usr/libexec/mysqld(_Z24ha_initialize_handlertonP13st_plugin_int+0x47)[0x685ff7]
/usr/libexec/mysqld[0x58304a]
/usr/libexec/mysqld(_Z11plugin_initPiPPci+0xb61)[0x586471]
/usr/libexec/mysqld[0x507c04]
/usr/libexec/mysqld(_Z11mysqld_mainiPPc+0x868)[0x50ac28]
/lib64/libc.so.6(__libc_start_main+0xf4)[0x305201d9c4]
/usr/libexec/mysqld[0x501319]
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.
150324 22:42:58 mysqld_safe mysqld from pid file /var/run/mysqld/mysqld.pid ended

为了恢复innodb数据库,需要让mysql使用innodb支持。我如何使这个工作?

1 个答案:

答案 0 :(得分:0)

您的数据显得非常糟糕。请考虑以下

  1. 首先完整备份数据,如 innodb_force_recover实际上可以破坏数据
  2. 更新my.cnf以使数据库不可连接,一般的想法是确保没有应用程序运行可能导致服务器崩溃的查询。如果您使用TCP,可以尝试设置port = 3307,但如果应用程序连接到' localhost'使用unix你可能需要阻止它们。
  3. 尝试从1到6
  4. 连续增加innodb_force_recovery的值
  5. 一旦开始创建一个mysqldump,总是在最后检查以查看转储是否实际完成而不是因为服务器崩溃而停止。如果服务器在某些表上不断崩溃,您可能需要尝试逐个转储每个表。
  6. 重新初始化新数据目录并重新加载sqldump。始终移动/复制旧文件,不要删除,您可能需要返回它们。
  7. 如果你无法使用它,请尝试下载最新的MySQL版本,因为它可能有修复的错误,可以阻止它崩溃损坏的数据。这比你想象的更有可能,值得一试。

    最后,如果您真的被软管,可能会使用InnoDB恢复软件,但使用起来非常复杂。