MySQL之——崩潰-修復(fù)損壞的innodb:innodb_force_recovery
藍(lán)隊(duì)云小課堂:
由于windows服務(wù)器經(jīng)常死機(jī),導(dǎo)致有時(shí)mysql啟動(dòng)不了,查看mysql-error.log發(fā)現(xiàn)以下錯(cuò)誤信息:
[ERROR] InnoDB: Your database may be corrupt or you may have copied the InnoDB tablespace but not the InnoDB log files. Please refer to http://www.tjdsmy.cn/doc/refman/5.7/en/forcing-innodb-recovery.html for information about forcing recovery.
[ERROR] InnoDB: Page [page id: space=0, page number=266] log sequence number 8181701917 is in the future! Current system log sequence number 8181692811.
直接上解決方案:
1、配置my.cnf
配置innodb_force_recovery = 1或2——6幾個(gè)數(shù)字,重啟MySQL
2、導(dǎo)出數(shù)據(jù)腳本
mysqldump -uroot -p123456 test > test.sql
導(dǎo)出SQL腳本。或者用Navicat將所有數(shù)據(jù)庫/表導(dǎo)入到其他服務(wù)器的數(shù)據(jù)庫中。
注意:這里的數(shù)據(jù)一定要備份成功。然后刪除原數(shù)據(jù)庫中的數(shù)據(jù)。
3、刪除ib_logfile0、ib_logfile1、ibdata1
備份MySQL數(shù)據(jù)目錄下的ib_logfile0、ib_logfile1、ibdata1三個(gè)文件,然后將這三個(gè)文件刪除
4、配置my.cnf
將my.cnf中innodb_force_recovery = 1或2——6幾個(gè)數(shù)字這行配置刪除或者配置為innodb_force_recovery = 0,重啟MySQL服務(wù)
5、將數(shù)據(jù)導(dǎo)入MySQL數(shù)據(jù)庫
mysql -uroot -p123456 test < test.sql; 或者用Navicat將備份的數(shù)據(jù)導(dǎo)入到數(shù)據(jù)庫中。
如果在導(dǎo)入數(shù)據(jù)過程中發(fā)生tablespace不存在的問題,請(qǐng)刪除data目錄相應(yīng)database下的文件。
此種方法下要注意的問題:
1、ib_logfile0、ib_logfile1、ibdata1這三個(gè)文件一定要先備份后刪除;
2、一定要確認(rèn)原數(shù)據(jù)導(dǎo)出成功了
3、當(dāng)數(shù)據(jù)導(dǎo)出成功后,刪除原數(shù)據(jù)庫中的數(shù)據(jù)時(shí),如果提示不能刪除,可在命令行進(jìn)入MySQL的數(shù)據(jù)目錄,手動(dòng)刪除相關(guān)數(shù)據(jù)庫的文件夾或者數(shù)據(jù)庫文件夾下的數(shù)據(jù)表文件,前提是數(shù)據(jù)一定導(dǎo)出或備份成功。
更多小知識(shí),可聯(lián)系藍(lán)隊(duì)云一起探討。