1. 程式人生 > 其它 >記一次mysql故障處理

記一次mysql故障處理

最近遇到的問題還是有點多的,所以遇到問題就記錄一下以免以後忘記了怎麼解決

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 登入,之後進行密碼修改操作