腐败调查数据库页面,您可能把你从数据库表选择……到输出文件
。通常,大多数以这种方式获得的数据是完整的。严重的腐败可能会导致SELECT * FROM
语句或tbl_name
InnoDB
后台操作意外退出或维护,甚至引起InnoDB
前滚恢复崩溃。在这种情况下,您可以使用innodb_force_recovery
选项强迫InnoDB
存储引擎启动,同时防止后台操作运行,这样你就可以把你的表。例如,您可以添加以下行来(mysqld)
部分文件在重新启动服务器之前你的选择:
(mysqld) innodb_force_recovery = 1
使用选项文件的信息,请参阅4.2.2.2节,“使用选项文件”。
只设置innodb_force_recovery
为大于0的值在紧急情况下,这样你就可以开始InnoDB
和把你表。在这样做之前,确保你有一个备份数据库的情况下,你需要重新创建它。4或更高的值可以永久破坏数据文件。只使用一个innodb_force_recovery
设置4或更高的生产服务器实例之后,您已经成功地测试了设置在一个单独的物理数据库的副本。当强迫InnoDB
复苏,你应该开始innodb_force_recovery = 1
只有逐步增加价值,作为必要的。
innodb_force_recovery
默认是0(正常启动没有强迫恢复)。允许非零值innodb_force_recovery
是1到6。更大的值包含较小值的功能。例如,值为3的包括所有功能的值1和2。
如果你能把你与一个表innodb_force_recovery
值3或更少,那么你是相对安全的,只有一些腐败的个人页面上的数据丢失。4或更高的价值被认为是危险的,因为数据文件可以永久损坏。6的值被认为是激烈的,因为数据库页面处于一种过时的状态,进而可能会引入更多的腐败b树和其他的数据库结构。
作为一项安全措施,InnoDB
防止插入
,更新
,或删除
操作时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
)不看看undo日志当启动数据库:
InnoDB
甚至把不完整的事务提交。这个值可以永久破坏数据文件。集InnoDB
只读的。6
(SRV_FORCE_NO_LOG_REDO
)不做重做日志在连接前滚恢复。这个值可以永久破坏数据文件。叶子数据库页面在一个过时的状态,进而可能会引入更多的腐败到b树和其他的数据库结构。集
InnoDB
只读的。
你可以选择
从表转储。与一个innodb_force_recovery
价值3或更少下降
或创建
表。删除表
还支持了吗innodb_force_recovery
值大于3,MySQL 5.7.17。MySQL 5.7.18,删除表
是不允许的吗innodb_force_recovery
值大于4。
如果你知道一个给定表导致意外退出回滚,你可以放弃。如果你遇到一个回滚失败引起的大规模进口或失控ALTER TABLE
,你可以杀死mysqld流程和设置innodb_force_recovery
来3
将数据库没有回滚,然后下降
表导致失控的回滚。
如果表数据中的腐败阻止你倾倒整个表内容,查询的命令
条款可以转储表的部分后损坏的部分。primary_key
DESC
如果一个高innodb_force_recovery
值是必需的InnoDB
,可能会有损坏的数据结构可能导致复杂的查询(查询包含在哪里
,命令
或其他条款)失败。在这种情况下,您可能只能够基本运行从t选择*
查询。