欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

MySQL数据库innodb启动失败无法重启的解决方法

程序员文章站 2023-12-18 12:11:04
问题介绍 电脑在使用过程中死机,重启后发现mysql没有启动成功,查看错误日志发现是innodb出现问题导致mysql启动失败。 错误日志 $ mys...

问题介绍

电脑在使用过程中死机,重启后发现mysql没有启动成功,查看错误日志发现是innodb出现问题导致mysql启动失败。

错误日志

$ mysql.server start
starting mysql
. error! the server quit without updating pid file (/usr/local/var/mysql/fdipzonedemacbook-air.local.pid).

22:08:37 mysqld_safe starting mysqld daemon with databases from /usr/local/var/mysql
2016-04-23 22:08:38 0 [warning] timestamp with implicit default value is deprecated. please use --explicit_defaults_for_timestamp server option (see documentation for more details).
2016-04-23 22:08:38 0 [note] /usr/local/cellar/mysql/5.6.24/bin/mysqld (mysqld 5.6.24) starting as process 3604 ...
2016-04-23 22:08:38 3604 [warning] setting lower_case_table_names=2 because file system for /usr/local/var/mysql/ is case insensitive
2016-04-23 22:08:38 3604 [note] plugin 'federated' is disabled.
2016-04-23 22:08:38 3604 [note] innodb: using atomics to ref count buffer pool pages
2016-04-23 22:08:38 3604 [note] innodb: the innodb memory heap is disabled
2016-04-23 22:08:38 3604 [note] innodb: mutexes and rw_locks use gcc atomic builtins
2016-04-23 22:08:38 3604 [note] innodb: memory barrier is not used
2016-04-23 22:08:38 3604 [note] innodb: compressed tables use zlib 1.2.3
2016-04-23 22:08:38 3604 [note] innodb: using cpu crc32 instructions
2016-04-23 22:08:38 3604 [note] innodb: initializing buffer pool, size = 128.0m
2016-04-23 22:08:38 3604 [note] innodb: completed initialization of buffer pool
2016-04-23 22:08:38 3604 [note] innodb: highest supported file format is barracuda.
2016-04-23 22:08:38 3604 [note] innodb: log scan progressed past the checkpoint lsn 68929933440
2016-04-23 22:08:38 3604 [note] innodb: database was not shutdown normally!
2016-04-23 22:08:38 3604 [note] innodb: starting crash recovery.
2016-04-23 22:08:38 3604 [note] innodb: reading tablespace information from the .ibd files...
2016-04-23 22:08:38 3604 [error] innodb: checksum mismatch in tablespace ./test_user/user_recommend_code#p#pmax.ibd (table test_user/user_recommend_code#p#pmax)
2016-04-23 22:08:38 3604 [note] innodb: page size:1024 pages to analyze:64
2016-04-23 22:08:38 3604 [note] innodb: page size: 1024, possible space_id count:0
2016-04-23 22:08:38 3604 [note] innodb: page size:2048 pages to analyze:48
2016-04-23 22:08:38 3604 [note] innodb: page size: 2048, possible space_id count:0
2016-04-23 22:08:38 3604 [note] innodb: page size:4096 pages to analyze:24
2016-04-23 22:08:38 3604 [note] innodb: page size: 4096, possible space_id count:0
2016-04-23 22:08:38 3604 [note] innodb: page size:8192 pages to analyze:12
2016-04-23 22:08:38 3604 [note] innodb: page size: 8192, possible space_id count:0
2016-04-23 22:08:38 3604 [note] innodb: page size:16384 pages to analyze:6
2016-04-23 22:08:38 3604 [note] innodb: valid: space:2947354 page_no:3 page_size:16384
2016-04-23 22:08:38 3604 [note] innodb: page size: 16384, possible space_id count:1
2016-04-23 22:08:38 3604 [note] innodb: space_id:2947354, number of pages matched: 1/1 (16384)
2016-04-23 22:08:38 3604 [note] innodb: chosen space:2947354

2016-04-23 22:08:38 3604 [note] innodb: restoring page 0 of tablespace 2947354
2016-04-23 22:08:38 3604 [warning] innodb: doublewrite does not have page_no=0 of space: 2947354
2016-04-23 22:08:38 7fff79b9e300 innodb: operating system error number 2 in a file operation.
innodb: the error means the system cannot find the path specified.
innodb: if you are installing innodb, remember that you must create
innodb: directories yourself, innodb does not create them.
innodb: error: could not open single-table tablespace file ./test_user/user_recommend_code#p#pmax.ibd
innodb: we do not continue the crash recovery, because the table may become
innodb: corrupt if we cannot apply the log records in the innodb log to it.
innodb: to fix the problem and start mysqld:
innodb: 1) if there is a permission problem in the file and mysqld cannot
innodb: open the file, you should modify the permissions.
innodb: 2) if the table is not needed, or you can restore it from a backup,
innodb: then you can remove the .ibd file, and innodb will do a normal
innodb: crash recovery and ignore that table.
innodb: 3) if the file system or the disk is broken, and you cannot remove
innodb: the .ibd file, you can set innodb_force_recovery > 0 in my.cnf
innodb: and force innodb to continue crash recovery here.

解决方法

1.如果数据不重要或已经有备份,只需要恢复mysql启动

进入mysql目录,一般是: /usr/local/var/mysql/

删除ib_logfile*

删除ibdata*

删除所有数据库物理目录(例如数据库为test_db,则执行rm -rf test_db

重启动mysql

重新建立数据库或使用备份覆盖

2.如果数据很重要且没有备份

可以使用innodb_force_recovery参数,使mysqld跳过恢复步骤,启动mysqld,将数据导出然后重建数据库。

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

     1、(srv_force_ignore_corrupt):忽略检查到的corrupt页。

     2、(srv_force_no_background):阻止主线程的运行,如主线程需要执行full purge操作,会导致crash。

     3、(srv_force_no_trx_undo):不执行事务回滚操作。

     4、(srv_force_no_ibuf_merge):不执行插入缓冲的合并操作。

     5、(srv_force_no_undo_log_scan):不查看重做日志,innodb存储引擎会将未提交的事务视为已提交。

     6、(srv_force_no_log_redo):不执行前滚的操作。

在my.cnf(windows是my.ini)中加入

innodb_force_recovery = 6 
innodb_purge_thread = 0

重启mysql

这时只可以执行select,create,drop操作,但不能执行insert,update,delete操作

执行逻辑导出,完成后将innodb_force_recovery=0innodb_purge_threads=1,然后重建数据库,最后把导出的数据重新导入

总结

以上就是这篇文章的全部内容,希望能对大家学习或者使用mysql的时候有所帮助,如果有疑问大家可以留言交流,谢谢大家对的支持。

上一篇:

下一篇: