首页 网建技术 关于服务器断电或者重启后造成Innodb存储引擎损坏,这个教程能帮你解决。

关于服务器断电或者重启后造成Innodb存储引擎损坏,这个教程能帮你解决。

服务器断电|重启后造成InnoDB存储引擎损坏导致无法正常启动MySQL的解决方案 建议将本文通读一遍后再根据解决方案进行处理。 出现的原因: 正常情况下,数据库在做查询语句Sel…

服务器断电|重启后造成InnoDB存储引擎损坏导致无法正常启动MySQL的解决方案
建议将本文通读一遍后再根据解决方案进行处理。
出现的原因:
正常情况下,数据库在做查询语句Select * From Table_Name时候,会正常返回完整的数据给用户,当在做查询的时候,或者InnoDB存储引擎后台操作意外退出或者中断,会导致InnoDB向前回滚恢复数据的时候失败,主要的错误显示如下:
错误1:
关于服务器断电或者重启后造成Innodb存储引擎损坏,这个教程能帮你解决。插图
错误2:

  1. 2022-01-02 22:05:36 7f114f118720 InnoDB: Error: page 251 log sequence number 135630634
  2. InnoDB: is in the future! Current system log sequence number 43744780.
  3. InnoDB: Your database may be corrupt or you may have copied the InnoDB
  4. InnoDB: tablespace but not the InnoDB log files. See
  5. InnoDB: http://dev.mysql.com/doc/refman/ … nnodb-recovery.html
  6. InnoDB: for more information.
  7. 2022-01-02 22:05:36 7f114f118720 InnoDB: Error: page 530 log sequence number 43789292
  8. InnoDB: is in the future! Current system log sequence number 43744780.
  9. InnoDB: Your database may be corrupt or you may have copied the InnoDB
  10. InnoDB: tablespace but not the InnoDB log files. See
  11. InnoDB: http://dev.mysql.com/doc/refman/ … nnodb-recovery.html
  12. InnoDB: for more information.
  13. 2022-01-02 22:05:36 7f114f118720 InnoDB: Error: page 252 log sequence number 151634539
  14. InnoDB: is in the future! Current system log sequence number 43744780.
  15. InnoDB: Your database may be corrupt or you may have copied the InnoDB
  16. InnoDB: tablespace but not the InnoDB log files. See
  17. InnoDB: http://dev.mysql.com/doc/refman/ … nnodb-recovery.html
  18. InnoDB: for more information.
  19. 2022-01-02 22:05:36 7f114f118720 InnoDB: Error: page 517 log sequence number 151634539
  20. InnoDB: is in the future! Current system log sequence number 43744780.
  21. InnoDB: Your database may be corrupt or you may have copied the InnoDB
  22. InnoDB: tablespace but not the InnoDB log files. See
  23. InnoDB: http://dev.mysql.com/doc/refman/ … nnodb-recovery.html
  24. InnoDB: for more information.

复制代码

对此错误,解决方案如下:
1、首先确定下错误是否和上述的错误信息是否一致,然后关闭Web服务(Apache或者Nginx)。
2、把MySQL的数据存储目录做个备份,备份是为了以防万一,如果有快照,尽量做个磁盘快照。
面板中默认的数据库存储路径在
/www/server/data
备份命令:

  1. \cp -rp /www/server/data \www\backup\data_2022

复制代码

3、到MySQL的配置文件中添加
面板的MySQL配置文件默认是  /etc/my.cnf

  1. innodb_force_recovery

复制代码

关于服务器断电或者重启后造成Innodb存储引擎损坏,这个教程能帮你解决。插图1
设置完成后重启数据库

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

  1. 1 (srv_force_ignore_corrupt)
  2. 启动MySQL服务,即使它检测到一个损坏的页面。试图使SELECT * FROM tbl_name跳过损坏的索引记录和页面,这有助于转储表。
  3. 2 (srv_force_no_background)
  4. 防止主线程和任何清除线程的运行。如果在清除操作中会发生意外退出,这个恢复值可以防止它退出。
  5. 3 (srv_force_no_trx_undo)
  6. 在崩溃恢复后不运行事务回滚。
  7. 4 (srv_force_no_ibuf_merge)
  8. 防止插入缓冲区的合并操作。如果它们会导致崩溃,则不做这些操作。不计算表的统计数据。这个值会永久地破坏数据文件。在使用这个值之后,要准备放弃并重新创建所有的二级索引。将InnoDB设置为只读。
  9. 5 (srv_force_no_undo_log_scan)
  10. 在启动数据库时不查看撤销日志。InnoDB甚至将不完整的事务视为已提交。这个值会永久地破坏数据文件。将InnoDB设置为只读。
  11. 6 (srv_force_no_log_redo)
  12. 不做与恢复有关的重做日志滚动。这个值会永久地破坏数据文件。使数据库页面处于过时的状态,这反过来又可能给B树和其他数据库结构带来更多的损坏。将InnoDB设置为只读。
  13. 你可以从表中SELECT来转储它们。如果innodb_force_recovery的值为3或更小,你可以DROP或CREATE表。当innodb_force_recovery值大于3时,也支持DROP TABLE。如果innodb_force_recovery的值大于4,则不允许DROP TABLE。
  14. 如果你知道一个给定的表在回滚时导致意外退出,你可以放弃它。如果你遇到由失败的大规模导入或ALTER TABLE引起的失控回滚,你可以杀死mysqld进程并将innodb_force_recovery设置为3以使数据库在没有回滚的情况下恢复,然后DROP引起失控回滚的表。
  15. 如果表数据中的损坏使你不能转储整个表的内容,带有ORDER BY primary_key DESC子句的查询可能能够转储表中损坏部分之后的部分。
  16. 如果需要一个高的innodb_force_recovery值来启动InnoDB,可能会有损坏的数据结构,导致复杂的查询(包含WHERE、ORDER BY或其他子句的查询)失败。在这种情况下,你可能只能运行基本的SELECT * FROM t查询。

