我的编程空间,编程开发者的网络收藏夹
学习永远不晚

怎么利用innodb_force_recovery 解决MySQL服务器crash无法重启问题

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

怎么利用innodb_force_recovery 解决MySQL服务器crash无法重启问题

怎么利用innodb_force_recovery 解决MySQL服务器crash无法重启问题,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。

一 背景
   某一创业的朋友的主机因为磁盘阵列损坏机器crash,重启MySQL服务时 报如下错误:

  1. InnoDB: Reading tablespace information from the .ibd files...

  2. InnoDB: Restoring possible half-written data pages from the doublewrite

  3. InnoDB: buffer...

  4. InnoDB: Doing recovery: scanned up to log sequence number 9120034833

  5. 150125 16:12:51  InnoDB: Starting an apply batch of log records to the database...

  6. InnoDB: Progress in percents: 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 150125 16:12:51 [ERROR] mysqld got signal 11 ;

  7. This could be because you hit a bug. It is also possible that this binary

  8. or one of the libraries it was linked against is corrupt, improperly built,

  9. or misconfigured. This error can also be caused by malfunctioning hardware.

  10. To report this bug, see http://kb.askmonty.org/en/reporting-bugs

  11. We will try our best to scrape up some info that will hopefully help

  12. diagnose the problem, but since we have already crashed,

  13. something is definitely wrong and this may fail.

  14. Server version: 5.5.37-MariaDB-log

  15. key_buffer_size=268435456

  16. read_buffer_size=1048576

  17. max_used_connections=0

  18. max_threads=1002

  19. thread_count=0

  20. It is possible that mysqld could use up to

  21. key_buffer_size + (read_buffer_size + sort_buffer_size)*max_threads = 2332093 K  bytes of memory

  22. 41 Hope that.

二 分析
    主要关注 mysqld got signal 11 的问题,从日志内容分析来看,数据库在机器crash 导致日志文件损坏,重启之后无法正常恢复,更无法正常对外提供服务。

三 解决
    因为日志已经损坏,这里采用非常规手段,首先修改innodb_force_recovery参数,使mysqld跳过恢复步骤,将mysqld 启动,将数据导出来然后重建数据库。
innodb_force_recovery可以设置为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):不查看重做日志,InnoDB存储引擎会将未提交的事务视为已提交。
  6. (SRV_FORCE_NO_LOG_REDO):不执行前滚的操作。
注意 
  a 当设置参数值大于0后,可以对表进行select,create,drop操作,但insert,update或者delete这类操作是不允许的。
  b 当innodb_purge_threads 和 innodb_force_recovery一起设置会出现一种loop现象:   

  1. 150125 17:07:42  InnoDB: Waiting for the background threads to start

  2. 150125 17:07:43  InnoDB: Waiting for the background threads to start

  3. 150125 17:07:44  InnoDB: Waiting for the background threads to start

  4. 150125 17:07:45  InnoDB: Waiting for the background threads to start

  5. 150125 17:07:46  InnoDB: Waiting for the background threads to start

  6. 150125 17:07:47  InnoDB: Waiting for the background threads to start

在my.cnf中修改以下两个参数
innodb_force_recovery=6
innodb_purge_thread=0

重启MySQL 

  1. 150125 17:10:47 [Note] Crash recovery finished.

  2. 150125 17:10:47 [Note] Server socket created on IP: '0.0.0.0'.

  3. 150125 17:10:47 [Note] Event Scheduler: Loaded 0 events

  4. 150125 17:10:47 [Note] /vdata/webserver/mysql/bin/mysqld: ready for connections.

  5. Version: '5.5.37-MariaDB-log' socket: '/tmp/mysql.sock' port: 3306  Source distribution

立即对数据库做逻辑导出 ,完成之后将innodb_force_recovery设置为0 ,innodb_purge_thread=1 ,然后重建数据库 。
另外 MySQL 版本 5.5以及之前 ,当innodb_purge_threads =1,innodb_force_recovery >1 的情况会出现上文提到的循环报warning 问题(=1 没有问题),
原因:
MySQL 的源代码中显示  当innodb_purge_threads 和 innodb_force_recovery一起设置会出现loop循环

  1. while (srv_shutdown_state == SRV_SHUTDOWN_NONE) {

  2.       if (srv_thread_has_reserved_slot(SRV_MASTER) == ULINT_UNDEFINED

  3.           || (srv_n_purge_threads == 1

  4.           && srv_thread_has_reserved_slot(SRV_WORKER)

  5.           == ULINT_UNDEFINED)) {

  6.           ut_print_timestamp(stderr);

  7.           fprintf(stderr, "  InnoDB: Waiting for the background threads to start\n");

  8.           os_thread_sleep(1000000);

  9.       } else {

  10.           break;

  11.       }

  12.   }

