[MYSQL]mysql坏块检查

发布于:2024-10-24 编辑:匿名 来源:网络

简介 当mysql出现坏块时,查询对应表时会报错,然后数据库崩溃。例如:即只有当我们查询有坏块的表时才会发现有坏块,而启动时则不会。

要检查坏块,我们如何知道数据库中哪些表有坏块呢?坏块如何处理? innochecksummysql提供了一个工具innochecksum来检查数据块。正常情况下,打印页面信息,如:code Language: shell copy (venv) 14:03:07 [root@ddcw21 mysql-8.0.37]#innochecksum /tmp/t.ibd -SFile::/tmp/t .ibd================页面类型摘要==============#PAGE_COUNTPAGE_TYPE============= ============= ====================== 1索引页 1SDI索引页 0撤消日志页 1Inode页 0插入缓冲区空闲列表页2新分配的页 1插入缓冲区位图 0系统页 0事务系统页 1文件空间标头 0范围描述符页 0BLOB页 0压缩 BLOB 页 0后续压缩 BLOB 页 0SDI BLOB 页 0压缩 SDI BLOB 页 0其他类型页============= ============= =====================附加信息:撤消页面类型:0插入,0更新,0其他撤消页面状态:0 active, 0 cached, 0 to_free, 0 to_purge, 0 prepared, 0 other(venv) 14:03:09 [root@ddcw21 mysql-8.0.37]#如果是坏块,则打印信息如下:代码语言:shell copy (venv) 14:03:56 [root@ddcw21 mysql-8.0.37]#innochecksum /tmp/test_badpage_.ibd -SFail: page 4 invalid超过了允许的最大校验和不匹配计数::0,这意味着你可以使用innochecksum来检查数据库是否有坏块,这个工具需要数据库停止运行。

也就是说,在检查之前必须停止数据库。否则会报如下错误:fcntl: 资源暂时不可用。

为了安全起见,就不管它了。那么这篇文章就结束了。

感谢您的观看!坏块验证原理有时候我们无法关闭数据库,但是如果我们要验证坏块,我们不能查询所有的表,如果有坏块,数据库就会挂掉。这没关系。

那么接下来就该深入研究一下innodbchecksum的源码了。我们先看一下验证原理,然后我们自己写一个脚本来验证一下。

我们仍然使用通用的gdb调试来做到这一点。代码语言:shell copy (echo -e "break main\nrun /data/ mysql_dev/data/db1/t.ibd -S -C crc32"; while true;do echo 'step';done) |gdb /root/mysql_source /mysql-8.0.37/bldx86/runtime_output_directory/innochecksum > /tmp/t_innochecksum .gdb.txt 2>&1 然后我们就得到了innochecksum的完整堆栈信息。

稍微整理一下,我们就可以得到调用过程:即crc32校验终于完成了。相关代码如下: 代码语言:c++ copy uint32_t buf_calc_page_crc32( const byte *page,bool use_legacy_big_endian /* = false */) { ut_crc32_func_t crc32_func = use_legacy_big_endian ? ut_crc32_legacy_big_endian : ut_crc32; const uint32_t c1 = crc32_func(页 + FIL_PAGE_OFFSET, FIL_PAGE_FILE_FLUSH_LSN - FIL_PAGE_OFFSET); const uint32_t c2 = crc32_func(页 + FIL_PAGE_DATA, UNIV_PAGE_SIZE - FIL_PAGE_DATA - FIL_PAGE_END_LSN_OLD_CHKSUM) ; return (c1 ^ c2);} 即对FIL_PAGE_HEADER^FIL_PAGE_DATA做crc的结果就是我们需要的crc32值。

FIL_PAGE_OFFSET之类的可以查看我之前写的文章:我们来画一张图。即只验证了部分头部和全部数据,甚至连PAGE_TYPE、SPACE_ID等都没有验证。

真有这么简单吗?我们来测试一下。对于crc32算法,我们还是参考之前解析校验表命令时使用的算法。

对比全部基于mysql。出色地。

(ibd的结构请查看:Studio代码运行 import struct,binasciifilename = '/tmp/t.ibd'f = open('/tmp/t.ibd','rb')data = f.read( 4 )checksum_field1 = struct.unpack('>L',data[:4])[0]checksum_field2 = struct.unpack('>L',data[-8:-4])[0]c1 = binascii.crc32 (数据[4:26])c2 = binascii.crc32(data[38:4-8])print(checksum_field1,checksum_field2,(c1^c2)&(2**32-1)) 哦,有什么区别吗?看CRC32C 和ut_crc32有关系,应该不是普通的crc32。否则,我们就直接调整zlib的crc32。

为什么要费力去写呢?当我们仔细查看storage/innobase/ut/crc32.cc的实现时,我们发现实际上是CRC32-C(循环冗余校验32位Castagnoli)。与普通的crc32相比,它使用了不同的生成多项式。

我找到了一篇相关的博文,里面解释得很详细,但是看起来比较费力:程序员必须让计算机理解指令,你必须编写简单的代码。从代码上看,基本上只是一个查表而已。

我们直接使用python重写代码语言: python代码运行次数: 0 复制Cloud Studio代码并运行 import structdef create_crc32c_table(): poly = 0x82f63b78 table = [] for i in range(): crc = i for _ in range (8): if crc & 1: crc = (crc >> 1) ^ poly else: crc >>= 1 table.append( crc) return tabledefcalculate_crc32c(data):crc = 0xFFFFFFFFfor byte in data:crc = crc32_slice_table[ (crc ^ byte) & 0xFF] ^ (crc >> 8)return crc ^ 0xFFFFFFFFcrc32_slice_table = create_crc32c_table() 虽然我们看不到代码,但是可以使用python重写。这就是蟒蛇的魅力。

我们再验证一下。测试让我们将其组织成脚本并进行测试。

首先,构造一个有坏块的文件。如果您有,则不需要此步骤。

代码语言:python 代码运行次数:0 复制Cloud Studio代码并运行 f1 = open ('/data/mysql_dev/data/db1/t.ibd','rb')f2 = open('/tmp/test_badpage_. ibd','wb')alldata = f1.read()baddata = alldata[:4 *4] + *b'ddcw' + alldata[4*4*4:]f2.write(baddata)f2.close() f1.close() 然后验证正常文件: 然后验证异常文件: bad 该区块确实验证通过了,也是我们故意破坏的位置。这意味着我们的验证工具没问题(太棒了!)。

综上所述,mysql ibd文件的坏块验证就是FIL_HEADER的crc32c值^FIL_DATA的crc32c值。然后将其与保存在文件开头/结尾的 crc32 值进行比较。

CRC32-C实际上有一个现成的库,可以使用pip install crc32c来安装。如果遇到坏块,可以使用ibd2sql工具来解析正常页面的数据。

用法我已经说过很多次了。我就不再介绍了。

参考:没有进行选项解析等。

[MYSQL]mysql坏块检查

站长声明

版权声明:本文内容由互联网用户自发贡献,本站不拥有所有权,不承担相关法律责任。如果发现本站有涉嫌抄袭的内容,欢迎发送邮件 举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。

标签:

相关文章

  • 手摇充电宝、太阳能转换器,这些“变态”的充电宝实用吗?

    手摇充电宝、太阳能转换器,这些“变态”的充电宝实用吗?

    用手机扫描二维码支付,骑自行车,通过微信或电话联系人,打开外卖应用程序并安排您的日常膳食。 无处不在的电力和互联网构成了现代人的全部生活。 触手可及的便利很容易让人意识不到它有多么宝贵,因为在风平浪静的日子里,停电、断网都是一个遥远的话题。 然而,一场大雨打

    06-21

  • 为企业上云提供关键支撑,需要打好“存储和超融合”两个基础

    为企业上云提供关键支撑,需要打好“存储和超融合”两个基础

    云计算的快速发展,让越来越多的中国企业开始探索上云之路。 超融合市场也经历了爆发式增长。 未来很长一段时间,整个市场将基于多云共存,而从私有云到混合云再到公有云,超融合无疑可以提供平滑过渡的解决方案。 超融合架构采用软件定义技术,整合计算、存储、网络等资源,

    06-18

  • webview,用于 C-C++ 的小型跨平台 webview 库,下载webview的源码_GitHub_酷徒使用 WebKit(在 GTK-Cocoa 上)

    webview,用于 C-C++ 的小型跨平台 webview 库,下载webview的源码_GitHub_酷徒使用 WebKit(在 GTK-Cocoa 上)

    GitHub 上的 webview 库是一个紧凑而高效的解决方案,用于在 C/C++ 中创建跨平台图形用户界面 (GUI)。 它利用本机系统 Web 视图,例如适用于 Linux 和 macOS 的 WebKit 以及适用于 Windows 的 Edge WebView2,提供轻量级且资源高效的替代方案。 该库支持双向 JavaScript 绑定

    06-18

  • 奈雪PRO店开始卖咖啡,是要抢星巴克市场吗?

    奈雪PRO店开始卖咖啡,是要抢星巴克市场吗?

    11月25日,奈雪新茶饮店模式“耀茗”在深圳正式亮相,并在南山金地科技园和福田天安数码城开设“双店”。 奈雪PRO也是继奈雪茶馆、奈雪酒屋、奈雪梦工厂之后的第四类商店。 据奈雪茶相关负责人介绍,与以往奈雪店多位于高端商圈不同,奈雪PRO将聚焦一线城市,进军商务办公区和

    06-17

  • 2023年7月融资月报

    2023年7月融资月报

    一、互联网巨头企业投资概况 7月值得关注的互联网巨头投资案例中,投资方包括阿里、美团、腾讯、小米等13家企业,其中阿里、小米投资2家-速度。 7月,阿里领投AR眼镜公司致敬未来天使1万美元,美团投资1亿元人民币入智谱华章公司B2轮,小米集团战略投资元潼科技数千万元,腾

    06-18

  • 红杉种子掌控150亿,正在找你

    红杉种子掌控150亿,正在找你

    这是一个非常引领潮流的场景。 投资界获悉,今日(2月28日),红杉中国种子基金(简称:红杉种子)宣布旗下第三只种子基金(红杉中国种子基金III)已完成募集4.8亿美元(约合人民币30亿元) )并于近期进入投资期。 截至目前,红杉种子已管理资金近亿元,成为国内管理规模最大

    06-17

  • eSignBao获超10亿元D轮投资,电子签名再次迎来行业最大融资!

    eSignBao获超10亿元D轮投资,电子签名再次迎来行业最大融资!

    在不可逆转的全球数字化趋势推动下,电子签名行业迎来新的重大利好。 2019年11月5日,e闪宝正式宣布获得深创投、恒大高科技集团、大辰财智领投,元一投资、泛创资本等机构跟投,合计超过1亿元。 D 系列融资。 本轮融资将继续用于继续加大产品和技术研发投入,聚焦签约和合同,

    06-18

  • 德高化学汽车半导体封装树脂材料项目已开工

    德高化学汽车半导体封装树脂材料项目已开工

    据天津高新区官方微信报道,4月26日,天津德高化学新材料有限公司“汽车半导体封装树脂材料项目”开工海洋科技园创新创业园建设正式启动。 据悉,本次已开工的汽车半导体封装树脂材料新生产线项目将在高新区创新创业园建设汽车半导体封装树脂材料洁净车间。 共建设3条生产线,

    06-06

  • 无锡光子芯谷创新中心正式开工建设

    无锡光子芯谷创新中心正式开工建设

    无锡滨湖发布 近日,无锡光子芯谷创新中心(一期)奠基仪式举行。 滨湖区区委书记孙海东宣布项目正式开工。 市科技局局长赵建平,上海交通大学地方研究院发展办公室主任李健,上海交通大学无锡光子芯片研究院院长、上海市教授金宪民交通大学、区领导高阳,王鲁新、姚旭江、李

    06-06

  • 智翔科技获数千万元A轮融资

    智翔科技获数千万元A轮融资

    投资界7月31日获悉,据36氪报道,深圳市智翔科技有限公司(以下简称“智翔科技”),一家停止IT综合运维产品供应商”)宣布获得数千万元A轮融资,由深圳市投资控股东海投资有限公司领投。 智翔科技于2019年5月注册成立,正式投资2018年开始研发,2018年4月推出第一代IT综合运

    06-18

  • 超过2.5GW!风能和太阳能进入哥伦比亚私人拍卖候选名单

    超过2.5GW!风能和太阳能进入哥伦比亚私人拍卖候选名单

    哥伦比亚地区电力经销商 Air-e 周二表示,22 家国内和国际公司已进入其私人组织的可再生能源拍卖的资格预审阶段。 Air-e表示,来自瑞典、法国、西班牙、挪威、中国、墨西哥和葡萄牙的公司以及哥伦比亚同行提交了出售39个风能和太阳能项目电力的提案,这些项目的总发电量超过

    06-08

  • 八亿空间拟投资16.8亿元建设电子材料基地项目

    八亿空间拟投资16.8亿元建设电子材料基地项目

    7月11日,上市公司八亿空间发布公告,拟利用超募资金投资建设电子材料基地项目。 “浙江上虞电子材料基地项目”。 公告显示,随着信息技术的不断发展和进步,全球对电子材料的需求不断增长。 中国作为全球电子材料行业主要的产业聚集地,一方面拥有巨大的市场需求,另一方面国

    06-06