前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【Percona】innodb_corrup_table_action参数拯救你的数据库

【Percona】innodb_corrup_table_action参数拯救你的数据库

原创
作者头像
贺春旸的技术博客
发布2023-09-27 08:26:49
3590
发布2023-09-27 08:26:49
举报
文章被收录于专栏:DBA 平台和工具

当mysqld服务进程访问损坏的表时,数据库会直接崩溃退出。如果在遭遇到损坏的表时,不希望出现这种结果,请将参数innodb_corrupt_table_action变量值设置为​​salvage​​,该值会跳过损坏的表,不会使mysqld服务进程崩溃,导致整个数据库无法启动。

注:

1)MySQL没有此参数,请切换至Percona或者MariaDB

2)该参数只能适配独立表空间 innodb_file_per_table = 1

故障复现

1)创建一个t1表,然后到/data/目录下,用重定向命令清空数据

代码语言:javascript
复制
echo > t1.ibd

2)直接shutdown关闭mysqld进程

3)启动mysqld进程后,如果没有在my.cnf文件里增加该参数,启动时会报错,报错日志如下:

2023-02-10T16:30:18.491764+08:00 0 [Warning] [MY-012637] [InnoDB] 1024 bytes should have been read. Only 0 bytes read. Retrying for the remaining bytes.

2023-02-10T16:30:18.491777+08:00 0 [Warning] [MY-012638] [InnoDB] Retry attempts for reading partial data failed.

2023-02-10T16:30:18.491789+08:00 0 [ERROR] [MY-012642] [InnoDB] Tried to read 1024 bytes at offset 0, but was only able to read 0

2023-02-10T16:30:18.491801+08:00 0 [ERROR] [MY-012646] [InnoDB] File ./test/t1.ibd: 'read' returned OS error 0. Cannot continue operation

2023-02-10T16:30:18.491812+08:00 0 [ERROR] [MY-012981] [InnoDB] Cannot continue operation.

4)将参数innodb_corrupt_table_action变量值设置为​​salvage​​,启动mysqld进程,再次查看该表

代码语言:javascript
复制
mysql> select * from t1;
ERROR 1812 (HY000): Tablespace is missing for table `test`.`t1`.

5)你可以在其他节点上DUMP数据还原,从而恢复t1表。

总结

在甲骨文MySQL里,解决方案是将参数innodb_force_recovery值设置为1-6,确保数据库可以正常启动,但值大于0后,可以对表进行 select, create, drop 操作,而 insert, update 或者 delete 这类操作是不允许的,影响的是全局。

在Perocna/MariaDB里,可以用innodb_corrupt_table_action参数代替innodb_force_recovery,这样没有损坏的表,可以正常读写操作,影响的是局部。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 当mysqld服务进程访问损坏的表时,数据库会直接崩溃退出。如果在遭遇到损坏的表时,不希望出现这种结果,请将参数innodb_corrupt_table_action变量值设置为​​salvage​​,该值会跳过损坏的表,不会使mysqld服务进程崩溃,导致整个数据库无法启动。
  • 故障复现
  • 总结
相关产品与服务
云数据库 MySQL
腾讯云数据库 MySQL(TencentDB for MySQL)为用户提供安全可靠,性能卓越、易于维护的企业级云数据库服务。其具备6大企业级特性,包括企业级定制内核、企业级高可用、企业级高可靠、企业级安全、企业级扩展以及企业级智能运维。通过使用腾讯云数据库 MySQL,可实现分钟级别的数据库部署、弹性扩展以及全自动化的运维管理,不仅经济实惠,而且稳定可靠,易于运维。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档