服務器意外斷電MySQL無法啟動

1.背景
客戶反映無法登錄系統(tǒng)。再三詢問之下,客戶說出一個情況:服務器因信息中心人為原因,最近總是意外斷電。更多精彩文章請關注公眾號『Pythonnote』或者『全棧技術精選』
what?服務器這么兒戲嗎?這么不安全嗎?不管什么情況,先去現(xiàn)場檢查一番。
2.嘗試過程
1.登錄服務器啟動服務。2.檢查服務運行狀態(tài),發(fā)現(xiàn) MySQL 容器一直處于嘗試重啟狀態(tài)。3.檢查 docker 日志,篩選 MySQL 容器報錯部分。4.提示:數(shù)據(jù)庫由于非正常情況關閉,正在嘗試恢復,重新啟動。然后一直處于啟動報錯關閉、啟動報錯關閉......5.先檢查 SQL 備份文件是否正常,雖然有,但是文件大小明顯不對,完蛋。。只能寄希望于斷電那一刻的數(shù)據(jù)恢復了。更多精彩文章請關注『全棧技術精選』6.在 MySQL 的配置文件中有一項配置項 【innodb_force_recovery】代表強制恢復,它的值從1-6效果不斷加強。越強,數(shù)據(jù)損壞的可能性越大,但是數(shù)據(jù)庫正常啟動的概率也越大。因此不能一上來就加足馬力,最好是逐級遞增嘗試。7.在設置為 4 時,容器終于正常啟動。但此時并不代表正常,因為此時數(shù)據(jù)庫所有表的狀態(tài)為鎖定只讀狀態(tài)。我們只需要將此時的數(shù)據(jù)導出備份即可。8.導出最后一刻數(shù)據(jù)庫后,將其導入到另一備用數(shù)據(jù)庫中,恢復數(shù)據(jù)接入系統(tǒng)正常使用。
以上步驟是事后梳理而成,其實真實解決過程中問題不斷,sql 導出文件無法使用,數(shù)據(jù)庫問題,服務器問題,各種小問題不斷。但是為了突出問題本身,不能將其他不相干的問題一一記錄,否則會干擾大家問題解決。更多精彩文章請關注公眾號『Pythonnote』
3.解決
1.在配置文件/etc/mysql/my.cnf中添加如下語句
[mysqld]innodb_force_recovery = 4
innodb_force_recovery參數(shù)的值從 1-6 依次嘗試,恢復等級越來越強。
1.重新啟動 mysql 之后表都是只讀狀態(tài),此時可以備份數(shù)據(jù)庫2.將備份文件導入到新的數(shù)據(jù)庫中更多精彩文章請關注公眾號『Pythonnote』或者『全棧技術精選』
4.后記
生產(chǎn)環(huán)境所有操作必須三思而后行,在重大的壓力、各種狀況不斷的情況下,很難保持一個清醒的頭腦,不要自亂陣腳,讓問題更復雜。
-----------------------
微信公眾號:全棧技術精選 (ID: Pythonnote)
個人博客:https://www.pythonnote.cn
點擊關注下方賬號,每天了解一些奇奇怪怪小知識
-----------------------

