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,
我放到了百度云盤
http://pan.baidu.com/s/1num76RJ
供大家下載和使用
今天MYSQL遇到上面的錯(cuò)誤:
顯然
InnoDB: read in are 4294967295:4294967295, should be 22291:4096!
這里拋出了出錯(cuò)信息,結(jié)合前面的提示翻譯為,
在space id 22291的4096塊上出現(xiàn)了問(wèn)題,讀到的信息為4294967295:4294967295
顯現(xiàn)SPACE ID 讀到的信息有誤 4294967295
那么這第一個(gè)4294967295 是怎么來(lái)的呢。
首先我們要找到SPACEID 是22291是什么表
select * from INNODB_SYS_TABLESPACES where space = 22291;
然后取出他的ibd文件如果是單獨(dú)的表空間就非常簡(jiǎn)單了,目的在于分析原因確定確實(shí)是這個(gè)表的問(wèn)題。
然后使用工具查看二進(jìn)制文件我使用的是自己編寫的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!
其實(shí)這個(gè)4294967295來(lái)自于塊的34-37 的4個(gè)字節(jié),
如果我們打開(kāi)2進(jìn)制文件使用工具bcview(自己編寫的)
./bcview product_info_snapshot.ibd 16 34 4|more
current block:00004096--Offset:00034--cnt bytes:04--data is:ffffffff
我們很清楚看到了這里4個(gè)字節(jié)全是ffffffff,實(shí)際上正常的塊是
current block:00000085--Offset:00034--cnt bytes:04--data is:00005713
那么第二個(gè)4294967295也就是塊號(hào)來(lái)自哪里呢?
其實(shí)這個(gè)塊號(hào)我也占時(shí)沒(méi)有找到他來(lái)自哪里,
但是他為什么能讀取到正確的4096塊呢?
肯能的原意你是每個(gè)塊的 4-11 8個(gè)字節(jié)是當(dāng)前的塊號(hào)和上一個(gè)塊的塊號(hào)
我們來(lái)看看
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 當(dāng)前塊號(hào)4096 上一個(gè)塊是4095
這里就確定了確實(shí)是這個(gè)塊出現(xiàn)了問(wèn)題。那么怎么恢復(fù)呢?
當(dāng)然有從庫(kù)直接刪除導(dǎo)入即可。
如果沒(méi)有從庫(kù)沒(méi)有備份,那么準(zhǔn)備好丟數(shù)據(jù)的可能。
我們可以create table t_bak as select * from t;
這個(gè)肯定報(bào)錯(cuò) 報(bào)錯(cuò)就是讀取到了出問(wèn)題的塊,但是t_bak出來(lái)了,這個(gè)時(shí)候我們?nèi)∽栽鲋麈I,試著向后推移一部分
如果報(bào)錯(cuò)在推 比如一次主鍵+10 這個(gè)還是和你的行大小有關(guān)。如果1K的行一個(gè)塊大約也就10來(lái)?xiàng)l數(shù)據(jù)左右,
我們只要跳過(guò)了出錯(cuò)的塊,讀取應(yīng)該會(huì)正常。但是肯定會(huì)丟一些數(shù)據(jù),丟的就是壞塊的數(shù)據(jù)。
如果死馬當(dāng)活馬醫(yī),可以改一下34-37字節(jié)為正常的值。再試試。
當(dāng)然也可以通過(guò)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
當(dāng)前名稱:InnoDB:Error:spaceidandpagen:ostoredinthepage?
文章源于:http://www.chinadenli.net/article0/joejio.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站策劃、Google、關(guān)鍵詞優(yōu)化、建站公司、做網(wǎng)站、外貿(mào)網(wǎng)站建設(shè)
廣告
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源:
創(chuàng)新互聯(lián)