强制 InnoDB 恢复,启动 MySQL 数据库

要调查数据库页面损坏,您可以使用从数据库转储表 SELECT ... INTO OUTFILE。通常,以这种方式获得的大多数数据是完整的。严重损坏可能导致语句或 后台操作崩溃或断言,甚至导致前滚恢复崩溃。在这种情况下,您可以使用该 选项强制启动存储引擎,同时防止后台操作运行,以便您可以转储表。例如,您可以在重新启动服务器之前将以下行添加到选项文件的部分: SELECT * FROM tbl_nameInnoDBInnoDBinnodb_force_recoveryInnoDB[mysqld]

[mysqld]
innodb_force_recovery = 1
警告
innodb_force_recovery 在紧急情况下 仅设置为大于0的值,以便您可以启动InnoDB和转储表。
在此之前,请确保您拥有数据库的备份副本,以备需要重新创建时使用。值为4或更大可能会永
久损坏数据文件。innodb_force_recovery在成功测试数据库的单独物理副本上的设置后,仅在
生产服务器实例上使用 4或更高的设置。强制InnoDB恢复时,您应该始终使用
innodb_force_recovery=1并且只在必要时以递增方式增加值。

innodb_force_recovery默认为0(没有强制恢复的正常启动)。允许的非零值为 innodb_force_recovery1到6.较大的值包括较小值的功能。例如,值3包括值1和2的所有功能。

如果您能够以innodb_force_recovery3或更小的值转储表 ,那么您相对安全,只有损坏的单个页面上的某些数据会丢失。值为4或更高被认为是危险的,因为数据文件可能会永久损坏。值6被认为是极其严重的,因为数据库页面处于过时状态,这反过来可能会在B树 和其他数据库结构中引入更多损坏。

作为安全措施,InnoDB防止 INSERT, UPDATE或 DELETE操作时, innodb_force_recovery是大于0的较大innodb_force_recovery 的4米以上的地方设置InnoDB在只读模式。

1 (SRV_FORCE_IGNORE_CORRUPT)
即使检测到损坏的页面,也允许服务器运行 。尝试 跳过损坏的索引记录和页面,这有助于转储
表。 SELECT * FROM tbl_name
2 (SRV_FORCE_NO_BACKGROUND)
防止主线程和任何清除线程运行。如果在清除操作期间发生崩溃 ,则此恢复值会阻止它。
3 (SRV_FORCE_NO_TRX_UNDO)
崩溃恢复后 不运行事务 回滚。
4 (SRV_FORCE_NO_IBUF_MERGE)
阻止插入缓冲区合并操作。如果它们会导致崩溃,则不会这样做。不计算表 统计信息。此值可
能会永久损坏数据文件。使用此值后,请准备删除并重新创建所有二级索引。设置 InnoDB为只读。
5 (SRV_FORCE_NO_UNDO_LOG_SCAN)
启动数据库时 不查看撤消日志: InnoDB将未完成的事务视为已提交。此值可能会永久损坏数据
文件。设置InnoDB为只读。
6 (SRV_FORCE_NO_LOG_REDO)
不执行与恢复相关的重做日志前 滚。此值可能会永久损坏数据文件。使数据库页面处于过时状
态,这反过来可能会在B树和其他数据库结构中引入更多损坏。设置 InnoDB为只读。

您可以SELECT从表中转储它们。使用innodb_force_recovery3或更小的 值,你可以DROP或 CREATE表。DROP TABLE也支持 innodb_force_recovery大于3 DROP TABLE的innodb_force_recovery值。大于4 的值不允许 。

如果您知道给定的表导致回滚崩溃,则可以删除它。如果您遇到由大量导入失败导致的失控回滚,或者ALTER TABLE您可以终止mysqld进程并设置 innodb_force_recovery为 3在没有回滚的情况下启动数据库,然后DROP启动导致失控回滚的表。

如果表数据中的损坏阻止您转储整个表内容,则带有子句的查询可能能够在损坏的部分之后转储表的一部分。 ORDER BY primary_key DESC

如果一个高innodb_force_recovery 值是必需的开始InnoDB,有可能是,可能导致(含有查询的复杂查询损坏的数据结构WHERE,ORDER BY或其它条款)失败。在这种情况下,您可能只能运行基本SELECT * FROM t 查询。

参考文档:强制InnoDB恢复

原文地址:http://blog.51cto.com/linux10000/2177265

时间: 2024-07-31 19:21:06

强制 InnoDB 恢复,启动 MySQL 数据库的相关文章

使用XtraBackup恢复|备份 Mysql数据库 -- 数据恢复篇