复制代码

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

  1. rm -f /www/server/data/ib_*
  2. rm -f /www/server/data/mysql-bin*

复制代码

然后重启MySQL。
5、重启数据库后,下面进行备份数据库:
一般情况下在面板做计划任务的比较多:
关于服务器断电或者重启后造成Innodb存储引擎损坏,这个教程能帮你解决。插图2
添加好后记得点击执行按钮,数据库如果较大的话,备份可能需要点时间,
也可以在数据库管理界面,点击备份按钮进行备份
关于服务器断电或者重启后造成Innodb存储引擎损坏,这个教程能帮你解决。插图3
6、当备份完成后将现在的数据库服务停止,记得备份当数据库名和对应的密码,然后卸载当前的数据库
关于服务器断电或者重启后造成Innodb存储引擎损坏,这个教程能帮你解决。插图4
关于服务器断电或者重启后造成Innodb存储引擎损坏,这个教程能帮你解决。插图5
7、重新安装MySQL后,新建数据库,密码指定之前复制的
关于服务器断电或者重启后造成Innodb存储引擎损坏,这个教程能帮你解决。插图6
8、等到还原成功后,重启Nginx或者Apache,观察网站是否正常。

结语:服务器之所以被称为服务器,就是其强大的稳定能力和持续服务能力,除非必要,不要重启服务器,平时多做数据的备份,出现问题时不慌!
如果您在使用面板的时候遇到问题,可以到论坛发帖求助。

FAQ:
①、为什么要关闭Web服务(Nginx或者Apache)?
答:此时MySQL已经无法正常提供服务,如果一直开着Nginx或者Apache,会导致外部访问一直在请求数据库,生成大量的错误日志,如果磁盘容量小,则会很快出现磁盘空间不足
②、为什么要做快照或者备份?
答:在处理数据的时候,可能会因特殊情况导致无法启动MySQL,如果没有备份,或者快照,会导致现有的“数据”损坏,对数据库造成二次损毁
③、为什么要复制数据库名和对应的密码?
答:节省时间,面板上新建数据库会重新生成一个随机密码,当前如果您的网站中的数据库信息和运行的数据库的信息不一致,也是无法进行连接的,在重新创建数据库的时候直接以之前的数据库名和密码进行创建数据库,不用在到网站配置文件中修改信息,这样启动Web服务后就可以直接使用
④、如果我都尝试了,数据库还是无法启动怎么办?
答:MySQL官方给的解决方案都无法解决当前的问题,建议找专业的数据恢复公司。

参考MySQL官方解决方案的链接:
https://dev.mysql.com/doc/refman … nnodb-recovery.html
https://dev.mysql.com/doc/refman … nnodb-recovery.html
https://dev.mysql.com/doc/refman … nnodb-recovery.html

免责声明:文章内容不代表本站立场,本站不对其内容的真实性、完整性、准确性给予任何担保、暗示和承诺,仅供读者参考,文章版权归原作者所有。如本文内容影响到您的合法权益(内容、图片等),请及时联系本站,我们会及时删除处理。

作者: 小小编

为您推荐

SSH的使用详解

SSH的使用详解

今天小编为大家分享一篇关于SSH 的介绍和使用方法的文章。本文从SSH是什么出发,讲述了SSH的基本用法,之后在远程登录...
宝塔linux面板安装软件错误:宝塔面板检测到系统目录不可写。解决方法

宝塔linux面板安装软件错误:宝塔面板检测到系统目录不可写。解决方法

错误:宝塔面板检测到系统目录不可写。 1、安装了宝塔系统加固,请先关闭; 2、安装了云锁,请关闭系统加固功能; 3、安装...
宝塔linux面板node.js项目服务器重启丢失,pm2列表被删除清空解决方案

宝塔linux面板node.js项目服务器重启丢失,pm2列表被删除清空解决方案

宝塔linux面板node.js项目服务器重启丢失,pm2列表被删除清空解决方案 近期由于服务器异常重启,发现node....
宝塔linux面板 apache网站访问报错503 Service Unavailable解决

宝塔linux面板 apache网站访问报错503 Service Unavailable解决

宝塔linux面板 apache网站访问报错: 503 Service Unavailable Service Unav...
宝塔windows面板apache开启Gzip压缩方法

宝塔windows面板apache开启Gzip压缩方法

感谢网友安好反馈问题,经检查少写一个模块导致开启后apache无法启动 2018/05/18更正 第1步 apache配...

发表回复

返回顶部