k int(12) unsigned NOT NULL DEFAULT ‘0’,
c char(120) NOT NULL DEFAULT ‘’,
pad char(60) NOT NULL DEFAULT ‘’,
paymont double(10,2) DEFAULT NULL,
PRIMARY KEY (id),
KEY k_1 (k)
) ENGINE=InnoDB AUTO_INCREMENT=10002 DEFAULT CHARSET=utf8 MAX_ROWS=1000000
1 row in set (0.00 sec)

mysql> select * from t_test;
±—±--------±------------±------------±----------+
| id | k | c | pad | paymont |
±—±--------±------------±------------±----------+
| 1 | 4992833 | 83868641912 | 67847967377 | 200000.00 |
| 2 | 5019684 | 38014276128 | 23183251411 | NULL |
| 3 | 5042604 | 33973744704 | 38615512647 | NULL |
| 4 | 5020133 | 37002370280 | 63947013338 | NULL |
| 5 | 4998122 | 44257470806 | 34551750492 | NULL |
| 6 | 5005844 | 37216201353 | 05161542529 | NULL |
| 7 | 5013709 | 33071042495 | 91798303270 | NULL |
| 8 | 4999376 | 73754818686 | 76460662325 | NULL |
| 9 | 5272683 | 26482547570 | 30508501104 | NULL |
| 10 | 5033749 | 05677017559 | 29489382504 | NULL |
| 11 | 5495590 | 69916792160 | 87387995487 | NULL |
| 12 | 4877585 | 06636928111 | 89292458800 | NULL |
±—±--------±------------±------------±----------+
12 rows in set (0.00 sec)

模拟表的页损坏
要模拟t_test表页损坏,其实很简单,可以通过vi工具,在t_test.ibd文件开始行添加N个!就可以

重启MySQL服务
模拟损坏之后,就重启MySQL数据库实例,同时看MySQL数据库错误日志

2020-09-01T12:58:25.207448Z 0 [Note] InnoDB: Loading buffer pool(s) from /u02/log/3308/iblog/ib_buffer_pool
2020-09-01T12:58:25.209575Z 0 [ERROR] InnoDB: Space ID in fsp header is 134217728, but in the page header it is 660067840.
2020-09-01T12:58:25.331762Z 0 [ERROR] [FATAL] InnoDB: Tablespace id is 48 in the data dictionary but in file ./sbtest/t_test.ibd it is 18446744073709551615!
2020-09-01 20:58:25 0x7ffb8d022700 InnoDB: Assertion failure in thread 140718379247360 in file ut0ut.cc line 942
InnoDB: We intentionally generate a memory trap.
InnoDB: Submit a detailed bug report to http://bugs.mysql.com.
InnoDB: If you get repeated assertion failures or crashes, even
InnoDB: immediately after the mysqld startup, there may be
InnoDB: corruption in the InnoDB tablespace. Please refer to
InnoDB: http://dev.mysql.com/doc/refman/5.7/en/forcing-innodb-recovery.html

InnoDB: about forcing recovery.

看到没,此时数据库实例已经无法正常启动了,原因是因为t_test.ibd文件头部记录的Tablespace id与数据字典不一致。怎么办

设置innodb_force_recovery
因为此时t_test.ibd文件头部记录的Tablespace id与数据字典不一致,只能在my.cnf文件中添加innodb_force_recovery=4,然后启动MySQL数据库实例

mysql> show tables;
±-----------------+
| Tables_in_sbtest |
±-----------------+
| sbtest1 |
| t_pay_test |
| t_test |
±-----------------+
3 rows in set (0.00 sec)

mysql> select * from t_test;
ERROR 1812 (HY000): Tablespace is missing for table sbtest.t_test.
mysql>
mysql> drop table t_test;

Query OK, 0 rows affected (0.02 sec)

由于此时已经无法识别t_test.ibd文件了,此时只能drop掉t_test表了。
如果只是损坏了页数据,可以用下面的sql语句恢复业务数据

insert ignore into t_test_recovery select * from t_test limit 5;
insert ignore into t_test_recovery select * from t_test limit 10;

MySQL数据库页损坏怎么办,innodb_force_recovery参数帮你解决问题
https://mp.weixin.qq.com/s/l6KZP4glnwwuDQxU98A0Mw

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数软件测试工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年软件测试全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
img
img
img
img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上软件测试开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新

如果你觉得这些内容对你有帮助,可以添加V获取:vip1024b (备注软件测试)
img

一个人可以走的很快,但一群人才能走的更远。不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎扫码加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

056029)]

一个人可以走的很快,但一群人才能走的更远。不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎扫码加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