所以当需要设置innodb_force_recovery>1的时候需要关闭 innodb_purge_threads,设置为0(默认)。

四 小结 
   MySQL crash 或者 MySQL 数据库服务器 crash 会导致各种各样的问题 ,比如主备之间的error 1594 (5.6 版本开启crash-safe ,会最大程度上避免 error 1594的问题,以后会写5.6新特性介绍该功能 ),error 1236, 日志损坏数据文件损坏 ,等等,本案例只是其中的一种,细心从日志中找的相关错误提示,逐步解决即可。

关于怎么利用innodb_force_recovery 解决MySQL服务器crash无法重启问题问题的解答就分享到这里了,希望以上内容可以对大家有一定的帮助,如果你还有很多疑惑没有解开,可以关注亿速云行业资讯频道了解更多相关知识。

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

怎么利用innodb_force_recovery 解决MySQL服务器crash无法重启问题

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

如何解决linux无法重启php服务的问题

这篇文章给大家分享的是有关如何解决linux无法重启php服务的问题的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。linux无法重启php服务的解决办法:1、通过“/etc/init.d/php-fpm stop
2023-06-22

MySQL服务无法启动的问题以及解决

目录mysql服务无法启动问题解决方法一解决方法二总结MySQL服务无法启动问题解决方法一1.找到你的my.ini文件,用notepad++打开,在右下角看保存编码格式是不是ANSI,如果不是,则在工具栏找到编码,改成ANSI,保存。
MySQL服务无法启动的问题以及解决
2024-09-08

mysql服务无法启动怎么解决

这篇文章主要介绍“mysql服务无法启动怎么解决”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“mysql服务无法启动怎么解决”文章能帮助大家解决问题。解决方法:1、在c
2023-02-13

怎么解决DELL服务器M100E中linux5.5无法启动的问题

这篇文章主要介绍“怎么解决DELL服务器M100E中linux5.5无法启动的问题”,在日常操作中,相信很多人在怎么解决DELL服务器M100E中linux5.5无法启动的问题问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希
2023-06-10

阿里云服务器无法重启系统问解决方法

简介:在使用阿里云服务器时,有时会遇到无法重启系统的问题,这可能会导致数据丢失、服务中断等问题。本文将介绍一些常见的原因和解决方法,帮助用户快速恢复服务器正常运行。1.确认服务器状态首先,我们需要确认服务器的状态。如果服务器处于异常状态,可能会导致无法重启系统的问题。可以通过登录阿里云控制台查看服务器的状态信息,例如是
阿里云服务器无法重启系统问解决方法
2024-01-18

云服务器ip无法访问怎么解决问题

如果您的云服务器无法访问,有可能是因为防火墙或其他安全软件阻止了网络访问。以下是一个可能的解决方法:检查防火墙配置:您应该尝试在防火墙配置中禁用所有不受支持的端口,或者将所有端口重定向到一个更小的默认端口。这可以减少网络流量,因为它只允许与您的云服务器的端口对应的流量到达您的云服务器。检查安全软件的设置:有些安全软件会阻止云服务器与某些端口通信。您可以通过手动开启这些软件来阻止这些端口的通
2023-10-26

云服务器ip无法访问怎么解决方法问题

如果您的云服务器无法访问,有可能是因为云服务器的IP地址被禁用或者被其他人使用。以下是一些解决方法:检查云服务器的IP地址设置,确保您的域名或IP地址与云服务器所连接的网络连接保持同步。确保您的网络连接状况良好,并且没有受到任何不必要的网络攻击。检查云服务器提供商的政策和操作,以确保您的网络连接得到了适当的保护。如果您使用的是互联网连接,可以尝试重启服务器、检查网络设置、查看防火墙设置
2023-10-26

无法访问亚马逊服务器怎么解决问题

