有一個(gè)crm系統(tǒng),其中有做了一個(gè)報(bào)表統(tǒng)計(jì),其中源碼和數(shù)據(jù)庫放在同意一臺(tái)機(jī)子上,數(shù)據(jù)庫用mysql;但在今天突然報(bào)錯(cuò)頁面提示不能用root@locahost連接
用命令行登錄,提示can't connection to mysql;再檢查端口發(fā)現(xiàn),數(shù)據(jù)庫已經(jīng)關(guān)閉;
現(xiàn)象:
crm可以登錄,點(diǎn)擊其他頁面正常,當(dāng)點(diǎn)擊報(bào)表查看報(bào)表數(shù)據(jù)時(shí)就報(bào)錯(cuò),并且數(shù)據(jù)庫崩潰
初步分析認(rèn)為程序錯(cuò)誤或者數(shù)據(jù)庫錯(cuò)誤導(dǎo)致數(shù)據(jù)庫崩潰從而自動(dòng)斷開
問題解決:
1.查看mysql數(shù)據(jù)庫錯(cuò)誤日志內(nèi)容如下:
InnoDB: Database page corruption on disk or a failed
InnoDB: file read of page 5761.
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-recovery.html
InnoDB: about forcing recovery.
InnoDB: Ending processing because of a corrupt database page.
2.網(wǎng)上搜索該問題,原因?yàn)椋?/p>
數(shù)據(jù)庫中表損壞導(dǎo)致數(shù)據(jù)訪問錯(cuò)誤,從而導(dǎo)致數(shù)據(jù)庫崩潰;mysql中check table 發(fā)現(xiàn)表有損壞,但表是innodb類型不能修復(fù)
網(wǎng)上解決方法為:在my.ini中mysqld下添加innodb_force_recovery=4
說明:
1(SRV_FORCE_IGNORE_CORRUPT):忽略檢查到的corrupt頁。
2(SRV_FORCE_NO_BACKGROUND):阻止主線程的運(yùn)行,如主線程需要執(zhí)行full purge操作,會(huì)導(dǎo)致crash。
3(SRV_FORCE_NO_TRX_UNDO):不執(zhí)行事務(wù)回滾操作。
4(SRV_FORCE_NO_IBUF_MERGE):不執(zhí)行插入緩沖的合并操作。
5(SRV_FORCE_NO_UNDO_LOG_SCAN):不查看重做日志,InnoDB存儲(chǔ)引擎會(huì)將未提交的事務(wù)視為已提交。
6(SRV_FORCE_NO_LOG_REDO):不執(zhí)行前滾的操作。
3.重啟數(shù)據(jù)庫后問題依然存在,再對(duì)照錯(cuò)誤發(fā)現(xiàn)自己的錯(cuò)誤為corrupt類型,所以認(rèn)為應(yīng)將innodb_force_recovery設(shè)置為1,于是my.ini中innodb_force_recovery值改為1,重啟數(shù)據(jù)庫
4.發(fā)現(xiàn)重啟后問題依然存在
5.于是再做如下操作:(重要)
修改my.ini 將innodb_force_recovery這行注釋
#innodb_force_recovery=1
然后重啟數(shù)據(jù)庫,在停止數(shù)據(jù)庫,在修改my.ini,去掉注釋
innodb_force_recovery=1
重啟數(shù)據(jù)庫,問題解決
ps:對(duì)于第五步的操作一直沒想明白,為什么要先注釋掉重啟后在打開才能生效,個(gè)人認(rèn)為可能是有什么地方緩存導(dǎo)致的吧。在此記錄,繼續(xù)探索問題的根源。。
摘自 冰糖葫蘆的專欄
bitsCN.com聲明:本網(wǎng)頁內(nèi)容旨在傳播知識(shí),若有侵權(quán)等問題請(qǐng)及時(shí)與本網(wǎng)聯(lián)系,我們將在第一時(shí)間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com