服务器断电或者重启后造成Innodb存储引擎损坏解决方案

2022-04-14 00:03 469 浏览

服务器断电|重启后造成InnoDB存储引擎损坏导致无法正常启动MySQL的解决方案

建议将本文通读一遍后再根据解决方案进行处理。

出现的原因:

正常情况下,数据库在做查询语句Select * From Table_Name时候,会正常返回完整的数据给用户,当在做查询的时候,或者InnoDB存储引擎后台操作意外退出或者中断,会导致InnoDB向前回滚恢复数据的时候失败,主要的错误显示如下:

错误1:



错误2:

2022-01-02 22:05:36 7f114f118720 InnoDB: Error: page 251 log sequence number 135630634

InnoDB: is in the future! Current system log sequence number 43744780.

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/ ... nnodb-recovery.html

InnoDB: for more information.

2022-01-02 22:05:36 7f114f118720 InnoDB: Error: page 530 log sequence number 43789292

InnoDB: is in the future! Current system log sequence number 43744780.

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/ ... nnodb-recovery.html

InnoDB: for more information.

2022-01-02 22:05:36 7f114f118720 InnoDB: Error: page 252 log sequence number 151634539

InnoDB: is in the future! Current system log sequence number 43744780.

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/ ... nnodb-recovery.html

InnoDB: for more information.

2022-01-02 22:05:36 7f114f118720 InnoDB: Error: page 517 log sequence number 151634539

InnoDB: is in the future! Current system log sequence number 43744780.

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/ ... nnodb-recovery.html

InnoDB: for more information.

复制代码

对此错误,解决方案如下:

1、首先确定下错误是否和上述的错误信息是否一致,然后关闭Web服务(Apache或者Nginx)。

2、把MySQL的数据存储目录做个备份,备份是为了以防万一,如果有快照,尽量做个磁盘快照。

面板中默认的数据库存储路径在

/www/server/data

备份命令:\cp -rp /www/server/data \www\backup\data_2022

复制代码

3、到MySQL的配置文件中添加

面板的MySQL配置文件默认是 /etc/my.cnf

innodb_force_recovery

复制代码


设置完成后重启数据库

innodb_force_recovery默认是非0 的整数,一共有1--6 6个参数值,下面是参数解读:

1 (srv_force_ignore_corrupt)

启动MySQL服务,即使它检测到一个损坏的页面。试图使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_recovery的值为3或更小,你可以DROP或CREATE表。当innodb_force_recovery值大于3时,也支持DROP TABLE。如果innodb_force_recovery的值大于4,则不允许DROP TABLE。

如果你知道一个给定的表在回滚时导致意外退出,你可以放弃它。如果你遇到由失败的大规模导入或ALTER TABLE引起的失控回滚,你可以杀死mysqld进程并将innodb_force_recovery设置为3以使数据库在没有回滚的情况下恢复,然后DROP引起失控回滚的表。

如果表数据中的损坏使你不能转储整个表的内容,带有ORDER BY primary_key DESC子句的查询可能能够转储表中损坏部分之后的部分。

如果需要一个高的innodb_force_recovery值来启动InnoDB,可能会有损坏的数据结构,导致复杂的查询(包含WHERE、ORDER BY或其他子句的查询)失败。在这种情况下,你可能只能运行基本的SELECT * FROM t查询。

复制代码

4、上面的6个参数值,后面的包含前面的功能,如参数3,包含了参数1 和参数2 的所有功能,这里的参数总有一个可以将数据库启动,注意:若有无法启动的情况,请将二进制日志清除(没有做备份的请勿执行此命令):

rm -f /www/server/data/ib_*

rm -f /www/server/data/mysql-bin*

复制代码

然后重启MySQL。

5、重启数据库后,下面进行备份数据库:

一般情况下在面板做计划任务的比较多:



添加好后记得点击执行按钮,数据库如果较大的话,备份可能需要点时间,

也可以在数据库管理界面,点击备份按钮进行备份



6、当备份完成后将现在的数据库服务停止,记得备份当数据库名和对应的密码,然后卸载当前的数据库





7、重新安装MySQL后,新建数据库,密码指定之前复制的



8、等到还原成功后,重启Nginx或者Apache,观察网站是否正常。

结语:服务器之所以被称为服务器,就是其强大的稳定能力和持续服务能力,除非必要,不要重启服务器,平时多做数据的备份,出现问题时不慌!

如果您在使用面板的时候遇到问题,可以到论坛发帖求助。

FAQ:

①、为什么要关闭Web服务(Nginx或者Apache)?

答:此时MySQL已经无法正常提供服务,如果一直开着Nginx或者Apache,会导致外部访问一直在请求数据库,生成大量的错误日志,如果磁盘容量小,则会很快出现磁盘空间不足

②、为什么要做快照或者备份?

答:在处理数据的时候,可能会因特殊情况导致无法启动MySQL,如果没有备份,或者快照,会导致现有的“数据”损坏,对数据库造成二次损毁

③、为什么要复制数据库名和对应的密码?

答:节省时间,面板上新建数据库会重新生成一个随机密码,当前如果您的网站中的数据库信息和运行的数据库的信息不一致,也是无法进行连接的,在重新创建数据库的时候直接以之前的数据库名和密码进行创建数据库,不用在到网站配置文件中修改信息,这样启动Web服务后就可以直接使用

