InnoDB的启动,关闭,恢复
InnoDB存储引擎是MySQL的存储引擎之一,因此InnoDB存储引擎的启动和关闭更准确地是指在MySQL实例的启动过程中对InnoDB表存储引擎的处理过程。
参数innodb_fast_shutdown
在关闭时,参数innodb_fast_shutdown影响着表的存储引擎为InnoDB的行为。该参数可取值为0、1、2。
- 0代表当MySQL关闭时,InnoDB需要完成所有的full purge和merge insert buffer操作,这会需要一些时间,有时甚至需要几个小时来完成。如果在做InnoDB plugin升级,通常需要将这个参数调为0,然后再关闭数据库。
- 1是该参数的默认值,表示不需要完成上述的full purge和merge insert buffer操作,但是在缓冲池的一些数据脏页还是会刷新到磁盘。
- 2表示不完成full purge和merge insert buffer操作,也不将缓冲池中的数据脏页写回磁盘,而是将日志都写入日志文件。这样不会有任何事务会丢失,但是MySQL数据库下次启动时,会执行恢复操作(recovery)。
当正常关闭MySQL数据库时,下一次启动应该会很正常。但是,如果没有正常地关闭数据库,如用kill命令关闭数据库,在MySQL数据库运行过程中重启了服务器,或者在关闭数据库时将参数innodb_fast_shutdown设为了2,MySQL数据库下次启动时都会对InnoDB存储引擎的表执行恢复操作。
参数innodb_force_recovery
参数innodb_force_recovery影响了整个InnoDB存储引擎的恢复状况。该值默认为0,表示当需要恢复时执行所有的恢复操作。当不能进行有效恢复时,如数据页发生了corruption,MySQL数据库可能会宕机,并把错误写入错误日志中。
但是,在某些情况下,我们可能并不需要执行完整的恢复操作,我们自己知道如何进行恢复。比如正在对一个表执行alter table操作,这时意外发生了,数据库重启时会对InnoDB表执行回滚操作。对于一个大表,这需要很长时间,甚至可能是几个小时。这时我们可以自行进行恢复,例如可以把表删除,从备份中重新将数据导入表中,这些操作的速度可能要远远快于回滚操作。
innodb_force_recovery还可以设置为6个非零值: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):不查看撤销日志(Undo Log),InnoDB存储引擎会将未提交的事务视为已提交。
- 6(SRV_FORCE_NO_LOG_REDO):不执行前滚的操作。
需要注意的是,当设置参数innodb_force_recovery大于0后,可以对表进行select、create、drop操作,但insert、update或者delete这类操作是不允许的。
模拟故障
我们来做个实验,模拟故障的发生。在第一会话中,对一张接近1 000W行的InnoDB存储引擎表执行更新操作,但是完成后不要马上提交:
start transaction;
update Profile set password='';
--start transaction语句开启了事务,同时防止了自动提交的发生,update操作则会产生大量的回滚日志。这时,我们人为地kill掉MySQL数据库服务器。
ps-ef|grep mysqld
kill-9 pid
通过kill命令,我们人为地模拟了一次数据库宕机故障,当MySQL数据库下次启动时会对update的这个事务执行回滚操作,而这些信息都会记录在错误日志文件中,默认后缀名为err。如果查看错误日志文件,可得到如下结果:
090922 13:40:20 InnoDB:Started;log sequence number 6 2530474615 InnoDB:Starting in background the rollback of uncommitted transactions 090922 13:40:20 InnoDB:Rolling back trx with id 0 5281035,8867280 rows to undo InnoDB:Progress in percents:1090922 13:40:20 090922 13:40:20[Note]/usr/local/mysql/bin/mysqld:ready for connections. Version:'5.0.45-log'socket:'/tmp/mysql.sock'port:3306 MySQL Community Server(GPL) 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 InnoDB:Rolling back of trx id 0 5281035 completed 090922 13:49:21 InnoDB:Rollback of non-prepared transactions completed
可以看到,如果采用默认的策略,即把innodb_force_recovery设为0,InnoDB会在每次启动后对发生问题的表执行恢复操作,通过错误日志文件,可知这次回滚操作需要回滚8 867 280行记录,总共耗时约9分多钟。
我们做再做一次同样的测试,只不过在启动MySQL数据库前将参数innodb_force_recovery设为3,然后观察InnoDB存储引擎是否还会执行回滚操作,查看错误日志文件,可看到:
090922 14:26:23 InnoDB:Started;log sequence number 7 2253251193 InnoDB:!innodb_force_recovery is set to 3! 090922 14:26:23[Note]/usr/local/mysql/bin/mysqld:ready for connections. Version:'5.0.45-log'socket:'/tmp/mysql.sock'port:3306 MySQL Community Server(GPL)
这里出现了“!”,InnoDB警告你已经将innodb_force_recovery设置为3,不会进行undo的回滚操作了。因此数据库很快启动完成,但是你应该很小心当前数据库的状态,并仔细确认是否不需要回滚操作。
相关文章:
微软推出提点神器动态ReLU,可能是最好的ReLU改进
作者 | Vincent 来源 | 晓飞的算法工程笔记 简介ReLU是深度学习中很重要的里程碑,简单但强大,能够极大地提升神经网络的性能。目前也有很多ReLU的改进版,比如Leaky ReLU和 PReLU,而这些改进版和原版的最终参数都是固定的。所以论…

