mysql innodb 異常修復過程實例

這篇文章主要介紹了mysql innodb 異常修復經驗分享,需要的朋友可以參考下

一套測試用的mysql庫,之前用的centos6默認源里的mysql 5.1.71的版本 。后來想試用下Percona server 5.7,由于這套庫里沒有什么重要數據 。所以操作前也未進行備份,配置好源后,直接就進行了安裝。數據文件也存放在默認位置,安裝完成后,直接啟動mysql,發現啟動失敗,發現無法啟動正常啟動。

一、回退重新裝mysql

為避免再從其他地方導入這個數據的麻煩,先對當前庫的數據庫文件做了個備份(/var/lib/mysql/位置)。接下來將Percona server 5.7包進行了卸載,重新安裝原先老的5.1.71的包,啟動mysql服務,提示Unknown/unsupported table type: innodb,無法正常啟動。

110509?12:04:27?InnoDB:?Initializing?buffer?pool,?size?=?384.0M  110509?12:04:27?InnoDB:?Completed?initialization?of?buffer?pool  InnoDB:?Error:?log?file?./ib_logfile0?is?of?different?size?0?5242880?bytes  InnoDB:?than?specified?in?the?.cnf?file?0?157286400?bytes!  110509?12:04:27?[ERROR]?Plugin?'InnoDB'?init?function?returned?error.  110509?12:04:27?[ERROR]?Plugin?'InnoDB'?registration?as?a?STORAGE?ENGINE?failed.  110509?12:04:27?[ERROR]?Unknown/unsupported?table?type:?innodb  110509?12:04:27?[ERROR]?Aborting  110509?12:04:27?[Note]?/usr/sbin/mysqld:?Shutdown?complete

刪除/var/lib/mysql/目錄,重新啟動數據庫服務,并初始化,發現正常,show engines能發現有innodb引擎。再將數據庫停掉,將之前備份的/var/lib/mysql/目錄的內容覆蓋當前位置的內容,重啟。又發現不能進行啟動,報錯內容和剛剛一樣。

/var/lib/mysql目錄內容的結構如下:

-rw-rw----?1?mysql?mysql?10485760?2月??26?18:10?ibdata1  -rw-rw----?1?mysql?mysql?5242880?2月??26?18:10?ib_logfile0  -rw-rw----?1?mysql?mysql?5242880?2月??26?17:20?ib_logfile1  drwx------?2?mysql?mysql???4096?2月??26?17:20?mysql  drwx------?2?mysql?mysql???4096?2月?26?17:24?wiki

wiki目錄是測試數據的庫,ibdata1文件為數據文件,ib開頭的兩個文件為日志文件,mysql 目錄下為系統庫相關的東西 。再次使用初始化的數據,并將wiki目錄和ibdata1文件覆蓋到/var/lib/mysql 目錄下,可以正常啟動,也可以正常登錄。

二、innodb模塊重裝

不過在通過mysqldump備份時,又提示unknow table engine “Innodb” 。登錄后,查看當前所有的引擎類型,發現其中果然不存在innodb類型:

mysql innodb 異常修復過程實例

通過alter命令修改其中一個表的類型為MyISAM ,發現仍然報錯。

mysql innodb 異常修復過程實例

通過 find 查找發現/usr/lib64/mysql/plugin/目錄下有ha_innodb_plugin.so文件。印象中mysql5以后的版本支持在線插件安裝 。通過下面查看確認,果然支持:

mysql innodb 異常修復過程實例

使用如下命令加載時,發現不成功:

install?plugin?innodb?soname?'ha_innodb.so';

三、備份

在/etc/my.cnf中增加如下配置:

plugin-load=innodb=ha_innodb_plugin.so  plugin_dir=/usr/lib64/mysql/plugin/  default-storage-engine=InnoDB

發現仍啟動失敗。查看mysql-error.log發現有如下內容:

InnoDB:?Database?page?corruption?on?disk?or?a?failed  InnoDB:?file?read?of?page?7.  InnoDB:?You?may?have?to?recover?from?a?backup.  InnoDB:?It?is?also?possible?that?your?operating  InnoDB:?system?has?corrupted?its?own?file?cache  InnoDB:?and?rebooting?your?computer?removes?the  InnoDB:?error.  InnoDB:?If?the?corrupt?page?is?an?index?page  InnoDB:?you?can?also?try?to?fix?the?corruption  InnoDB:?by?dumping,?dropping,?and?reimporting  InnoDB:?the?corrupt?table.?You?can?use?CHECK  InnoDB:?TABLE?to?scan?your?table?for?corruption.  InnoDB:?See?also?http://dev.mysql.com/doc/refman/5.1/en/forcing-innodb-recovery.html

打開forcing-innodb-recovery官方頁面,發現可以通過指定innodb_force_recovery參數,進行強制啟動和恢復。在/etc/my.cnf中增加如下內容:

innodb_force_recovery=6

重新啟動成功了。通過mysqldump備份也沒有問題,將備份數據導入其他主機發現也正常可以測試。

這下就好搞了,將mysql徹底刪除,重新安裝Percona server 5.7,安裝完后,建庫,還原數據,程序重新連接,一切OK。

總結:

由于mysql innodb數據文件的特性,可以在出現問題,無法正常啟動時,先將./ib_logfile0 和 ./ib_logfile1 兩個日志文件先移走,再啟動,如果還不成功,可以用innodb_force_recovery參數進行強制恢復。除此之外,日志也很重啟,有問題先看日志。

? 版權聲明
THE END
喜歡就支持一下吧
點贊9 分享