MySQL [ERROR] [MY-013183]
[ERROR] [MY-013183] [InnoDB] Assertion failure,回顾记录一次因数据库(MySql 8.0)操作不当导致的生产事故顺便记录下正常重启发生的意外和解决方法(关于 [MY-013183] [InnoDB] 论坛描述,MY-013183只是断言抛出问题内存问题,应该是由于缓冲区落盘发生意外导致的,具体处理需要结合错误详细信息进行分析。如果文档中有不对的地方或有更好的方法建议,希望大家不吝赐教)
数据库重启,没启动成功
业务正常一般不会去操作数据库,除非宕机。无奈数据库安装配置存在问题需要修改配置文件使其永久生效,数据生产较快当时已经有千万的量了,么办法只有当天晚上进行数据库调整,结果数据库丝毫不给面子直接抛出一个错误[ERROR] [MY-013183] 。
好在通过错误详细分析问题可以通过数据库强制恢复,通过配置文件设置innodb_force_recover(官网描述可连接查看)从1到6成功启动(这个情况最多设置到4数据库就会恢复,如果你设置到6才启动上那就只有恭喜你了),再取消innodb_force_recover
配置重启就可以收工了
数据库意外重启,抛异常连接不上
数据库意外无法正常运行(那天业务系统走得很安详,我也走得很安详),上服务器一看根目录满了,这也是没谁了反手就是一个赞(数据库安装没有使用大存储卷),麻溜清理了磁盘,释放好空间开始重启数据库(以为可以正常启动,结果当头一棒 )查看数据库服务状态是runing,高高兴兴的去连接好家伙连不上(连端口没监听)给我表里不一。
发来的数据库错误信息 [ERROR] [MY-013183] [InnoDB] Assertion failure: fil0fil.cc:10754:initial_fsize == (file->size * phy_page_size) thread 140530362709760,当我看到这个断言的时候心都凉了半截,innodb_force_recover
设置1-6设置了两遍,都设置到16了(6以上都是安6处理,一般都是1-6)也没恢复回来。现在分析下错误信息应该就是落盘idb文件分页有损坏导致断言过不了,当时不行啊没有分析的时间电话都打爆了,领导都插着手站背后看得我瑟瑟发抖,只有简单整理下打算放弃当前数据库实例,通过数据库源文件进行数据库还原(别问为什么不从备份中还原,问就是还没开始做备份我就只知道这些了)通过百度大法明确了处理流程(只有逐表恢复)
- 拷贝旧库data目录,处理事故首先确保拷贝,避免反向修复无法回头也是为了保护事故现场(此处省略,后面操作都是用拷贝的这部分文件)
- 创建同版本临时数据库实例(此处省略)
- 创建与原数据库一致的数据库及表,可以从测试环境导出结构调整与生产环境一致。如果这个没有那我只有鼓掌了但是也不要慌可通过 ibd2sdi — InnoDB 表空间 SDI 提取
-
- ① 表名
- ② 列名和类型,列对象里面有类型对应的具体名称
- ③ 长度
4. 备份临时数据库data目录(此处省略)
- 5. 旧库ibd替换新的ibd文件,逐个修改替换表的ibd文件(如果是MyISAM引擎的表,此阶段应该就可以使用了)
- .ibd文件包含tablespace id,需要修改恢复数据.ibd文件的tablespace id和临时表建立的相同标记处为修改处需保持一致
- vi模式下,输入 :%!xxd 进行16进制编辑,使用 :%!xxd -r 转换为二进制保存或者使用winHex(编辑16进制)
- 另一种ibd解绑和绑定方法是通过命令(这个应该是之前版本的,我尝试后失败了,仅供了解)
- 解除绑定:alter table user discard tablespace;(执行完sql后,表现为表的ibd文件被删除,但是千万不要自己手动删除 )
- 绑定数据表.frm和数据.idb的关系:alter table user import tablespace;
- 注:拷贝后注意权限是正确,替换临时库ibd文件后无法正常启动可以清理或替换掉ib_logfile0、ib_logfile1,配置
innodb_force_recover=6
- 6. 备份临时库还原至正式新数据库实例中
- 备份:mysqldump -h 主机名 -P 端口 -u 用户名 -p 数据库名 > 备份文件.sql
- 还原:mysql> source 备份文件.sql
- 注:备份文件.sql会清理一次表然后再创建写入数据库
- 以上6步操作数据逐步恢复,本以为万事大吉,可天有不测风云。ibd分页坏了,当读取到坏页位置时该出问题的时候还是得出问题,读取到损坏页时数据库会宕掉重启日志会输出多少页读取异常(当时忙着解决问题没存错误信息),只有找了个ibd操作工具Inno_space清理掉损坏页那一页的数据就丢了(有几页坏了丢了两三百条数据),好在损坏页数据可以不用完全恢复。
最后
- 虽然数据大部分恢复了,但是页坏了的那部分数据没恢复,如果这部份数据是比较重要,损失就相当严重了。
- 希望大家服务器一定要做好相关监控(cpu、内存、网络、磁盘等)、数据库按照相关备份方案做好备份
- 也希望大家永远也不需要参考这篇文章,都是教训呀。
- 欢迎大家留言讨论
参考引用
- 关于 [MY-013183] [InnoDB] CD Tavares 论坛描述:https://forums.mysql.com/read.php?22,672274,672274
- 官网强制恢复InnoDB:https://dev.mysql.com/doc/refman/8.0/en/forcing-innodb-recovery.html
- 官网ibd2sdi — InnoDB 表空间 SDI 提取实用程序:https://dev.mysql.com/doc/refman/8.0/en/ibd2sdi.html
- HuaLingPiaoXue MYSQL8.0 根据IBD文件查看表结构:https://blog.csdn.net/HuaLingPiaoXue/article/details/104953594
- 巴老板 mysql frm ibd 恢复工具_MySQL innodb引擎下根据.frm和.ibd文件恢复表结构和数据:https://blog.csdn.net/weixin_36275231/article/details/113253297
- Inno_space工具:https://github.com/baotiao/inno_space
MySQL [ERROR] [MY-013183]的更多相关文章
- 关于mysql登录异常处理方法 - mysql ERROR 1045 (28000)
今天在开发过程中遇到了一个很令人头痛的问题?? 使用 百度经验的步骤 [http://jingyan.baidu.com/article/495ba841ef412d38b30edeb2.html]修 ...
- MySQL ERROR 1005: Can't create table (errno: 150)的错误解决办法
在mysql 中建立引用约束的时候会出现MySQL ERROR 1005: Can't create table (errno: 150)的错误信息结果是不能建立 引用约束. 出现问题的大致情况 1. ...
- 彻底解决phpcms v9升级后,文章发布出现: Mysql 1267错误:MySQL Error : Illegal mix of collations 解决办法
彻底解决phpcms v9升级后,文章发布出现: MySQL Query : SELECT * FROM `withli_a`.`v9_keyword` WHERE `keyword` = '吼吼' ...
- mysql: error while loading shared libraries: libmysqlclient.so.16
[root@host_41 mysql]# mysqlmysql: error while loading shared libraries: libmysqlclient.so.16: cannot ...
- MySQL Error Handling in Stored Procedures 2
Summary: this tutorial shows you how to use MySQL handler to handle exceptions or errors encountered ...
- MySQL Error Handling in Stored Procedures
http://www.mysqltutorial.org/mysql-error-handling-in-stored-procedures/ mysql存储过程中的异常处理 定义异常捕获类型及处 ...
- [转]MySQL: Starting MySQL….. ERROR! The server quit without updating PID file
转自: http://icesquare.com/wordpress/mysql-starting-mysql-error-the-server-quit-without-updating-pid-f ...
- mysql ERROR 1045 (28000): Access denied for user解决方法
一 这种情况下是 root@% update mysql.user set host='%' where user='root' and host='localhost'; flush privile ...
- MySQL: Starting MySQL….. ERROR! The server quit without updating PID file解决办法
MySQL: Starting MySQL….. ERROR! The server quit without updating PID file解决办法 1 问题 [root@localhost m ...
- centos6.6下编译安装mysql5.6之后启动失败:Starting MySQL... ERROR! The server quit without updating PID file (/var/lib/mysql/localhost.localdomain.pid).
今天在编译安装mysql5.6时候出现Starting MySQL... ERROR! The server quit without updating PID file (/var/lib/mysq ...
随机推荐
- python 中 *args he **kwargs的区别
''' 一 *args 和 **kwargs 的区别? *args 表示任意个 无名参数, 类型是元祖 tuple. **kwargs 表示的是关键字的参数 传入的参数是 dict 类型. 当*和** ...
- ApacheCN Linux 译文集 20211129 更新
笨办法学 Linux 中文版 练习 0:起步 练习 1:文本编辑器,vim 练习 2:文本浏览器,少即是多 练习 3:Bash:Shell..profile..bashrc..bash_history ...
- [源码解析] 模型并行分布式训练 Megatron (3) ---模型并行实现
[源码解析] 模型并行分布式训练 Megatron (3) ---模型并行实现 目录 [源码解析] 模型并行分布式训练 Megatron (3) ---模型并行实现 0x00 摘要 0x01 并行Tr ...
- openstack horizon 学习(3) DataTable
上一篇中粗略的讲了下openstack中horizon的dashboard和panel的添加,本打算在这章中对有关于pluggable settings中的配置做详细的总结,然放弃了这念头.原因是搞懂 ...
- jdk、jre、javase、javaee、javame的区别
Jdk定义 JAVA的开发工具包,包含jre,可以进行编译和运行Java程序. Jre定义 JAVA的运行环境,如果不需要进行编译程序,则可只安装jre. Javase定义 标准版Java SE(Ja ...
- Swift循环的介绍
循环的介绍 在开发中经常会需要循环 常见的循环有:for/while/do while. 这里我们只介绍for/while,因为for/while最常见 for循环的写法 最常规写法 // 传统写法 ...
- 懒加载--初步理解. by:王朋
懒加载(LazyLoad),又称为延迟加载. 举个例子,当我们在用网易新闻App时,看着那么多的新闻,并不是所有的都是我们感兴趣的,有的时候我们只是很快的滑过,想要快速的略过不喜欢的内容,但是只要滑动 ...
- ◆JAVA加密解密-3DES
从数据安全谈起 当你使用网银时,是否担心你的银行卡会被盗用? 当你和朋友用QQ进行聊天时,是否担心你的隐私会被泄露? 作为开发者,编写安全的代码比编写优雅的代码更重要,因为 ...
- Nginx+Tomcat 实现负载均衡 ,动静分离集群部署
Nginx + Tomcat 实现负载均衡,动静分离集群部署 1.Nginx实现负载均衡原理 2.Nginx配置反向代理主要参数 3.实验 1.Nginx实现负载均衡原理: Nginx服务器作为前端, ...
- 对常用I/O模型进行比较说明
一.IO模型的四个特性 关注的是消息通信机制,即调用者在等待一件事情的处理结果时,被调用者是否提供完成状态的通知. 同步:synchronous,被调用者并不提供事件的处理结果相关的通知消息,需要调用 ...