④、如果我都尝试了,数据库还是无法启动怎么办?

答:MySQL官方给的解决方案都无法解决当前的问题,建议找专业的数据恢复公司。


分享:
相关内容
  • bt宝塔面板节点同步工具1.0使用教程
    一、什么是节点同步工具?节点同步工具是一个由宝塔官方团队开发的多服务器文件同步工具,用来同步网站配置、SSL证书、网站文件、网站重定向配置等功能二、使用场景:1、集群有多台服务器需要管理,并且要求这些服务器中的文件内容相同2、故障转移当正在对外使用的服务器出现故障,需要快速切换到备用机器上,来提升业务持续服务的能力3、负载均衡,当负载均衡节点中有
  • bt宝塔面板放行端口详细图文教程
    宝塔面板放行端口一、腾讯云服务器示例服务器安装完宝塔面板后默认使用的是8888端口,为了更安全可以对默认端口进行修改,下面是腾讯云和阿里云服务器的端口放行示例1、腾讯云:1-1:首先登录到腾讯云服务器控制台----安全组----修改规则1-2:添加要更改的端口,范围0---65535有效端口1-3:在面板安全处放行所改的端口:8899(示例)1-4:简单测试下端口是否能放行生效(nmap  i
  • bt宝塔Nginx反向代理详细图文教程
    概念:反向代理:反向代理服务器位于用户与目标服务器之间,但是对于用户而言,反向代理服务器就相当于目标服务器,即用户直接访问反向代理服务器就可以获得目标服务器的资源。同时,用户不需要知道目标服务器的地址,也无须在用户端作任何设定。反向代理服务器通常可用来作为Web加速,即使用反向代理作为Web服务器的前置机来降低网络和服务器的负载,提高访问效率。(
  • bt宝塔如何修改Windows面板密码教程
    修改Windows面板教程有三种方法:1、在面板上直接修改,如图2、服务器中修该密码,设置完记得保存配置3、cmd 命令行中修改使用微软徽标+R键 调出运行,输入cmd,回车在cmd 命令行中输入 bt  回车,输入编号5 ,输入新的面板密码回车即可。
  • bt宝塔企业级备份详细图文教程
    企业级备份产生的背景:为解决备份数据库时打断正在执行的事物(锁表),备份和恢复大数据库缓慢,备份数据不完整(极其重要),增量备份数据库而开发出的一款备份插件。企业备份的优点:1、备份速度快,备份文件可靠2、备份的时候不会打断现有的业务3、自动备份校验4、还原速度快5、基于压缩功能节约磁盘空间和流量6、方便传输到其他存储空间注:企业级备份主要解决备
相关推荐
  • 宝塔防火墙禁止境外访问,禁止境内访问讲解
    一、禁止境外访问,禁止境内访问简介首先说明一下:禁止海外访问--->禁止除大陆之外的地区访问禁止境内访问---> 禁止国内访问二、防御设置2.1 禁止海外访问 (全局开关+站点开关=开启)这里全局开关需要开启。这个开启只是说开启了全局的。如果需要网站开启需要在网站里面开启才能让网站禁止海外访问两边开启成功之后才是真正的给这个网站开启了禁止海外访问2.1 禁止境内访问 (
  • 如何解决宝塔安装出现"下载宝塔运行环境失败,请尝试...
    用的是阿里云服务器,安全组该放行的端口都放行了您好,您那边使用的是哪个地区的服务器呢?您那边执行下面命令绑定下hosts然后重新安装看下是否正常echo "36.133.1.8 www.bt.cn download.bt.cn api.bt.cn dg1.bt.cn dg2.bt.cn" >> /etc/hosts
随笔
热门内容
  • 如何解决[Docker管理器]运行时发生错误!
    解决办法:返回主页,点击右上角修复。或者等待10分钟自主会修复!
  • bt宝塔Nginx反向代理详细图文教程
    概念:反向代理:反向代理服务器位于用户与目标服务器之间,但是对于用户而言,反向代理服务器就相当于目标服务器,即用户直接访问反向代理服务器就可以获得目标服务器的资源。同时,用户不需要知道目标服务器的地址,也无须在用户端作任何设定。反向代理服务器通常可用来作为Web加速,即使用反向代理作为Web服务器的前置机来降低网络和服务器的负载,提高访问效率。(
  • 宝塔防火墙禁止境外访问,禁止境内访问讲解
    一、禁止境外访问,禁止境内访问简介首先说明一下:禁止海外访问--->禁止除大陆之外的地区访问禁止境内访问---> 禁止国内访问二、防御设置2.1 禁止海外访问 (全局开关+站点开关=开启)这里全局开关需要开启。这个开启只是说开启了全局的。如果需要网站开启需要在网站里面开启才能让网站禁止海外访问两边开启成功之后才是真正的给这个网站开启了禁止海外访问2.1 禁止境内访问 (
  • 如何解决宝塔安装出现"下载宝塔运行环境失败,请尝试...
    用的是阿里云服务器,安全组该放行的端口都放行了您好,您那边使用的是哪个地区的服务器呢?您那边执行下面命令绑定下hosts然后重新安装看下是否正常echo "36.133.1.8 www.bt.cn download.bt.cn api.bt.cn dg1.bt.cn dg2.bt.cn" >> /etc/hosts
  • 如何解决ubuntu20.04编译安装nginx失败
Tags标签
联系方式