检查网络连接:检查您的网络连接,确保无线网络或以太网连接正常工作。如果您使用的是有线连接,尝试重新启动您的路由器或调整网络设置。检查服务器状态:亚马逊服务器可能会出现故障或维护。您可以访问亚马逊服务健康仪表板(AmazonServiceHealthDashboard)来查看服务器的当前状态。如果服务器出现故障,您只需等待一段时间,直到问题得到解决。检查网络设置:您可以尝试访问AmazonSiteAddress或ServiceKeyPermanentNam...
2023-10-27

云服务器ip无法访问怎么解决问题呢

如果您的云服务器无法访问,请检查您的网络连接和服务器配置是否正确。如果您可以连接到服务器,那么可能是服务器配置出现了问题。请检查服务器是否启用了带有负载均衡(LB)的功能,并尝试在其他机器上重新启动服务器。如果您不能连接到服务器,则可以尝试使用网络监视器或其他监视工具来查看服务器的连接情况和流量。如果还是无法解决问题,建议您联系云提供商或服务提供商以获取更进一步的帮助。
2023-10-26

云服务器无法访问外网服务器怎么解决问题

首先,我们需要确定云服务器是否能够访问外网服务器。如果无法访问外网服务器,那么就需要考虑是不是网络连接出现了问题。可以检查网络状态,确认网络连接是否正常,也可以尝试使用其他网络连接方式来访问外网服务器。如果云服务器可以访问外网服务器,但是无法访问网络,那么可能是因为外网服务器与云服务器之间的网络协议不兼容导致的。可以尝
2023-10-27

云服务器无法访问外网怎么解决问题

如果您的云服务器无法访问外网,以下是一些可能的解决方案:检查网络连接:重启您的计算机和网络线路,确保您连接的网络已重新设置为可用状态。更新Windows或Mac操作系统:如果您尝试访问外网,那么您的计算机或Mac将会受到安全更新的影响。因此,请查看操作系统或Mac更新以获取最新版本。更改网络设置:尝试更改您的网络设置,例如限制特定账户的访问网络。此操作可能需要重新启动您的网络,因此请确保
2023-10-26

阿里云服务器无法启动sql数据库怎么解决问题

简介在使用阿里云服务器时,有时候可能会遇到无法启动SQL数据库的问题。本文将介绍一些常见的解决方法,帮助您快速解决这个问题。解决方法1.检查网络连接首先,确保您的服务器能够正常访问互联网。可以通过ping命令或者telnet命令来测试网络连接是否正常。如果网络连接有问题,可以尝试重新启动服务器或者联系阿里云技术支持寻求
阿里云服务器无法启动sql数据库怎么解决问题
2024-01-20

阿里云服务器ip无法访问怎么解决问题

如果您的阿里云服务器ip无法访问,可能有以下几个原因:网络连接问题:连接不上服务器或网络连接超时:尝试重新加载页面,清除浏览器缓存或尝试重新连接服务器,检查网络状态。服务器配置问题:可能是您的服务器IP地址配置不正确导致无法访问服务。尝试重置您的服务器IP或检查您的计算机系统。安全问题:可能是您的服务器存在安全漏洞或遭受攻击,导致您的数据或服务被黑客窃取。尝试在不同的操作系统和网络环境下
2023-10-26

无法访问亚马逊云服务器怎么解决问题

检查网络连接:确保您的网络连接正常,您可以尝试使用其他设备或网络来测试连接。检查您的账户设置:查看账户设置是否正确,例如使用密码保护或VPN连接等。检查服务器状态:如果您的服务器在运行或停止,则可能会影响您的访问。您可以尝试联系您的云服务器提供商以了解是否出现了问题。检查您的设备和网络设置:确保您的设备和网络设置与访问亚马逊云服务器的设备和网络相匹配。联系云服务器提供商:如果以上步骤都无法解决问题...
2023-10-27

云服务器无法访问外网怎么解决问题呢

检查网络连接如果云服务器无法访问外网,那么首先需要检查网络连接。可以尝试使用其他设备连接到云服务器,例如网线、路由器或者无线网络。如果仍然无法连接,那么可能是网络配置有误或者网络环境有问题。在这种情况下,需要逐一排查网络配置,并且根据实际情况进行调整。检查防火墙设置在访问外网时,防火墙可以对我们的网络访问进行限制。如果
云服务器无法访问外网怎么解决问题呢
2023-10-28

编程热搜

目录