mysql 數據庫表錯誤 修復 總結

mysql 數據庫壞表修復

   蘿蔔白菜,各有所愛,能幹活、能修復表纔是王道!!!

修復之前謹記:先備份數據庫 (備份完成後再進行以下修復操作)

  可以mysqldump -A  > all.sql   進行全庫備份  (mysqldump導出錯誤的時候可以省略錯誤的表進行導出其他的數據添加選項   --ignore-table=table_name  )  也可以進入到/usr/local/shell/ 執行  mysql_backup.sh進行備份數據庫  以上兩種方式都不可以備份 可以進入到/data/mysql/3306目錄裏面將以下所有文件信息copy一份

 

針對MyIsam表進行修復方法

1.描述: 

在數據庫可以進入 mysql程序正常,只有日誌中拋有tables錯誤的時候使用以下修復:

mysql>  REPAIR TABLE 表名

 

3.描述: 

在數據庫不能進入、數據庫程序不能夠正常啓動的時候使用

mysqlcheck -Aor       (此命令在數據庫外執行,針對所有myisam的數據庫表進行修復 -A=所有all、-o, --optimize 進行對索引優化【重新整理索引】-r, --repair 修復 )


shell# mysqlcheck -Aor   執行的時候會拋出錯誤(凡是innodb表都會拋錯誤)

在知道是那個表錯誤的情況下可以使用以下命令進行修復  (後續可以添加-f選項 force  強制修復,慎用此選項操作)

shell# myisamchk   -oar   tables.MYI  

     

針對Innodb表修復方法

 

1.描述:

數據庫可以進入 mysql程序正常,只有日誌中拋有tables錯誤的時候使用以下修復:

 1、通過mysqldump將錯誤的表進行導出(僅導出數據即可),確定導出沒有問題! 

 2、進入mysql   truncate table  表名 

 3、通過mysql命令將剛纔導出的數據庫數據灌入即可搞定

2.描述:

   可參考 http://dev.mysql.com/doc/refman/5.5/en/forcing-innodb-recovery.html

數據庫無法正常啓動,日誌中存在表錯誤,index錯誤信息 修復:

1、在my.cnf文件裏面添加

[mysqld]

innodb_force_recovery = 1     (1級別最低通常只是作爲跳過表錯誤正常啓動mysql服務)

級別越高,修復難度越大、 (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):不執行前滾的操作。

2、能夠正常啓動mysql後,上層應用不用啓動、防止寫入數據出現錯誤

 進入mysql 進行更改錯誤表的信息

 mysql>  alter table  table_name  ENGINE=myisam;

 修改完成後使用Myisam的修復方式進行修復

 修復完成之後將表更改爲innodb 、my.cnf 文件的innodb_force_recovery = 1 註釋掉之後重新啓動mysql注意觀察日誌是否拋錯

3、通過數據庫備份加binlog日誌進行恢復,步驟過多,不予寫出

仍然可以參考 http://dev.mysql.com/doc/refman/5.5/en/forcing-innodb-recovery.html

進行恢復

 

 

 

 

 


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章