MySQL數(shù)據(jù)庫(kù)innodb啟動(dòng)失敗無(wú)法重啟的解決方法
問(wèn)題介紹
電腦在使用過(guò)程中死機(jī),重啟后發(fā)現(xiàn)mysql沒(méi)有啟動(dòng)成功,查看錯(cuò)誤日志發(fā)現(xiàn)是innodb出現(xiàn)問(wèn)題導(dǎo)致mysql啟動(dòng)失敗。
錯(cuò)誤日志
$ 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.如果數(shù)據(jù)不重要或已經(jīng)有備份,只需要恢復(fù)mysql啟動(dòng)
進(jìn)入mysql目錄,一般是: /usr/local/var/mysql/
刪除ib_logfile*
刪除ibdata*
刪除所有數(shù)據(jù)庫(kù)物理目錄(例如數(shù)據(jù)庫(kù)為test_db,則執(zhí)行rm -rf test_db)
重啟動(dòng)mysql
重新建立數(shù)據(jù)庫(kù)或使用備份覆蓋
2.如果數(shù)據(jù)很重要且沒(méi)有備份
可以使用innodb_force_recovery參數(shù),使mysqld跳過(guò)恢復(fù)步驟,啟動(dòng)mysqld,將數(shù)據(jù)導(dǎo)出然后重建數(shù)據(jù)庫(kù)。
innodb_force_recovery 可以設(shè)置為1-6,大的數(shù)字包含前面所有數(shù)字的影響
1、(SRV_FORCE_IGNORE_CORRUPT):忽略檢查到的corrupt頁(yè)。
2、(SRV_FORCE_NO_BACKGROUND):阻止主線程的運(yùn)行,如主線程需要執(zhí)行full purge操作,會(huì)導(dǎo)致crash。
3、(SRV_FORCE_NO_TRX_UNDO):不執(zhí)行事務(wù)回滾操作。
4、(SRV_FORCE_NO_IBUF_MERGE):不執(zhí)行插入緩沖的合并操作。
5、(SRV_FORCE_NO_UNDO_LOG_SCAN):不查看重做日志,InnoDB存儲(chǔ)引擎會(huì)將未提交的事務(wù)視為已提交。
6、(SRV_FORCE_NO_LOG_REDO):不執(zhí)行前滾的操作。
在my.cnf(windows是my.ini)中加入
innodb_force_recovery = 6 innodb_purge_thread = 0
重啟mysql
這時(shí)只可以執(zhí)行select,create,drop操作,但不能執(zhí)行insert,update,delete操作
執(zhí)行邏輯導(dǎo)出,完成后將innodb_force_recovery=0,innodb_purge_threads=1,然后重建數(shù)據(jù)庫(kù),最后把導(dǎo)出的數(shù)據(jù)重新導(dǎo)入
總結(jié)
以上就是這篇文章的全部?jī)?nèi)容,希望能對(duì)大家學(xué)習(xí)或者使用mysql的時(shí)候有所幫助,如果有疑問(wèn)大家可以留言交流,謝謝大家對(duì)腳本之家的支持。
相關(guān)文章
DB為何大量出現(xiàn)select @@session.tx_read_only 詳解
這篇文章主要給大家介紹了關(guān)于DB為何大量出現(xiàn)select @@session.tx_read_only 的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧。2018-04-04
MySQL中Decimal類(lèi)型和Float Double的區(qū)別(詳解)
下面小編就為大家?guī)?lái)一篇MySQL中Decimal類(lèi)型和Float Double的區(qū)別(詳解)。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-03-03
MySQL中UPDATE與DELETE語(yǔ)句的使用教程
這篇文章主要介紹了MySQL中UPDATE與DELETE語(yǔ)句的使用教程,是MySQL入門(mén)學(xué)習(xí)中的基礎(chǔ)知識(shí),需要的朋友可以參考下2015-12-12
MySql統(tǒng)計(jì)函數(shù)COUNT的具體使用詳解
本文主要介紹了MySql統(tǒng)計(jì)函數(shù)COUNT的具體使用詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2022-08-08
MySQL存儲(chǔ)引擎簡(jiǎn)介及MyISAM和InnoDB的區(qū)別
這篇文章主要介紹了MySQL存儲(chǔ)引擎簡(jiǎn)介及MyISAM和InnoDB的區(qū)別,重點(diǎn)介紹了MyISAM 和 InnoDB的區(qū)別,需要的朋友可以參考下2014-05-05

