mysql innodb文件ibdata1損壞導致mysql無法啟動


問題描述

1 mysql數據庫5.6無法正常啟動

2 直接復制替換innodb的frm和idb文件來新增數據表導致的問題

3 innodb文件ibdata1,ib_logfile0,ib_logfile1損壞,數據不一致

4 沒有sql備份,無法正常登陸和導出當天數據

注意事項

innodb的表不能直接復制替換frm和idb文件,而是使用工具正常導入導出,myisam表可以直接復制替換文件

解決方法

1 開啟mysql錯誤日志,觀察日志來判斷數據庫什么問題(此次問題比較清楚,innodb損壞,ibdata1損壞導致)

2 innodb_force_recovery (0-6級別) 此次使用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):不執行前滾的操作。

   當設置innodb_force_recovery大於0后,可以對標進行select、create、drop操作,但insert、update或者delete這類操作是不允許的

3 innodb_force_recovery=6 正常啟動mysql后,無法使用navicat工具導出數據量大的的數據庫,正常工具導出還會導致數據庫崩潰(此處沒有最近的sql備份,只有損壞后數據庫目錄直接備份,但是ibdata1損壞,所以這個備份沒有意義,所以此處還是要導出正常的sql備份,用來恢復當天最近的數據)

4 嘗試使用innochecksum  -f ibdata1工具來修復ibdata損壞,但是沒有效果

5 使用mysqldump命令進行導出(此處遇到問題,和原來業務的數據編碼問題,重新創建mysql環境,數據庫創建問題,表創建問題,索引創建問題)

   1 數據編碼問題,此處並不是普通的中文亂碼問題,而是編碼: JUSTEP154053; 提示: KSQL語法錯誤,源程序服務tomcat啟動問題

      這個編碼問題分為兩步 :tomcat啟動報錯,數據庫和表的編碼問題,tomcat正常啟動后里的程序頁面報錯,這是數據的編碼問題

   2 此處遇到數據庫,表創建,數據問題,手動創建新的utf-8,但是不生效,雖然都和原環境一直,但還是會出現編碼報錯,業務有問題

   3 解決無論導入和導出都需要加上--default-character-set=utf8(防止編碼: JUSTEP154053,防止mysql錯誤導入ERROR 1064 (42000))

   4 此次為了快速解決,使用了原來2018-04月的備份數據庫,使用原來數據庫的庫和表結構,清空數據

   5 導出來加-t 只導出數據,不導出表結構

6 解決步驟

   1 導出三個庫所需的數據 --default-character-set=utf8 只導出數據,不導結構

   2 確保導出備份數據可以使用后,刪除原有數據庫文件

   3 備份MySQL數據目錄下的ib_logfile0、ib_logfile1、ibdata1三個文件,然后將這三個文件刪除

   4 innodb_force_recovery = 0 重新啟動mysql 重建 ib_logfile0、ib_logfile1、ibdata1 此時所有數據表都無法打開

   5 重新導入數據文件 --default-character-set=utf8 導入數據

mysql數據恢復通過frm和idb文件(此處沒有使用)

記錄參考https://blog.csdn.net/Sonny_alice/article/details/80198200

整個恢復過程其實可以總結為下面幾步:

一:無表數據結構

(1):恢復表結構

(2):復制出來創建表的sql語句

(3):恢復表數據(在恢復表數據的時候,首先需要解除當前創建的表與默認生成的.ibd文件間的關系,接着將要恢復數據表的.ibd文件與當前創建的表聯系起來即可)

(4):alter table songlyric discard tablespace;alter table songlyric import tablespace;


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM