完美解決mysql啟動后隨即關(guān)閉的問題(ibdata1文件損壞導(dǎo)致)
機房一臺服務(wù)器上的mysql運行一段時間了,突然出現(xiàn)了一個很奇怪的現(xiàn)象:重啟后無法恢復(fù)了!準確情況是:啟動mysql后隨即就又關(guān)閉了。
查看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.
分析日志后發(fā)現(xiàn),數(shù)據(jù)庫無法重啟的原因是因為ibdata1文件損壞,重啟后無法正?;謴?fù)。
解決辦法:
需要跳過恢復(fù)步驟,修改my.cnf文件,在my.cnf中的[mysqld]中添加:
innodb_force_recovery = 6
innodb_purge_threads = 1
解釋:
innodb_force_recovery可以設(shè)置為1-6,大的數(shù)字包含前面所有數(shù)字的影響。
具體數(shù)字對應(yīng)的含義:
1-----(SRVFORCEIGNORECORRUPT):忽略檢查到的corrupt頁。
2-----(SRVFORCENOBACKGROUND):阻止主線程的運行,如主線程需要執(zhí)行full purge操作,會導(dǎo)致crash。
3-----(SRVFORCENOTRXUNDO):不執(zhí)行事務(wù)回滾操作。
4-----(SRVFORCENOIBUFMERGE):不執(zhí)行插入緩沖的合并操作。
5-----(SRVFORCENOUNDOLOGSCAN):不查看重做日志,InnoDB存儲引擎會將未提交的事務(wù)視為已提交。
6-----(SRVFORCENOLOG_REDO):不執(zhí)行前滾的操作。
再次啟動mysql就ok了~
如果還無法啟動,則需要刪除數(shù)據(jù)目錄datafile下的 ibdata1,ib_logfile*等文件。
啟動后導(dǎo)出MySQL數(shù)據(jù)庫,重新恢復(fù)即可。
以上這篇完美解決mysql啟動后隨即關(guān)閉的問題(ibdata1文件損壞導(dǎo)致)就是小編分享給大家的全部內(nèi)容了,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
MySQL中實現(xiàn)多表查詢的操作方法(配sql+實操圖+案例鞏固 通俗易懂版)
本文主要講解了MySQL中的多表查詢,包括子查詢、笛卡爾積、自連接、多表查詢的實現(xiàn)方法以及多列子查詢等,通過實際例子和操作,幫助讀者理解如何合并多個表的數(shù)據(jù),并進行復(fù)雜的查詢操作,感興趣的朋友一起看看吧2025-03-03
MySql用DATE_FORMAT截取DateTime字段的日期值
MySql截取DateTime字段的日期值可以使用DATE_FORMAT來格式化,使用方法如下2014-08-08
mysql清空表數(shù)據(jù)的兩種方式和區(qū)別解析
這篇文章主要介紹了mysql清空表數(shù)據(jù)的兩種方式和區(qū)別,本文通過文字實例代碼相結(jié)合給大家介紹的非常詳細,具有一定的參考借鑒價值,需要的朋友可以參考下2019-05-05
MySQL索引優(yōu)化之不適合構(gòu)建索引及索引失效的幾種情況詳解
索引是有雙面性的,合理的建立索引可以提高數(shù)據(jù)庫的效率。但是如果沒有合理的構(gòu)建索引和使用索引,可能會導(dǎo)致索引失效或者影響數(shù)據(jù)庫性能,本文主要討論的是索引失效以及不適合建立索引的場景2022-07-07

