mysql 1067 進程意外終止的故障修復


  公司采用的是windows server 2008+mysql,由於種種原因,mysql沒有定期備份,也為此次故障埋下了隱患。

  8月某天,突然停電,悲劇的機房UPS有故障沒有工作,所有服務器直接斷電,頓時有種不祥的預感。來電后幸好所有服務器都正常啟動了,不過還是悲劇了,mysql無法啟動,服務一啟動就報錯:mysql 1067 進程意外終止。

        

  查看了系統日志,windows日志並沒有給出有用的信息,只是顯示

    錯誤應用程序名稱: mysqld-nt.exe,版本: 0.0.0.0,時間戳: 0x4ad764a7
    錯誤模塊名稱: mysqld-nt.exe,版本: 0.0.0.0,時間戳: 0x4ad764a7

  通過網上資料查詢,多半是innodb引擎日志問題所致,具體處理步驟如下:

  一、在mysql安裝路徑下修改my.ini配置文件,在尾部添加innodb_force_recovery = 6,此選項可以讓mysql啟動時跳過修復。對於次選項的詳細解釋如下:

    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):不執行前滾的操作。
     注意
       a 當設置參數值大於0后,可以對表進行select,create,drop操作,但insert,update或者delete這類操作是不允許的。
       b 當innodb_purge_threads 和 innodb_force_recovery一起設置會出現一種loop現象,故不建議同時使用,也會是mysql無法啟動。

  二、再次啟動mysql服務,應該就可以正常啟動,使用mysqldump備份數據庫:

    >mysqldump -uUSERNAME -pPASSWORD DB_NAME > E:/DBBACK.SQL

    如果備份時候有表數據損壞,會有兩種提示:

    1、Incorrect file format ,表格式不正確,只能采用repair語句恢復表結構:

      repair table TB_NAME use_frm;(貌似這種只支持myisam存儲引擎)

    2、Counldn't execute 'show create table `userarenalog`':Table ...is marked as crashed and should be repaired(145),同樣可以采用repair修復損壞的表:

      repair table TB_NAME

  三、卸載並刪除原有mysql數據,重新安裝。

  四、重新創建數據庫並恢復數據:

    mysql>create database DB_NAME;//創建數據庫

    mysql>use DB_NAME;//選中數據庫

    mysql>source e:/DBBACK.SQL//恢復數據庫

  其實修復過程中間還有諸多彎路,最終這個才是最簡單迅速的,希望能給各位借鑒。

    


免責聲明!

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



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