溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

MySQL數(shù)據(jù)庫(kù)表?yè)p壞后如何修復(fù)

發(fā)布時(shí)間:2021-11-06 14:15:51 來(lái)源:億速云 閱讀:594 作者:小新 欄目:MySQL數(shù)據(jù)庫(kù)

這篇文章主要為大家展示了“MySQL數(shù)據(jù)庫(kù)表?yè)p壞后如何修復(fù)”,內(nèi)容簡(jiǎn)而易懂,條理清晰,希望能夠幫助大家解決疑惑,下面讓小編帶領(lǐng)大家一起研究并學(xué)習(xí)一下“MySQL數(shù)據(jù)庫(kù)表?yè)p壞后如何修復(fù)”這篇文章吧。

1.MyISAM表?yè)p壞
用myisamchk命令來(lái)修復(fù)
myisamchk -r -q 后面跟你的表名.MYI
這個(gè)命令是專門修復(fù)myism引擎數(shù)據(jù)庫(kù)表的。比如,你的數(shù)據(jù)庫(kù)目錄為
/var/lib/mysql/db
其中一個(gè)表為 test
那么修復(fù)test表的方法為
myisamchk -r -q /var/lib/mysql/db/test.MYI
如果修復(fù)全部表,用這個(gè)命令
myisamchk -r -q /var/lib/mysql/db/*.MYI

2.InnoDB表?yè)p壞
InnoDB擁有內(nèi)部恢復(fù)機(jī)制,假如數(shù)據(jù)庫(kù)崩潰了,InnoDB通過(guò)從最后一個(gè)時(shí)間戳開(kāi)始運(yùn)行日志文件,來(lái)嘗試修復(fù)數(shù)據(jù)庫(kù)。
大多數(shù)情況下會(huì)修復(fù)成功,而且整個(gè)過(guò)程是透明的。
假如InnoDB自行修復(fù)失敗,那么數(shù)據(jù)庫(kù)將不能啟動(dòng)。
在繼續(xù)操作前,先瀏覽下MySQL的日志文件,確定數(shù)據(jù)庫(kù)是因?yàn)镮nnoDB表的損壞而崩潰。
有一種方法是更新InnoDB的日志文件計(jì)數(shù)器以跳過(guò)引起崩潰的查詢,這種情況下,將造成數(shù)據(jù)的不一致性而且會(huì)經(jīng)常使主從復(fù)制中斷。
一旦確定MySQL因?yàn)镮nnoDB表?yè)p壞無(wú)法啟動(dòng)時(shí),就可以按照以下5步進(jìn)行修復(fù):
1.編輯/etc/my.cnf文件,加入如下行:
innodb_force_recovery = 4
2.這時(shí)就可以重新啟動(dòng)數(shù)據(jù)庫(kù)了,在innodb_force_recovery配置的作用,所有的插入與更新操作將被忽略;
3.導(dǎo)出所有的數(shù)據(jù)表;
4.關(guān)閉數(shù)據(jù)庫(kù)并刪除所有數(shù)據(jù)表文件及目錄,再運(yùn)行 mysql_install_db來(lái)創(chuàng)建MySQL默認(rèn)數(shù)據(jù)表;
5.在/etc/my.cnf中刪除innodb_force_recovery這一行,再啟動(dòng)MySQL(這時(shí)MySQL正常啟動(dòng));
6.從第3步備份的文件中恢復(fù)所有的數(shù)據(jù)。

innodb_force_recovery可以設(shè)置為1-6,大的數(shù)字包含前面所有數(shù)字的影響。當(dāng)設(shè)置參數(shù)值大于0后,可以對(duì)表進(jìn)行select,create,drop操作,但insert,update或者delete這類操作是不允許的。
1(SRV_FORCE_IGNORE_CORRUPT):忽略檢查到的corrupt頁(yè)。
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í)行前滾的操作。

以上是“MySQL數(shù)據(jù)庫(kù)表?yè)p壞后如何修復(fù)”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對(duì)大家有所幫助,如果還想學(xué)習(xí)更多知識(shí),歡迎關(guān)注億速云行業(yè)資訊頻道!

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI