python py_innodb_page_info.py -v /usr/local/var/mysql/ibdata1
mylib.py
#encoding=utf-8
import os
import include from include import * TABLESPACE_NAME='D:\\mysql_data\\test\\t.ibd' VARIABLE_FIELD_COUNT = 1 NULL_FIELD_COUNT = 0 class myargv(object): def __init__(self, argv): self.argv = argv self.parms = {} self.tablespace = '' def parse_cmdline(self): argv = self.argv if len(argv) == 1: print 'Usage: python py_innodb_page_info.py [OPTIONS] tablespace_file' print 'For more options, use python py_innodb_page_info.py -h' return 0 while argv: if argv[0][0] == '-': if argv[0][1] == 'h': self.parms[argv[0]] = '' argv = argv[1:] break if argv[0][1] == 'v': self.parms[argv[0]] = '' argv = argv[1:] else: self.parms[argv[0]] = argv[1] argv = argv[2:] else: self.tablespace = argv[0] argv = argv[1:] if self.parms.has_key('-h'): print 'Get InnoDB Page Info' print 'Usage: python py_innodb_page_info.py [OPTIONS] tablespace_file\n' print 'The following options may be given as the first argument:' print '-h help ' print '-o output put the result to file' print '-t number thread to anayle the tablespace file' print '-v verbose mode' return 0 return 1 def mach_read_from_n(page,start_offset,length): ret = page[start_offset:start_offset+length] return ret.encode('hex') def get_innodb_page_type(myargv): f=file(myargv.tablespace,'rb') fsize = os.path.getsize(f.name)/INNODB_PAGE_SIZE ret = {} for i in range(fsize): page = f.read(INNODB_PAGE_SIZE) page_offset = mach_read_from_n(page,FIL_PAGE_OFFSET,4) page_type = mach_read_from_n(page,FIL_PAGE_TYPE,2) if myargv.parms.has_key('-v'): if page_type == '45bf': page_level = mach_read_from_n(page,FIL_PAGE_DATA+PAGE_LEVEL,2) print "page offset %s, page type <%s>, page level <%s>"%(page_offset,innodb_page_type[page_type],page_level) else: print "page offset %s, page type <%s>"%(page_offset,innodb_page_type[page_type]) if not ret.has_key(page_type): ret[page_type] = 1 else: ret[page_type] = ret[page_type] + 1 print "Total number of page: %d:"%fsize for type in ret: print "%s: %s"%(innodb_page_type[type],ret[type]) ###
py_innodb_page_info.py
#! /usr/bin/env python
#encoding=utf-8
import mylib from sys import argv from mylib import myargv if __name__ == '__main__': myargv = myargv(argv) if myargv.parse_cmdline() == 0: pass else: mylib.get_innodb_page_type(myargv) ####
include.py
#encoding=utf-8
INNODB_PAGE_SIZE = 16*1024*1024
# Start of the data on the page FIL_PAGE_DATA = 38 FIL_PAGE_OFFSET = 4 # page offset inside space FIL_PAGE_TYPE = 24 # File page type # Types of an undo log segment */ TRX_UNDO_INSERT = 1 TRX_UNDO_UPDATE = 2 # On a page of any file segment, data may be put starting from this offset FSEG_PAGE_DATA = FIL_PAGE_DATA # The offset of the undo log page header on pages of the undo log TRX_UNDO_PAGE_HDR = FSEG_PAGE_DATA PAGE_LEVEL = 26 #level of the node in an index tree; the leaf level is the level 0 */ innodb_page_type={ '0000':u'Freshly Allocated Page', '0002':u'Undo Log Page', '0003':u'File Segment inode', '0004':u'Insert Buffer Free List', '0005':u'Insert Buffer Bitmap', '0006':u'System Page', '0007':u'Transaction system Page', '0008':u'File Space Header', '0009':u'扩展描述页', '000a':u'Uncompressed BLOB Page', '000b':u'1st compressed BLOB Page', '000c':u'Subsequent compressed BLOB Page', '45bf':u'B-tree Node' } innodb_page_direction={ '0000': 'Unknown(0x0000)', '0001': 'Page Left', '0002': 'Page Right', '0003': 'Page Same Rec', '0004': 'Page Same Page', '0005': 'Page No Direction', 'ffff': 'Unkown2(0xffff)' } INNODB_PAGE_SIZE=1024*16 # InnoDB Page 16K ####
python py_innodb_page_info.py /usr/local/var/mysql/ibdata1
python py_innodb_page_info.py -v /usr/local/var/mysql/ibdata1
➜ ~ python py_innodb_page_info.py -v /usr/local/var/mysql/ibdata1
page offset 00000000, page type
page offset 00000001, page type page offset 00000002, page type page offset 00000003, page type page offset 00000004, page type , page level <0000> page offset 00000005, page type page offset 00000006, page type page offset 00000007, page type page offset 00000008, page type , page level <0001> page offset 00000009, page type , page level <0001> page offset 0000000d, page type page offset 0000000e, page type page offset 0000000f, page type page offset 00000010, page type page offset 0000002d, page type page offset 0000002e, page type page offset 0000002f, page type page offset 00000030, page type page offset 000001c6, page type page offset 00000000, page type page offset 000001e0, page type page offset 00000108, page type page offset 00000109, page type page offset 00000003, page type , page level <0000> page offset 00000005, page type , page level <0000> page offset 000001c9, page type page offset 00000003, page type , page level <0000> page offset 000000f3, page type page offset 0000011c, page type page offset 00000034, page type page offset 0000015c, page type , page level <0000> page offset 000001a1, page type , page level <0000> page offset 0000019b, page type , page level <0000> page offset 00000149, page type , page level <0000> page offset 00000009, page type , page level <0001> page offset 00000000, page type page offset 0000027f, page type , page level <0000> page offset 0000000c, page type , page level <0001> page offset 00000007, page type page offset 00000000, page type page offset 00000001, page type page offset 00000002, page type page offset 00000003, page type , page level <0001> page offset 00000004, page type , page level <0000> page offset 00000005, page type , page level <0000> page offset 0000015e, page type page offset 00000172, page type page offset 0000018a, page type page offset 0000012d, page type page offset 000001c4, page type page offset 00000103, page type page offset 00000104, page type page offset 000001b2, page type page offset 00000002, page type page offset 00000003, page type , page level <0001> page offset 00000004, page type , page level <0000> page offset 00000005, page type , page level <0000> page offset 00000006, page type , page level <0000> page offset 00000000, page type page offset 00000001, page type page offset 00000002, page type page offset 00000003, page type , page level <0000> page offset 00000000, page type page offset 00000001, page type page offset 00000002, page type page offset 00000003, page type , page level <0000> page offset 00000004, page type , page level <0000> page offset 00000000, page type page offset 00000001, page type page offset 00000002, page type page offset 00000003, page type , page level <0000> page offset 00000000, page type page offset 00000001, page type page offset 00000002, page type page offset 00000003, page type , page level <0001> page offset 00000004, page type , page level <0000> page offset 00000000, page type page offset 00000001, page type page offset 00000002, page type page offset 00000003, page type , page level <0001> page offset 00000004, page type , page level <0000> page offset 00000000, page type page offset 00000001, page type page offset 00000002, page type page offset 00000003, page type , page level <0000> page offset 00000000, page type page offset 00000001, page type page offset 00000002, page type page offset 00000003, page type , page level <0000> page offset 00000000, page type page offset 00000005, page type , page level <0000> page offset 00000004, page type , page level <0000> page offset 00000005, page type , page level <0000> page offset 000000bb, page type page offset 000000bc, page type page offset 000000c0, page type page offset 000000c1, page type page offset 000000e4, page type page offset 000000e5, page type page offset 000000f3, page type page offset 000000f4, page type page offset 000000f5, page type page offset 000000f6, page type page offset 000000f7, page type page offset 0000010d, page type page offset 0000010e, page type , page level <0000> page offset 0000010f, page type , page level <0000> page offset 00000110, page type , page level <0000> page offset 00000111, page type , page level <0000> page offset 00000112, page type page offset 00000113, page type , page level <0001> page offset 00000114, page type , page level <0001> page offset 00000115, page type page offset 00000116, page type , page level <0000> page offset 00000117, page type page offset 00000118, page type page offset 00000119, page type page offset 0000011a, page type page offset 00000148, page type , page level <0000> page offset 00000149, page type , page level <0000> page offset 0000014a, page type page offset 0000014b, page type