数据恢复篇 XtraBackup工具介绍: 现在我们给MySQL做备份的时候经常会考虑到数据量的增长,数据量较小的时候用mysqldump,随着数据量越来越大mysqldump也就不太合适了.第一不支持增量备份,第二恢复的时候也较慢.这里推荐使用Percona公司的XtraBackup. 简单介绍一下热备份工具XtraBackup,它是Percona公司推出的一款热备份工具,备份的时候不影响数据读写操作,是商业工具HotBackup的一个替代(现在应该叫MySQL Enterprise Back

成绩查询系统--发布篇--centOS7 tomcat开机启动 + mysql数据库配置

前情介绍 成绩查询系统投入使用,部署在一台linux服务器上,是centOS7系统的.之前在本机的虚拟机中装过centOS7,还写了一篇博客.这次呢,系统是已经装好了的,我不需要再装一次了,然后jdk环境之前就弄好了,mysql也已经装好了(但是实际上从未投入过使用),还有jboss服务器也装好了,不过我的项目用的是tomcat,所以我只要装一个tomcat就好了. Tomcat安装 首先,从tomcat官网上下载,tomcat的linux版本,我下载的是tomcat7,版本是:apache-t

Linux环境下启动MySQL数据库出现找不到mysqld.sock的解决办法!

问题: 在普通用户权限下运行:mysql -u root -p,回车之后如果会出现如下错误:ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2) 此错误的意思就是没有找到mysqld.sock文件. 解决办法: 首先进入超级用户root权限  sudo -i 或者su - root 切换到默认目录 cd /var/lib/mysql  下查看

MySQL数据库MyISAM和InnoDB存储引擎的比较

MyISAM是MySQL的默认存储引擎,基于传统的ISAM类型,支持全文搜索,但不是事务安全的,而且不支持外键.每张MyISAM表存放在三个文件中:frm 文件存放表格定义:数据文件是MYD (MYData):索引文件是MYI (MYIndex). InnoDB是事务型引擎,支持回滚.崩溃恢复能力.多版本并发控制.ACID事务,支持行级锁定(InnoDB表的行锁不是绝对的,如果在执行一个SQL语句时MySQL不能确定要扫描的范围,InnoDB表同样会锁全表,如like操作时的SQL语句),以及提

深入探讨:MySQL数据库MyISAM与InnoDB存储引擎的比较

From: http://www.jb51.net/article/37766.htm MySQL有多种存储引擎,MyISAM和InnoDB是其中常用的两种.这里介绍关于这两种引擎的一些基本概念(非深入介绍).MyISAM是MySQL的默认存储引擎,基于传统的ISAM类型,支持全文搜索,但不是事务安全的,而且不支持外键.每张MyISAM表存放在三个文件中:frm 文件存放表格定义:数据文件是MYD (MYData):索引文件是MYI (MYIndex).InnoDB是事务型引擎,支持回滚.崩溃恢

【转】MySQL数据库MyISAM和InnoDB存储引擎的比较

MySQL有多种存储引擎,MyISAM和InnoDB是其中常用的两种.这里介绍关于这两种引擎的一些基本概念(非深入介绍). MyISAM是MySQL的默认存储引擎,基于传统的ISAM类型,支持全文搜索,但不是事务安全的,而且不支持外键.每张MyISAM表存放在三个文件中:frm 文件存放表格定义:数据文件是MYD (MYData):索引文件是MYI (MYIndex). InnoDB是事务型引擎,支持回滚.崩溃恢复能力.多版本并发控制.ACID事务,支持行级锁定(InnoDB表的行锁不是绝对的,

mysql数据库,删除root用户后恢复

删除mysql的user表中的root用户后,我们可以用以下命令来实现恢复: 启动mysql数据库的安全模式,有2种方法 1.修改配置文件/etc/my.cf,添加 --skip-grant-tables 2.使用命令进入安全模式, 首先,要先关闭mysql服务  service mysqld stop 进入安全模式    mysqld_safe --skip-grant-tables 3.添加use表内容,如下: mysql> insert into user set ser='root',s

mysql数据库innodb引擎的一个重要内核参数swappiness

在linux内核中有一个叫 swappiness 的参数.可以调整内存的使用方式. 默认情况下,这个数值为60,这意味着内核会比较多的为文件系统提供内存作为缓存,甚至会将一些程序占据的内存交换到swap中以腾出内存. 这正好与使用innodb引擎的mysql数据库有冲突:innodb缓冲池本来就相当于文件系统的缓存,它会缓存住一部分读取过的数据库. 这部分内存通常不会怎么修改变动,所以操作系统就更会倾向于交换出这部分内存到swap中.这样,当mysql真的需要innodb缓冲区中 的数据时,操作

一键强制修改任意Mysql数据库的密码,修改任意环境Mysql数据库。

本文采用我软件里面的内置改密功能,可以一键强制修改Mysql数据库的密码, 在修改过程中,会强制干掉Mysql主程序,修改完成后重新启动Mysql就可以了. 首先讲解如何一键强制修改PHPWAMP自身的Mysql密码 然后再讲解如何一键强制修改其他任意环境的Mysql数据库密码. 案例采用我开发的纯绿色PHP集成环境PHPWAMP,版本号为8.1.8.8 1.案例开始,首先讲如何强制修改PHPWAMP自身Mysql数据库密码,如图 2.弹出如下界面,在红方框处直接填写你要修改的密码即可!完成!