【MySQL】 DB 回滚崩溃案例一则
2023-09-14 08:57:29 时间
一个测试人员对性能数据库进行性能压测 ,由于存储过程写的有问题,对一个大表进行大量更新为及时提交 ,见proc hang 住就kill 掉进程,然后长时间等待未果直接重启mysql 服务。之后错误日志中报错:
130516 20:47:36 InnoDB: Error: page 5 log sequence number 151 2771374516
InnoDB: is in the future! Current system log sequence number 131 3791365897.
InnoDB: Your database may be corrupt or you may have copied the InnoDB
InnoDB: tablespace but not the InnoDB log files. See
InnoDB: http://dev.mysql.com/doc/refman/5.1/en/forcing-recovery.html
InnoDB: for more information.
根据错误提示:数据文件的LSN比redo log的LSN要大,当系统尝试使用Redo Log去修复数据页面的时候,发现Redo Log LSN比数据页面还小,所以导致错误。数据页的LSN在一般情况下,都是小于Redo Log的,因为在事物提交或按照 innodb_trx_commit 设置的方式提交时,先将事物顺序写入Redo Log , 然后后台线程按照 max_prt_dirty_page 参数设置的比例刷新或当系统检测到当10秒内系统会执行刷新脏页操作,所以,数据页的LSN正常情况下永远会比Redo Log 的LSN 小。
此次问题是正是由于数据库在kill 掉进程之后执行回滚操作,但是未等回滚执行完毕就kill -9 mysql 导致回滚崩溃。
上述问题的解决方法 是设置innodb_force_recovery=3 或者4 ,需要逐个尝试。然后重启数据库服务 导出重要的数据,重建数据库。
innodb_force_recovery 可以设置为1-6,大的数字包含前面所有数字的影响。
1 (SRV_FORCE_IGNORE_CORRUPT): 忽略检查到的corrupt页。
2 (SRV_FORCE_NO_BACKGROUND): 阻止主线程的运行,如主线程需要执行full purge操作,会导致crash。
3 (SRV_FORCE_NO_TRX_UNDO): 不执行事务回滚操作。
4 (SRV_FORCE_NO_IBUF_MERGE): 不执行插入缓冲的合并操作。
5 (SRV_FORCE_NO_UNDO_LOG_SCAN):不查看重做日志,InnoDB存储引擎会将未提交的事务视为已提交。
6 (SRV_FORCE_NO_LOG_REDO): 不执行前滚的操作。
当设置参数值大于0后,可以对表进行select,create,drop操作,但insert,update或者delete这类操作是不允许的。当然即使innodb_force_recovery 0 ,你也可以DROP或CREATE表。如果某个表正在回滚而导致数据库崩溃,设置innodb_force_recovery为3,重启db 后,使得数据库被挂起而不需要回滚,然后舍弃导致失控回滚的表。
MySQL下的DB Link 在实际工作中,我们可能会遇到需要操作其他数据库实例的部分表,但又不想系统连接多库。此时我们就需要用到数据表映射。如同Oracle中的DBlink一般,使用过Oracle DBlink数据库链接的人都知道可以跨实例来进行数据查询,同样的,Mysql自带的FEDERATED引擎完美的帮我们解决了该问题。本篇文章介绍FEDERATED引擎的开启和使用。
【MySQL】利用binlog回滚DML操作 数据库运行过程中难免会发生误操作,特别是在测试环境 开发人员或测试人员有时会误删或者更新错误某些数据。这时可以用binlog闪回DML操作。
【MySQL】MyFlash 回滚mysql binlog MyFlash是由美团点评公司技术工程部开发维护的一个回滚DML操作的工具。该工具通过解析v4版本的binlog,完成回滚操作。相对已有的回滚工具,其增加了更多的过滤选项,让回滚更加容易。
MySQL · 源码分析 · InnoDB的read view,回滚段和purge过程简介 笔者最近开始学习InnoDB的内部机制,参照之前的几篇文章整理出InnoDB多版本部分相关的一些实现原理。 InnoDB undo log 漫游 性能优化·5.7 Innodb事务系统 InnoDB 事务系统 [MySQL 5.6] Innodb 新特性之 multi purge thread innodb purge操作 对于undo日志,第1篇文章写得非常清楚,图文并茂。
MySQL下的DB Link 在实际工作中,我们可能会遇到需要操作其他数据库实例的部分表,但又不想系统连接多库。此时我们就需要用到数据表映射。如同Oracle中的DBlink一般,使用过Oracle DBlink数据库链接的人都知道可以跨实例来进行数据查询,同样的,Mysql自带的FEDERATED引擎完美的帮我们解决了该问题。本篇文章介绍FEDERATED引擎的开启和使用。
【MySQL】利用binlog回滚DML操作 数据库运行过程中难免会发生误操作,特别是在测试环境 开发人员或测试人员有时会误删或者更新错误某些数据。这时可以用binlog闪回DML操作。
【MySQL】MyFlash 回滚mysql binlog MyFlash是由美团点评公司技术工程部开发维护的一个回滚DML操作的工具。该工具通过解析v4版本的binlog,完成回滚操作。相对已有的回滚工具,其增加了更多的过滤选项,让回滚更加容易。
MySQL · 源码分析 · InnoDB的read view,回滚段和purge过程简介 笔者最近开始学习InnoDB的内部机制,参照之前的几篇文章整理出InnoDB多版本部分相关的一些实现原理。 InnoDB undo log 漫游 性能优化·5.7 Innodb事务系统 InnoDB 事务系统 [MySQL 5.6] Innodb 新特性之 multi purge thread innodb purge操作 对于undo日志,第1篇文章写得非常清楚,图文并茂。
相关文章
- 【MySQL高级】MySql中常用工具及Mysql 日志
- MySQL意外终止的排查与处理(mysql进程意外终止)
- MySQL数据库设计:从零开始(mysql数据库设计案例)
- 解析MySQL实例解析:简单易懂的指导(mysql实例案例)
- 宾馆管理系统MySQL案例实践(宾馆mysql案例)
- MySQL查询结果的编号索引方法(mysql查询结果编号)
- MySQL中如何查询表中字段名称(mysql查询字段名称)
- MySQL 的数据库连接信息:获取、安全存储和使用(mysql数据库连接信息)
- MySQL赋值:实现数据库功能的关键技巧(mysql赋值)
- 解决MySQL忘记用户密码的方法(mysql忘记用户密码)
- SQL数据库迁移至MySQL:实现快速导入(sql数据库导入mysql)
- Mysql中储存的二进制秘密(mysql二进制数据)
- MySQL数据库开发实践:实战案例分析.(mysql数据库案例)
- MySQL简单应用实例:怎样才能更好的应用?(mysql简单案例)
- MySQL错误1060:解决方案及案例分析(mysql错误1060)
- MySQL远程使用:掌握基础知识,远程操作Mysql数据库。(mysql远程使用)
- MySQL如何查询字段内容的详细指南(mysql查询字段内容)
- MySQL字符串类型主键使用指南(mysql字符串主键)
- MySQL与苹果系统的兼容性详解(mysql苹果系统)
- MySQL存储过程:提高数据库操作效率的利器!(mysql存储过程内容)
- 型MySQL DB类型分析:深度挖掘新的可能性(mysql db 类)
- 【MySQL 自学指南丨25步助你掌握关键技能】(mysql自学)
- Win7中如何成功安装MySQL?(win7下安装mysql)
- MySQL数据表设计:高效实践指南(mysql数据表设计案例)
- 写敏感MySQL数据库:区分大小写字母的重要性(mysql 数据库大小)
- MySQL连表查询实例分析(连表查询 mysql)
- MySQL如何导入数据库(mysql怎样导入数据库)
- 空间MySQL极速开启地理空间旅程(mysql地理)
- 建立MySQL架构数据库Contos案例研究(contos mysql)
- MySQL中使用C语言增添改查记录(c mysql增添改查)
- MySQL中的AS功能使用介绍(as在mysql)
- MySQL数据库三范式设计案例分析(mysql三范式设计案例)
- MYSQL离线使用方法大揭秘不联网也能愉快地使用MySQL(mysql 不联网吗)