首頁 > 軟體

Mysql8斷電崩潰解決

2023-03-29 06:01:26

一、概述

單機Mysql8資料庫伺服器執行過程中突然斷電,導致資料庫崩潰,無法重啟。

二、查詢原因

檢視mysql執行錯誤紀錄檔:WIN-SOTMI68HRV6.err (在Data目錄下)

InnoDB: End of page dump
InnoDB: Page may be a system page
2023-02-01T09:31:02.878917Z 0 [Warning] [MY-010915] [Server] 'NO_ZERO_DATE', 'NO_ZERO_IN_DATE' and 'ERROR_FOR_DIVISION_BY_ZERO' sql modes should be used with strict mode. They will be merged with strict mode in a future release.
2023-02-01T09:31:02.882631Z 0 [System] [MY-010116] [Server] C:Program FilesMySQLMySQL Server 8.0binmysqld.exe (mysqld 8.0.23) starting as process 3496
2023-02-01T09:31:02.923391Z 1 [System] [MY-013576] [InnoDB] InnoDB initialization has started.
2023-02-01T09:31:05.964384Z 1 [ERROR] [MY-011971] [InnoDB] Tablespace 'innodb_system' Page [page id: space=0, page number=5] log sequence number 3275776865 is in the future! Current system log sequence number 3197057036.
2023-02-01T09:31:05.966225Z 1 [ERROR] [MY-011972] [InnoDB] Your database may be corrupt or you may have copied the InnoDB tablespace but not the InnoDB log files. Please refer to http://dev.mysql.com/doc/refman/8.0/en/forcing-innodb-recovery.html for information about forcing recovery.
2023-02-01T09:31:05.98

InnoDB: End of page dump
InnoDB: Page may be a system page
2023-02-01T11:03:39.767939Z 1 [ERROR] [MY-011906] [InnoDB] Database page corruption on disk or a failed file read of page [page id: space=4294967278, page number=101]. You may have to recover from a backup.
 len 16384; hex 4359822100000065000000000000000000000000c340647700060000000000000000ffffffeefffffffe0000000000000000ffffffff0000ffffffff0000ffffffee000000580932000000d600000154fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff

很明顯[ERROR] ,找不到磁碟檔案。通過上述紀錄檔可以得知:資料庫出現錯誤,無法重啟。

原因:為了保護資料,InnoDB使用校驗和(與頁儲存在一起)。當InnoDB從磁碟讀取時,它計算每個頁的校驗和,並與磁碟載入的校驗和進行比較。如果值是不同的,可能真的發生了一些錯誤。InnoDB將關閉MySQL伺服器,以防止進一步的邏輯或物理損壞。

三、解決方案

1.如何找出損壞發生的原因

沒有通用的解決方案。最典型的是有一些硬體問題,例如:物理磁碟或記憶體故障,壞的驅動器/控制器,甚至作業系統核心的bug。下面是一些建議:

在Linux平臺上,有時會重置頁快取能解決這個問題:

echo 2 > /proc/sys/vm/drop_caches

檢查系統紀錄檔有沒有可能的硬體故障。
如果InnoDB每次在特定頁崩潰,最典型的是物理磁碟發生故障:執行對於你的OS /硬體的詳細磁碟診斷。
如果崩潰是隨機的且不在相同查詢重複,可能是RAM故障:執行詳細的RAM診斷。
在MySQL關閉時,用innochecksum工具檢查InnoDB檔案是有幫助的。

作者這裡故障原因是斷電導致資料出現問題,只能重灌Mysql。

2.如何從損壞中恢復

最重要的是執行詳細的硬體診斷,以消除問題擴散的機會。如果作業系統I / O快取是磁碟讀損壞的原因,重置快取或重新啟動作業系統應有助於消除當前的問題,資料庫可能會重新運作。
有時唯一的解決辦法是在有效恢復模式下備份資料。

筆者後面嘗試強制啟動,可以啟動Mysql,但是資料庫只能讀不能寫,通過紀錄檔又找不到損壞的資料表,無奈,只能先備份資料庫,然後重灌Mysql。

修改資料庫,一直報錯:

running in read_only mode 1836

將mysql改為強制啟動:

在my.ini中【mysqld】節點下加上

innodb_force_recovery=0

然後對資料庫進行備份。
備份方式:

一、資料庫備份

第一種:(cmd視窗使用)
在命令提示字元用mysqldump命令列備份資料庫。
命令格式
mysqldump -u使用者名稱 -p 資料庫名 > 儲存名.sql
範例:

mysqldump -uroot -p dataname > d:data.sql

(匯出資料庫dataname到data.sql檔案)
提示輸入密碼時,輸入該資料庫使用者名稱的密碼。

第二種:指定匯出備份編碼

mysqldump -u root -p密碼 --default-character-set=資料編碼 資料庫名稱> data.sql

案例:

mysqldump -u root -p123456 --default-character-set=utf8 discuss_chi>d:/data.sql

mySQL資料庫在windows環境下備份與恢復:

二,恢復資料庫,一共二種方式。

第一種;定義還原編碼型別(cmd窗使用)
定義編碼匯入:

mysql -u root -p --default-character-set=utf8 -f dataname<d:/dis.sql

如果亂碼使用二進匯入

mysql -u root -p --default-character-set=binary -f dataname<d:/dis.sql

第二種:
source 命令(mysql控制檯視窗使用)
進入mysql資料庫控制檯,

如在執行中輸入:mysql -u root -p

mysql>use databasename;

1、確定資料庫預設編碼,比如編碼為gbk,將讀入途徑編碼同樣設為gbk,命令為:
set names gbk;(匯入資料出現亂碼的時候用平常不用)
2、然後使用source命令,後面引數為指令碼檔案(如這裡用到的.sql)

mysql>source d:data.sql;

備份後,重灌Mysql,恢復資料庫。

到此這篇關於Mysql8斷電崩潰解決的文章就介紹到這了,更多相關Mysql8斷電崩潰內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!


IT145.com E-mail:sddin#qq.com