监控 monit
官方说明文档 http://mmonit.com/monit/documentation/monit.html 实例 http://mmonit.com/wiki/Monit/ConfigurationExamples 下载最新软件包 wget http://mmonit.com/monit/dist/monit-5.4.tar.gz monit 介绍 monit是一个实用程序,用于在 Unix 系统上管理和监视…

框架窗口的尺寸设置
将窗口分割为几块,横向分用ROWS属性,纵向分用COLS属性,每一块的大小可以由这两个属性的值来实现。 <frameset cols#> 例:<frameset cols"100,200,300"> <frameset rows#> 例:<…

C语言双链表遍历,插入,删除
#include<stdio.h> #include<stdlib.h> #include <string.h> #define bzero(a, b) memset(a, 0, b)//windows平台下无bzero函数。 增加宏拓展移植性struct node{int data; //有效数据 struct node *pLast;//指向上一个节点的指针…

详解.NET的RAD功能
作者:中国计算机报Visual Studio.NET 拥有开发者建立一个成功而强大的中间层应用服务所需要的所有开发工具,利用这些工具,开发者可以: 1.保障消息传播和利用微软消息队列(MSMQ)跨平台的通讯; 2…

Java初学者如何自学和自己定位解决问题
注: OneCoder 即本人苦逼Coder 今天群里(Java Coder群:91513074)的朋友,问我该如何看帮助文档,或者说在遇到问题的时候如何解决。希望我能介绍一下我的方法。 这个OneCoder其实没有资格高谈阔论,只能说说个人的习惯和…
仅用 4 小时,吃透“百度太行”背后硬科技!
我们正处于一个 AI 生万物,万物生 AI 的时代,云与 AI 也如共同体,水乳相容不可分割。无论是企业还是政府机构、社会团体,上云已然成为一个不可抗的趋势,尤其是 AI 的发展,更是离不开强大、灵活、便捷的云计…

(转)java 中的try catch finally 语句中含有return语句的执行情况(总结版)
原处:http://blog.csdn.net/ns_code/article/details/17485221在这里看到了try catch finally块中含有return语句时程序执行的几种情况,但其实总结的并不全,而且分析的比较含糊。但有一点是可以肯定的,finally块中的内容会先于try…

希捷携全线企业级解决方案出席ODCC,Exos X18与Exos 2X14硬盘斩获两项大奖
2020年9月15日,数据存储与管理解决方案提供商希捷科技公司亮相2020开放数据中心(ODCC)峰会,并发表了以“数据新视界”为主题的演讲。希捷银河(Exos)18TB硬盘与希捷银河(Exos)2X14 MA…

动态装载和使用类型
作者:微软Reflection提供诸如Microsoft Visual Basic.NET和JScript语言编译器使用的底层结构来实施隐性后绑定。绑定是定位与某一特定类型相对应的声明的过程。当这个过程发生在运行的时候,而不是编译的时候,它被称为后绑定。Visual Basic.NE…

求1 + 2 + 3...+ n的和
题目:求1 2 3 ... n 的和 要求:不能使用乘除法、for、while、if、else、switch、case等关键字以及条件判断语句(A?B:C) 答: #include "stdafx.h" #include <iostream>using namespace std;//1、函数查找表法 typedef in…

Debussy的安装
下载完成后对软件安装包进行解压缩,得到安装文件和破解文件。 双击Debussy-54v9-NT.exe进行安装,出现以下界面,选择安装的路径。 选择安装类型,最好选择typical类型。 选择相关配置。 进行安装。 选择Yes继续,dont dis…

如何调试你的C#程序
作者:龙山文化 文章来源:ASPCool.com欢迎来到C#的奇妙天空,在这里,希望你能获得你想获得的东西,.我们真诚希望能给你带来巨大的帮助,带你进入另外一个广阔的空间。 Come on. Follow me and then U can W…

