InnoDB: Error: space id and page n:o stored in the page?
2016-06-08 04:38:11 7fa7ddd86700 InnoDB: Error: space id and page n:o stored in the page
InnoDB: read in are 4294967295:4294967295, should be 22291:4096!
InnoDB: Database page corruption on disk or a failed
InnoDB: file read of page 4096.
InnoDB: You may have to recover from a backup.
2016-06-08 04:38:11 7fa7ddd86700 InnoDB: Page dump in ascii and hex (16384 bytes):
所用到的工具是自己寫的mysqlblock和bcview,
我放到了百度雲盤
供大家下載和使用
今天MYSQL遇到上面的錯誤:
顯然
InnoDB: read in are 4294967295:4294967295, should be 22291:4096!
這裡丟擲了出錯資訊,結合前面的提示翻譯為,
在space id 22291的4096塊上出現了問題,讀到的資訊為4294967295:4294967295
顯現SPACE ID 讀到的資訊有誤 4294967295
那麼這第一個4294967295 是怎麼來的呢。
首先我們要找到SPACEID 是22291是什麼表
select * from INNODB_SYS_TABLESPACES where space = 22291;
然後取出他的ibd檔案如果是單獨的表空間就非常簡單了,目的在於分析原因確定確實是這個表的問題。
然後使用工具檢視二進位制檔案我使用的是自己編寫的bcview工具。
******************************************************************
This Tool Is Uesed For Find The Data In Binary format(Hexadecimal)
Usage:./bcview file blocksize offset cnt-bytes!
file: Is Your File Will To Find Data!
blocksize: Is N kb Block.Eg: 8 Is 8 Kb Blocksize(Oracle)!
Eg: 16 Is 16 Kb Blocksize(Innodb)!
offset:Is Every Block Offset Your Want Start!
cnt-bytes:Is After Offset,How Bytes Your Want Gets!
Edtor QQ:22389860!
Used gcc version 4.1.2 20080704 (Red Hat 4.1.2-46)
******************************************************************
usage:./bcview file blocksize offset cnt-bytes!
其實這個4294967295來自於塊的34-37 的4個位元組,
如果我們開啟2進位制檔案使用工具bcview(自己編寫的)
./bcview product_info_snapshot.ibd 16 34 4|more
current block:00004096--Offset:00034--cnt bytes:04--data is:ffffffff
我們很清楚看到了這裡4個位元組全是ffffffff,實際上正常的塊是
current block:00000085--Offset:00034--cnt bytes:04--data is:00005713
那麼第二個4294967295也就是塊號來自哪裡呢?
其實這個塊號我也佔時沒有找到他來自哪裡,
但是他為什麼能讀取到正確的4096塊呢?
肯能的原意你是每個塊的 4-11 8個位元組是當前的塊號和上一個塊的塊號
我們來看看
current block:00004090--Offset:00004--cnt bytes:08--data is:00000ffa00000ff9
current block:00004091--Offset:00004--cnt bytes:08--data is:00000ffb00000ffa
current block:00004092--Offset:00004--cnt bytes:08--data is:00000ffc00000ffb
current block:00004093--Offset:00004--cnt bytes:08--data is:00000ffd00000ffc
current block:00004094--Offset:00004--cnt bytes:08--data is:00000ffe00000ffd
current block:00004095--Offset:00004--cnt bytes:08--data is:00000fff00000ffe
current block:00004096--Offset:00004--cnt bytes:08--data is:0000100000000fff
current block:00004097--Offset:00004--cnt bytes:08--data is:0000100100001000
current block:00004098--Offset:00004--cnt bytes:08--data is:0000100200001001
很明顯的這裡看到了0000100000000fff 當前塊號4096 上一個塊是4095
這裡就確定了確實是這個塊出現了問題。那麼怎麼恢復呢?
當然有從庫直接刪除匯入即可。
如果沒有從庫沒有備份,那麼準備好丟資料的可能。
我們可以create table t_bak as select * from t;
這個肯定報錯 報錯就是讀取到了出問題的塊,但是t_bak出來了,這個時候我們取自增主鍵,試著向後推移一部分
如果報錯在推 比如一次主鍵+10 這個還是和你的行大小有關。如果1K的行一個塊大約也就10來條資料左右,
我們只要跳過了出錯的塊,讀取應該會正常。但是肯定會丟一些資料,丟的就是壞塊的資料。
如果死馬當活馬醫,可以改一下34-37位元組為正常的值。再試試。
當然也可以透過mysqlblock工具看一下是否有異常的塊
異常:
[root@bak tmp]# ./mysqlblock product_info_snapshotbak.ibd -t
FILE SIZE IS : 1589641216
Total Block Status :
Total block : 97024,Total size is: 1516.000000 MB
Total undo block : 0,Total size is: 0.000000 MB
Total inode block : 1,Total size is: 0.015625 MB
Total insert buffer free blocks: 0,Total size is: 0.000000 MB
Total data(index pages) block : 92434,Total size is: 1444.281250 MB
Total new allocate blocks : 4540,Total size is: 70.937500 MB
Total insert buf bitmap blocks : 6,Total size is: 0.093750 MB
Total system blocks : 0,Total size is: 0.000000 MB
Total transaction system blocks: 0,Total size is: 0.000000 MB
Total file space header blocks : 1,Total size is: 0.015625 MB
Total extrenl disc blocks : 5,Total size is: 0.078125 MB
Total LOB blocks : 24,Total size is: 0.375000 MB
Total Unkown blocks : 13,Total size is: 0.203125 MB
正常:
[root@bak tmp]# ./mysqlblock product_info_snapshot.ibd -t
FILE SIZE IS : 1589641216
Total Block Status :
Total block : 97024,Total size is: 1516.000000 MB
Total undo block : 0,Total size is: 0.000000 MB
Total inode block : 1,Total size is: 0.015625 MB
Total insert buffer free blocks: 0,Total size is: 0.000000 MB
Total data(index pages) block : 92449,Total size is: 1444.515625 MB
Total new allocate blocks : 4538,Total size is: 70.906250 MB
Total insert buf bitmap blocks : 6,Total size is: 0.093750 MB
Total system blocks : 0,Total size is: 0.000000 MB
Total transaction system blocks: 0,Total size is: 0.000000 MB
Total file space header blocks : 1,Total size is: 0.015625 MB
Total extrenl disc blocks : 5,Total size is: 0.078125 MB
Total LOB blocks : 24,Total size is: 0.375000 MB
Total Unkown blocks : 0,Total size is: 0.000000 MB
InnoDB: read in are 4294967295:4294967295, should be 22291:4096!
InnoDB: Database page corruption on disk or a failed
InnoDB: file read of page 4096.
InnoDB: You may have to recover from a backup.
2016-06-08 04:38:11 7fa7ddd86700 InnoDB: Page dump in ascii and hex (16384 bytes):
所用到的工具是自己寫的mysqlblock和bcview,
我放到了百度雲盤
供大家下載和使用
今天MYSQL遇到上面的錯誤:
顯然
InnoDB: read in are 4294967295:4294967295, should be 22291:4096!
這裡丟擲了出錯資訊,結合前面的提示翻譯為,
在space id 22291的4096塊上出現了問題,讀到的資訊為4294967295:4294967295
顯現SPACE ID 讀到的資訊有誤 4294967295
那麼這第一個4294967295 是怎麼來的呢。
首先我們要找到SPACEID 是22291是什麼表
select * from INNODB_SYS_TABLESPACES where space = 22291;
然後取出他的ibd檔案如果是單獨的表空間就非常簡單了,目的在於分析原因確定確實是這個表的問題。
然後使用工具檢視二進位制檔案我使用的是自己編寫的bcview工具。
******************************************************************
This Tool Is Uesed For Find The Data In Binary format(Hexadecimal)
Usage:./bcview file blocksize offset cnt-bytes!
file: Is Your File Will To Find Data!
blocksize: Is N kb Block.Eg: 8 Is 8 Kb Blocksize(Oracle)!
Eg: 16 Is 16 Kb Blocksize(Innodb)!
offset:Is Every Block Offset Your Want Start!
cnt-bytes:Is After Offset,How Bytes Your Want Gets!
Edtor QQ:22389860!
Used gcc version 4.1.2 20080704 (Red Hat 4.1.2-46)
******************************************************************
usage:./bcview file blocksize offset cnt-bytes!
其實這個4294967295來自於塊的34-37 的4個位元組,
如果我們開啟2進位制檔案使用工具bcview(自己編寫的)
./bcview product_info_snapshot.ibd 16 34 4|more
current block:00004096--Offset:00034--cnt bytes:04--data is:ffffffff
我們很清楚看到了這裡4個位元組全是ffffffff,實際上正常的塊是
current block:00000085--Offset:00034--cnt bytes:04--data is:00005713
那麼第二個4294967295也就是塊號來自哪裡呢?
其實這個塊號我也佔時沒有找到他來自哪裡,
但是他為什麼能讀取到正確的4096塊呢?
肯能的原意你是每個塊的 4-11 8個位元組是當前的塊號和上一個塊的塊號
我們來看看
current block:00004090--Offset:00004--cnt bytes:08--data is:00000ffa00000ff9
current block:00004091--Offset:00004--cnt bytes:08--data is:00000ffb00000ffa
current block:00004092--Offset:00004--cnt bytes:08--data is:00000ffc00000ffb
current block:00004093--Offset:00004--cnt bytes:08--data is:00000ffd00000ffc
current block:00004094--Offset:00004--cnt bytes:08--data is:00000ffe00000ffd
current block:00004095--Offset:00004--cnt bytes:08--data is:00000fff00000ffe
current block:00004096--Offset:00004--cnt bytes:08--data is:0000100000000fff
current block:00004097--Offset:00004--cnt bytes:08--data is:0000100100001000
current block:00004098--Offset:00004--cnt bytes:08--data is:0000100200001001
很明顯的這裡看到了0000100000000fff 當前塊號4096 上一個塊是4095
這裡就確定了確實是這個塊出現了問題。那麼怎麼恢復呢?
當然有從庫直接刪除匯入即可。
如果沒有從庫沒有備份,那麼準備好丟資料的可能。
我們可以create table t_bak as select * from t;
這個肯定報錯 報錯就是讀取到了出問題的塊,但是t_bak出來了,這個時候我們取自增主鍵,試著向後推移一部分
如果報錯在推 比如一次主鍵+10 這個還是和你的行大小有關。如果1K的行一個塊大約也就10來條資料左右,
我們只要跳過了出錯的塊,讀取應該會正常。但是肯定會丟一些資料,丟的就是壞塊的資料。
如果死馬當活馬醫,可以改一下34-37位元組為正常的值。再試試。
當然也可以透過mysqlblock工具看一下是否有異常的塊
異常:
[root@bak tmp]# ./mysqlblock product_info_snapshotbak.ibd -t
FILE SIZE IS : 1589641216
Total Block Status :
Total block : 97024,Total size is: 1516.000000 MB
Total undo block : 0,Total size is: 0.000000 MB
Total inode block : 1,Total size is: 0.015625 MB
Total insert buffer free blocks: 0,Total size is: 0.000000 MB
Total data(index pages) block : 92434,Total size is: 1444.281250 MB
Total new allocate blocks : 4540,Total size is: 70.937500 MB
Total insert buf bitmap blocks : 6,Total size is: 0.093750 MB
Total system blocks : 0,Total size is: 0.000000 MB
Total transaction system blocks: 0,Total size is: 0.000000 MB
Total file space header blocks : 1,Total size is: 0.015625 MB
Total extrenl disc blocks : 5,Total size is: 0.078125 MB
Total LOB blocks : 24,Total size is: 0.375000 MB
Total Unkown blocks : 13,Total size is: 0.203125 MB
正常:
[root@bak tmp]# ./mysqlblock product_info_snapshot.ibd -t
FILE SIZE IS : 1589641216
Total Block Status :
Total block : 97024,Total size is: 1516.000000 MB
Total undo block : 0,Total size is: 0.000000 MB
Total inode block : 1,Total size is: 0.015625 MB
Total insert buffer free blocks: 0,Total size is: 0.000000 MB
Total data(index pages) block : 92449,Total size is: 1444.515625 MB
Total new allocate blocks : 4538,Total size is: 70.906250 MB
Total insert buf bitmap blocks : 6,Total size is: 0.093750 MB
Total system blocks : 0,Total size is: 0.000000 MB
Total transaction system blocks: 0,Total size is: 0.000000 MB
Total file space header blocks : 1,Total size is: 0.015625 MB
Total extrenl disc blocks : 5,Total size is: 0.078125 MB
Total LOB blocks : 24,Total size is: 0.375000 MB
Total Unkown blocks : 0,Total size is: 0.000000 MB
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/7728585/viewspace-2121548/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- InnoDB:Failingassertion:page_get_n_recs(page)>1AI
- [ERROR]Space id in fsp header but in the page header一列ErrorHeader
- 遭遇 bug InnoDB: Failing assertion: page_get_n_recs(page) > 1AI
- NGINX error_pageNginxError
- innblock 工具| InnoDB page觀察利器BloC
- MYSQL Space id in fsp header,but in the page header錯誤MySqlHeader
- InnoDB從內分析之Page(二)
- MySQL5.7 InnoDB Page CompressionMySql
- Error page: / Error infos: DedeCms錯誤警告Error
- innodb page重組空間壓縮函式(btr_page_reorganize_low)註釋函式
- MySQL:Innodb page clean 執行緒 (二) 解析MySql執行緒
- 解決mysql innodb page corrupt一例MySql
- Spring Boot Web Error Page處理Spring BootWebError
- MySQL:Innodb page clean 執行緒 (一) 基礎MySql執行緒
- An error has occurred when creating this preference page.Error
- This page provides the following types of documentationIDE
- MySQL data pageMySql
- create-a-page
- Mendix Page Template
- MySQL原理 - InnoDB引擎 - 行記錄儲存 - Off-page 列MySql
- spring boot (whitelabel error page SpEL RCE) 漏洞復現Spring BootError
- [求助]tomcat,web.xml,<error-page>,亂碼TomcatWebXMLError
- 關於MYSQL INNODB index page header學習和實驗總結MySqlIndexHeader
- Checkpoint log:invalid bitmap page錯誤修復
- Page Lifecycle API 教程API
- Page Object設計模式Object設計模式
- springboot請求controller返回Whitelabel Error PageSpring BootControllerError
- MySQL 8.0 Reference Manual(讀書筆記78節-- InnoDB Table and Page Compression (1))MySql筆記
- MySQL 8.0 Reference Manual(讀書筆記79節-- InnoDB Table and Page Compression (2))MySql筆記
- 什麼是前端開發領域的 Page Blink 和 Page Flicker前端
- Flutter 開發 Android & IOS 啟動頁 splash pageFlutterAndroidiOS
- Landing Page 製作指南
- Page Visibility API 教程API
- SAP Spartacus的page請求
- 搭建基礎架構-Page架構
- Apache2 Ubuntu Default PageApacheUbuntu
- CSS @page語法規則CSS
- [Linux] kernel: page allocation failureLinuxAI