突发!某大厂机房掉电,MySQL数据库无法启动,紧急恢复过程...

作者:IT邦德
中国DBA联盟(ACDU)成员,10余年DBA工作经验,
Oracle、PostgreSQL ACE
CSDN博客专家及B站知名UP主,全网粉丝10万+
擅长主流Oracle、MySQL、PG、高斯及Greenplum备份恢复,
安装迁移,性能优化、故障应急处理
微信:jem_db
QQ交流群:587159446
公众号:IT邦德

文章目录

  • 前言
    • 📣 1.故障现象
    • 📣 2.故障分析
    • 📣 3.处理过程
      • ✨ 3.1 设置恢复模式启动
      • ✨ 3.2 备份全库数据
      • ✨ 3.3 删除mysql数据
      • ✨ 3.4.恢复数据
    • 📣 4.技能拓展
      • ✨ 4.1 忘记root密码的处理
      • ✨ 4.2 运维常用命令
    • 📣 5.总结

前言

本次故障发生在机房掉电,服务器异常关机,影响了监控系统的后台的MariaDB及MySQL无法启动。

📣 1.故障现象

由于异常断电或者系统异常重启时MySQL
没有正常退出导致MySQL无法启动,启动时报错如下:

Version: ‘5.5.64-MariaDB’ socket: 
‘/var/lib/mysql/mysql.sock’ port: 3306 MariaDB Server
InnoDB: Failing assertion: addr.page == FIL_NULL || addr.boffset >= FIL_PAGE_DATA
InnoDB: We intentionally generate a memory trap.
InnoDB: Submit a detailed bug report to https://jira.mariadb.org/
InnoDB: If you get repeated assertion failures or crashes, even
InnoDB: immediately after the mysqld startup, there may be
InnoDB: corruption in the InnoDB tablespace. Please refer to
InnoDB: http://dev.mysql.com/doc/refman/5.5/en/forcing-innodb-recovery.html
InnoDB: about forcing recovery.
20240527 10:54:24 [ERROR] mysqld got signal 6 ;
This could be because you hit a bug. It is also possible that this binary
or one of the libraries it was linked against is corrupt, improperly built,
or misconfigured. This error can also be caused by malfunctioning hardware.
To report this bug, see http://kb.askmonty.org/en/reporting-bugs
We will try our best to scrape up some info that will hopefully help
diagnose the problem, but since we have already crashed,
something is definitely wrong and this may fail.

📣 2.故障分析

报错中给出了强制恢复数据的方式,
参考MySQL官网链接即可
http://dev.mysql.com/doc/refman/5.5/en/forcing-innodb-recovery.html

通过设置innodb_force_recovery
参数不进行回滚才启动数据库。
因为监控数据,可以允许部分数据丢失,所以此种方式可行
innodb_force_recovery = 1

innodb_force_recovery的6个值含义如下:

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)
阻止插入缓冲合并操作。如果它们会导致崩溃,
不要做这些。不计算表统计。这个值可以永久损坏数据文件。
使用这个值后,准备号删除并重建所有辅助索引。

5 (SRV_FORCE_NO_UNDO_LOG_SCAN)
在启动数据库时不查看撤消日志:InnoDB将即使未完成的事务也作为已提交。
这个值可以永久损坏数据文件。

6 (SRV_FORCE_NO_LOG_REDO)
不要通过恢复对重做日志进行前滚。这个值可能永久损坏数据文件。
数据库页被留在一个陈旧的状态,
这反过来又可能带给B-trees和其它数据库结构更多的损坏。

📣 3.处理过程

✨ 3.1 设置恢复模式启动

vim /etc/my.cnf
添加配置项:
innodb_force_recovery = 1
innodb_purge_thread=0
注意:其中innodb_force_recovery后面的值设置为1
如果1还是不能启动,就再逐步增加为2/3/4等。
直到能启动mysql为止!!!
本次恢复我设置为3后才重启OK

启动成功后测试数据库连接:
mysql -uroot -proot;

✨ 3.2 备份全库数据

mysqldump -uroot -proot
–all-databases > all_mysql_backup.sql

✨ 3.3 删除mysql数据