SSAS使用时间智能解决本年累计、同比、环比【转载】
通常,我们需要使用MDX来定义本年累计、同比、环比等一系列基于时间维度的计算指标。但是这样有一个麻烦的地方就是比如我有50个基础指标,每个指标都需要本年累计,那我就需要写50遍下面的语句:create member CURRENTCUBE.[MEASURES…
良心贴!没想到 Google 排名第一的编程语言,可以这么简单!
作为最近几年最火的编程语言,Python(没有之一)已经走过了20多个年头。也难怪,作为大数据时代和人工智能时代的必备语言,Python 的优点太多了,语言简洁、易学、开发效率高、可移植性强......不过它火起来的主…

报错 org.springframework.beans.factory.BeanCreationException
2019独角兽企业重金招聘Python工程师标准>>> 一.问题背景: spring mvc eclipse启动报错:org.springframework.beans.factory.BeanCreationException 二.分析 1.写了一个名为“User”的 实体bean,然后写了有参构造函数,…
醉没醉,带上智能手机走两步就知道
来源 | HyperAI超神经场景描述:斯坦福大学和匹兹堡大学的研究小组,最近发表了一项用智能手机检测醉酒状态的研究,可利用步态特征检测相应的血液和呼吸酒精浓度。以后喝没喝多,用你的手机测一测就知道。关键词:智能手机…

Linux编程常见问题
错误提示:Makefile:2: *** 遗漏分隔符 。 停止。原因makefile中 gcc语句前 缺少一个 tab分割符错误提示: bash: ./makefile: 权限不够原因 makefile 是文本文件不可执行,即使是root,也会权限不够我们应该在命令行下使用make&#…

网络工程师转售前的条件
昨天出差回来的时候已是凌晨四点,辛勤工作的早餐已经开始忙碌了。你走之后的第一周,房子空荡荡的,就剩下你的头发和发髻,还有你留下的信。真的很对不起你,从参加工作开始,我们总是聚少离多,很多…

python流程控制:while循环
python编程中whihe语句用于循环执行程序,即在某条件下,循环执行某段程序,以处理需要重复处理的相同任务。 while循环语句格式: while <判断条件>:执行语句 count 0 while (count <9):print("The count …
阿里动物园再添新丁,小蛮驴搞定物流最后三公里
作者 | 硬核云顶宫责编 | 李雪敬头图 | CSDN 下载自视觉中国今天的云栖大会上,阿里动物园再添新丁,不再这个新加入的动物既不是骡子也不是马,而是小蛮驴,这是一个专门解决物流最后三公里的AI机器人。今天的云栖大会,阿…

C语言中的CONST使用
C中的CONST使用 const是一个C语言的关键字,它限定一个变量不允许被改变。使用const在一定程度上可以提高程序的安全性和可靠性。 const的使用是c语言中一个比较微妙的地方,请看下面几个问题。 问题:const变量 和 常量 为什么下面的例子在…

一个项目可以有多个源代码路径
这样我们就建立了一个新的代码路径~~

x-http-wrapper: 如何解决每次发版时,修改http相关代码造成的错误!(Android、iOS、h5)...
其实是我做了个开源工具(^__^),拿出来给大家鉴赏下,欢迎大家提意见项目:github.com/xuyt11/x-ht… 欢迎关注和star 。功能:这是一个http相关代码的创建工具。 现在我们每一次发版,基本上都会涉及到http相关的修改&…
设计一款编程语言有多难?
作者 | DAVID CASSEL译者 | 弯月,责编 | 郑丽媛题图 | 自视觉中国来源 | CSDN(ID:CSDNnews)最近,Ruby编程语言的创始人兼主设计师、云平台即服务公司Heroku的Ruby首席架构师松本行弘在一次演讲中表示,由松本…

在 DW 中插入 Flash 的参数详解
作者:macromedia 文章来源: 蓝色理想 在Dreamweaver中插入FLASH后还可以有很多的控制参数,点属性面板右下的参数钮,就会有参数和值的加入。大家可以自由的控制, 以下内容摘自 Flash MX 2004 帮助文档 参数和属性下…

C语言中文件的读写(fputc和fgetc)(putchar和getchar)
文件打开之后就可以对文件进行读写了。 1、fputc(ch,fp); 将字符ch输出到(即写到)fp所指向的文件中。如果输出成功,返回字符ch的值,否则返回EOF(-1) putchar(c) 是从fputc中派生出来的,在stdio.…

转 微博 linux中ctime,mtime,atime的区别
http://blog.sina.com.cn/s/blog_67178440010101gr.html 当你同熟练的UNIX用户进行交谈时,你经常会听到他们傲慢地讲出术语“改变时间(change time)”和“修改时间(modification time)”。对于许多人(和许多字典而言),改变和修改是相同的。这里会有什么不同那&#…

WEB 打印的相关技术分析
文/谢康 做Web开发的人员一定都会面临一个共同的难题,那就是打印。的确,相对于Windows桌面应用程序来讲,Web应用程序的打印有种种限制,技术人员在项目开发过程中经常会遇到用户这样或那样的需求. 做过桌面应用开发的人都会非常熟悉…

jquery validate使用
一、用前必备 官方网站:http://bassistance.de/jquery-plugins/jquery-plugin-validation/ API: http://jquery.bassistance.de/api-browser/plugins.html 当前版本:1.5.5 需要JQuery版本:1.2.6, 兼容 1.3.2 <script src"../js/jquer…