記一次mysql故障處理
阿新 • • 發佈:2021-06-17
最近遇到的問題還是有點多的,所以遇到問題就記錄一下以免以後忘記了怎麼解決
mysql版本5.7,centos環境,無法正常啟動服務,提示
2021-06-10T08:18:06.378567Z 0 [ERROR] InnoDB: Trying to access page number 4294967295 in space 0, space name innodb_system, which is outside the tablespace bounds. Byte offset 0, len 16384, i/o type read. I f you get this error at mysqld startup, please check that your my.cnf matches the ibdata files that you have in the MySQL server.
找了一圈不清楚哪出的問題,因為資料庫只是開發環境所以直接重置資料檔案
rm -rf /var/lib/mysql/*
如果是生產環境則不能這麼簡單粗暴,先配置
/etc/my.cnf加入innodb_force_recovery=X行 X為0-6數字 0正常執行mysql 1(SRV_FORCE_IGNORE_CORRUPT):忽略檢查到的corrupt頁。 2(SRV_FORCE_NO_BACKGROUND):阻止主執行緒的執行,如主執行緒需要執行fullpurge操作,會導致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):不執行前滾的操作。
數字越大跳過的mysql項就越多,跳過內容向下相容,本次的mysql直到5才可以正常啟動,啟動後就可以正常執行服務
當設定innodb_force_recovery引數值大於0後,可以對錶進行select,create,drop操作,但insert,update或者delete這類操作
然後進行備份
mysqldump -uroot -p --all-databases> back.sql
再執行上面的重置資料檔案
rm -rf /var/lib/mysql/*
之後進入my.cnf取消刪除innodb_force_recovery行,重啟mysql服務
以下操作麼有經過檢驗:
重新執行MySQL的安全指令碼mysql_secure_installation,設定root登入密碼,然後登入MySQL進行資料庫的恢復。
source back.sql(備份檔案的絕對路徑);
mysql忘記密碼(version 5.7)
在 /etc/my.cnf 【mysql】模組下最後加入skip-grant-tables=1就可以直接使用mysql -uroot 登入,之後進行密碼修改操作