删除mysql数据之前务必先stop mysql服务
systemctl stop mariadb
cp -r /var/lib/mysql/ /var/lib/mysql.bak
rm -rf /var/lib/mysql/*
重启mysql服务:
正常模式在启动mysql:
vim /etc/my.cnf
注释配置项:
#innodb_force_recovery = 1
#innodb_purge_thread=0
再重启:
systemctl restart mariadb

✨ 3.4.恢复数据

记住一定要先重置下密码:
mysqladmin -u root password root
使用之间备份的sql文件恢复数据:
mysql -uroot -proot
source /root/all_mysql_backup.sql
查看恢复好的数据,搞定~!

📣 4.技能拓展

✨ 4.1 忘记root密码的处理

systemctl stop mariadb
mysqld_safe --skip-grant-tables &
mysql -u root
FLUSH PRIVILEGES;
SET PASSWORD FOR ‘root’@‘%’ = PASSWORD(‘root’);

✨ 4.2 运维常用命令

查询所有数据的大小:
mysql> select concat(round(sum(data_length/1024/1024),2),‘MB’)
as data from information_schema.tables;

当前数据库实例的所有数据库及其容量大小:
select a.SCHEMA_NAME, a.DEFAULT_CHARACTER_SET_NAME,a.DEFAULT_COLLATION_NAME,
sum(table_rows) as ‘记录数’,
sum(truncate(data_length/1024/1024, 2)) as ‘数据容量(MB)’,
sum(truncate(index_length/1024/1024, 2)) as ‘索引容量(MB)’,
sum(truncate((data_length+index_length)/1024/1024, 2)) as ‘总大小(MB)’,
sum(truncate(max_data_length/1024/1024, 2)) as ‘最大值(MB)’,
sum(truncate(data_free/1024/1024, 2)) as ‘空闲空间(MB)’
from INFORMATION_SCHEMA.SCHEMATA a
left outer join information_schema.tables b
on a.SCHEMA_NAME=b.TABLE_SCHEMA
group by a.SCHEMA_NAME, a.DEFAULT_CHARACTER_SET_NAME,a.DEFAULT_COLLATION_NAME
order by sum(data_length) desc, sum(index_length) desc;

📣 5.总结

如果数据库服务器突然断电,尚未保存到磁盘的数据将会丢失。这可能包括尚未提交的事务、缓存中的数据以及正在进行的写操作。当服务器重新启动时,这些数据将无法恢复,可能导致数据不一致或数据丢失的情况,本次的紧急恢复过程,希望能帮助到大家

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/16719.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

正则表达式的匹配

正则表达式的语法总结 正则表达式的语法因不同的编程语言或工具而略有差异,但基本的结构和概念是相似的。下面是一个正则表达式的基本语法概述: 字符类 .:匹配除了换行符之外的任何单个字符。 [abc]:匹配方括号中的任何一个字符。例如,[aeiou] 匹配任何元音字母。 [^ab…

【算法】梦破碎之地---三数之和

相信大家都有做过两数之和, 题目链接: 15. 三数之和 - 力扣(LeetCode) 在文章的开始让我们回顾一下三数之和吧! 题目描述: 给你一个整数数组 nums ,判断是否存在三元组 [nums[i], nums[j], …

Hololens2关闭软件自动校对人眼

原 因 :软件进入后总是提示需要校对人眼,对演示有很大的不方便,需要使用人进行处理。 处理效果:更换使用人员,不进行校对人眼。

mysql数据表名称区分大小写

mysql数据表名称区分大小写 MySQL数据库在Windows平台上的表名和列名默认不区分大小写,而在Linux上默认是区分大小写的。想在任何平台上都实现区分大小写的表名和列名,可以通过设置lower_case_table_names系统变量来完成。 lower_case_table_names系统变量的取值 这个变量…

【量算分析工具-获取高程】GeoServer改造Springboot番外系列八

【量算分析工具-概述】GeoServer改造Springboot番外系列三-CSDN博客 【量算分析工具-水平距离】GeoServer改造Springboot番外系列四-CSDN博客 【量算分析工具-水平面积】GeoServer改造Springboot番外系列五-CSDN博客 【量算分析工具-方位角】GeoServer改造Springboot番外系列…

Ubuntu18 配置FFmpeg开发环境 (Vscode+CMake)

关于Vscode插件安装不再赘述,本文主要讲解如何配置FFmpeg的开发环境以及CMake文件写法,如果不知道该安装什么插件请看本文: Ubuntu配置Vscode 文章目录 1.安装FFmpeg开发包2.配置Vscode项目3.使用C语言验证FFmpeg版本 1.安装FFmpeg开发包 更新…

宝塔部署前后端分离项目手册

文章目录 安装宝塔安装环境开始部署1. 前端Vue项目1.先本地启动前端项目(记住端口号)2.打包前端项目3.上传前端项目4.创建PHP站点5.安全里开放端口号6.测试前端 2. 后端boot项目1. 先在本地跑起来2.修改数据库的配置信息3. 项目打包4. nohup启动项目4.1 …

聊天软件鼻祖 ICQ 将于 6 月 26 日关闭;40 光年外发现一颗潜在宜居的类地行星丨 RTE 开发者日报 Vol.212

开发者朋友们大家好: 这里是 「RTE 开发者日报」 ,每天和大家一起看新闻、聊八卦。我们的社区编辑团队会整理分享 RTE(Real-Time Engagement) 领域内「有话题的新闻」、「有态度的观点」、「有意思的数据」、「有思考的文章」、「…

Android签名()和key hashes获取方法

1.Android获取keystore.debug文件签名。 keytool -list -v -keystore ~/.android/debug.keystore -alias androiddebugkey -storepass android -keypass android2.Android 获取.jks文件签名。 keytool -list -v -keystore /Users/fuzhenwen/AndroidStudioProjects/rab-ev-cha…

Vue3项目练习详细步骤(第一部分:项目构建,登录注册页面)

项目环境准备 工程创建 安装依赖 项目调整 注册功能 页面结构 接口文档 数据绑定和校验 数据接口调用 解决跨域问题 登录功能 接口文档 数据绑定和校验 数据接口调用 项目演示 项目的后端接口参考:https://blog.csdn.net/dafsq/category_12646722.html…

flutter使用dbus插件时,在终端无法使用“dart-dbus”命令

不用flutter的人,可能都不会找到这儿,遇到这个问题,所以这里默认flutter已经装过了,且对flutter如何使用插件也有所了解了。 由于我在项目中用到了dbus插件,用法如图所示,我需要使用这条命令来生成一个sou…

C语言---基础内容(万字)

C 语言是一种通用的、面向过程式的计算机程序设计语言。1972 年,为了移植与开发 UNIX 操作系统,丹尼斯里奇在贝尔电话实验室设计开发了 C 语言。 C 语言是一种广泛使用的计算机语言,它与 Java 编程语言一样普及,二者在现代软件程…

基于小波熵阈值的心电信号R波检测算法(MATLAB)

心脏兴奋电活动过程可由心电信号(ECG)来反映,心电信号也是医学上对心血管疾病诊断的重要科学依据。心电信号具有一定的随机性且一般情况下十分微弱,在信号采集、放大及变换过程中,心电信号容易受到人体呼吸及检测仪器等因素影响,从…

开发依赖与运行依赖

1. 概念 开发依赖:devDependencies 运行依赖:dependencies 2. 理解 (1)devDependencies 在线上状态不需要使用的依赖,就是开发依赖。为什么 npm 要把它单独分拆出来呢?最终目的是为了减少 node_modul…

golang、php,laravel框架对接stripe海外支付接口的总结和流程(通俗易懂)

目录 stripe是什么? 环境 配置后台 首先让管理员把你设置成为开发者 然后进入后台 然后你要创建产品,开单周期要写每天,我这里理解成每天都会有人买的 获取产品id 获取密钥,后续代码需要用到 支付代码 唤起支付页面 测…

摸鱼大数据——Hive表操作——基本操作

Hive表操作 Hive乱码解决 1、乱码现象 create database test1 comment "乱码测试"; use test1; CREATE TABLE orders ( orderId bigint COMMENT 订单id, orderNo string COMMENT 订单编号, shopId bigint COMMENT 门店id ); 2、处理步骤 注意&#…

Orange Pi AIpro——国产AI新星

初见香橙派AiPro 首先非常高兴能体验我们国产香橙派Aipro,在收到产品的时候还是被这精美的做工和强大的配置所折服。也为国内有这么多优秀的企业不断在进步和攀登而自豪。 比起我之前玩派的时候,同样的价格,现在给的实在是太多了&#xff…

前端JS必用工具【js-tool-big-box】学习,获取全球重点城市时间

我们去住一些旅馆的时候,或者一些国际性网站,经常可以看见他们的钟表会展示一些国家地区的时间,这个就是很常用的功能。但如果不常接触这个功能的开发网站呢,大家就看自己电脑右下角的时间展示,就是自己当前的具体时间…

新手一次过软考高级(系统规划与管理师)秘笈,请收藏!

2024上软考已经圆满结束,距离下半年的考试也只剩下半年不到的时间。需要备考下半年软考高级的小伙伴们可以抓紧开始准备了,毕竟高级科目的难度可是不低的。 今天给大家整理了——系统规划与管理师的备考资料 ,都是核心重点,有PDF&…

艾体宝洞察 | Redis Enterprise对比ElastiCache

选择缓存数据库时,如何在Amazon ElastiCache和Redis Enterprise之间做出选择,应当考虑哪些标准? ElastiCache 通常可以满足基本的缓存需求,因此是一种适合初始阶段的解决方案。但随着使用量的增加,ElastiCache很快会变…