iis服务器助手广告
返回顶部
首页 > 资讯 > 数据库 >如何进行MySQL断电恢复的分析
  • 735
分享到

如何进行MySQL断电恢复的分析

2024-04-02 19:04:59 735人浏览 薄情痞子
摘要

本篇文章给大家分享的是有关如何进行Mysql断电恢复的分析,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。 今天有个网友问我一个mysql的恢

本篇文章给大家分享的是有关如何进行Mysql断电恢复的分析,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。

今天有个网友问我一个mysql的恢复问题。提供的截图如下。

   对于这个问题,在一些断电的场景下还是可能出现的。我首先是要确认是否为线上业务还是测试环境,线上业务来说这个影响还是很大的。如果数据库无法启动,首要任务还是把数据库启动,然后在这个基础上查看丢失的数据程度,安排数据修复的事宜。

   当然从我的角度来说,怎么去快速复现这个问题呢。我用自己写的快速搭建测试主从环境的脚本(https://GitHub.com/jeanron100/mysql_slaves,后期有一位大牛建议用python来做,最近在考虑),分分钟即可搞定。

    我们创建一个表test,指定id,name两个字段。然后开启显式事务

create table test(id int primary key,name varchar(30) not null);

显式开启一个事务:

begin;
insert into test values(1,'a');
insert into test values(2,'b');
insert into test values(3,'c');

 不提交,我们直接查看mysql的服务进程,直接Kill掉。默认情况下双1指标是开启的,我们直接模拟断电重启,看看后台的处理情况:

2017-09-13 15:05:11 35556 [Note] InnoDB: Highest supported file fORMat is Barracuda.
2017-09-13 15:05:11 35556 [Note] InnoDB: The log sequence numbers 1625987 and 1625987 in ibdata files do not match the log sequence number 1640654 in the ib_logfiles!
2017-09-13 15:05:11 35556 [Note] InnoDB: Database was not shutdown normally!
2017-09-13 15:05:11 35556 [Note] InnoDB: Starting crash recovery.
2017-09-13 15:05:11 35556 [Note] InnoDB: Reading tablespace information from the .ibd files...
2017-09-13 15:05:11 35556 [Note] InnoDB: Restoring possible half-written data pages
2017-09-13 15:05:11 35556 [Note] InnoDB: from the doublewrite buffer...
InnoDB: 1 transaction(s) which must be rolled back or cleaned up
InnoDB: in total 3 row operations to undo
InnoDB: Trx id counter is 2304
2017-09-13 15:05:11 35556 [Note] InnoDB: 128 rollback segment(s) are active.
InnoDB: Starting in background the rollback of uncommitted transactions
2017-09-13 15:05:11 7f5ccc3D1700  InnoDB: Rolling back trx with id 1806, 3 rows to undo
2017-09-13 15:05:11 35556 [Note] InnoDB: Rollback of trx with id 1806 completed
2017-09-13 15:05:11 7f5ccc3d1700  InnoDB: Rollback of non-prepared transactions completed
2017-09-13 15:05:11 35556 [Note] InnoDB: Waiting for purge to start
2017-09-13 15:05:11 35556 [Note] InnoDB:  Percona XtraDB (Http://www.percona.com) 5.6.14-rel62.0 started; log sequence number 1640654
2017-09-13 15:05:11 35556 [Note] Recovering after a crash using binlog
2017-09-13 15:05:11 35556 [Note] Starting crash recovery...
2017-09-13 15:05:11 35556 [Note] Crash recovery finished.
2017-09-13 15:05:11 35556 [Note] RSA private key file not found: /U01/mysql_test/m1//private_key.pem. Some authentication plugins will not work.
2017-09-13 15:05:11 35556 [Note] RSA public key file not found: /U01/mysql_test/m1//public_key.pem. Some authentication plugins will not work.
2017-09-13 15:05:11 35556 [Note] Server hostname (bind-address): '*'; port: 21804

  可以看到后台检测到了上次的异常宕机,然后开启崩溃恢复,InnoDB检测到日志LSN是1625987 而系统数据文件ibd的LSN为1625987 ,和ib_logfiles里面的LSN不匹配。后面就是一系列的恢复,前滚,恢复,回滚。最后表里的数据为空,证明之前的事务都已经回滚了。

  所以基于上面的情况,我们明白开启了事务,基本情况下这个问题是不会出现的,什么时候会抛出开始的错误呢。

  我们继续测试,开启一个显式事务,不提交。

begin;
insert into test values(1,'a');
insert into test values(2,'b');
insert into test values(3,'c');

然后杀掉mysql的服务进程,找到mysql的数据目录下,删除redo文件。完成后我们重启数据库。

  这个时候就抛出了和截图类似的错误。

2017-09-13 16:05:14 36896 [Note] InnoDB: Highest supported file format is Barracuda.
2017-09-13 16:05:14 7f73450a97e0 InnoDB: Error: page 7 log sequence number 1627722
InnoDB: is in the future! Current system log sequence number 1626124.
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/5.6/en/forcing-innodb-recovery.html
InnoDB: for more information.

 这个问题目前的影响范围其实还不明显,因为尽管如此,我们还是能够写入数据的。

mysql> insert into test values(1,'a');
Query OK, 1 row affected (0.04 sec)

mysql> select *from test;
+----+------+
| id | name |
+----+------+
|  1 | a    |
+----+------+
1 row in set (0.00 sec)
关于崩溃恢复,有一个数据参数尤其需要注意,那就是innodb_force_recovery,这个参数默认值为0,如果为非0的值(范围为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):         不执行前滚的操作。

   当然这个参数的设置修改是需要重启MySQL服务的。

mysql> set global innodb_force_recovery=2;
ERROR 1238 (HY000): Variable 'innodb_force_recovery' is a read only variable

 在此假设我们设置为2,再次复现这个问题问题,你就会发现,数据库暂时是可以启动的,但是数据只能查询,DML操作都会抛错。

mysql> select *from test;
Empty set (0.00 sec)
mysql>
mysql> insert into test values(1,'a');
ERROR 1030 (HY000): Got error -1 from storage engine
  按照这个影响的范围来评估force_recovery的值,我们就可以做相应的取舍了。如果MySQL服务无法正常启动,就可以修改这个参数值来调整,先满足服务可持续性的基本问题。然后评估后导出重要的数据来。

以上就是如何进行MySQL断电恢复的分析,小编相信有部分知识点可能是我们日常工作会见到或用到的。希望你能通过这篇文章学到更多知识。更多详情敬请关注编程网数据库频道。

您可能感兴趣的文档:

--结束END--

本文标题: 如何进行MySQL断电恢复的分析

本文链接: https://www.lsjlt.com/news/66102.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

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

下载Word文档
猜你喜欢
  • 如何进行MySQL断电恢复的分析
    本篇文章给大家分享的是有关如何进行MySQL断电恢复的分析,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。 今天有个网友问我一个MySQL的恢...
    99+
    2024-04-02
  • 如何进行MySQL修复表的简单分析
    如何进行MySQL修复表的简单分析,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。 今天有个同事问我一个数据库的问题,如果开始他就把环境细节全...
    99+
    2024-04-02
  • 如何进行MySQL中的xtrabackup备份恢复
    这篇文章给大家介绍如何进行MySQL中的xtrabackup备份恢复,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。    XtraBackup是Percona推出...
    99+
    2024-04-02
  • 如何进行mysql的备份与恢复的探讨
    如何进行mysql的备份与恢复的探讨,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。1,我现在的备份方案为:A(master)-...
    99+
    2024-04-02
  • 如何进行mysql性能测试库的CRASH恢复
    今天就跟大家聊聊有关如何进行mysql性能测试库的CRASH恢复,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。 环境:O...
    99+
    2024-04-02
  • 如何进行MySQL句柄恢复的简单尝试
    如何进行MySQL句柄恢复的简单尝试,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。 今天突然想起一个问题,那就是对于ibda...
    99+
    2024-04-02
  • 如何进行mysql的备份的分析
    这篇文章将为大家详细讲解有关如何进行mysql的备份的分析,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。在linux下的mysql在刚安装时候的默认用户都是...
    99+
    2024-04-02
  • MySQL中如何进行数据备份和恢复
    MySQL 中可以通过使用 mysqldump 工具来进行数据备份和恢复操作。以下是备份和恢复的步骤: 数据备份: 打开命令行工具...
    99+
    2024-03-06
    MySQL
  • 如何进行mysql的innodb_flush_log_at_trx_commit参数分析
    这期内容当中小编将会给大家带来有关如何进行mysql的innodb_flush_log_at_trx_commit参数分析,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。 ...
    99+
    2024-04-02
  • MySQL中如何进行备份和恢复数据
    在MySQL中,可以使用mysqldump命令来备份数据库,使用mysql命令来恢复数据库。 备份数据: mysqldump -u ...
    99+
    2024-04-09
    MySQL
  • 如何进行mongdb备份恢复
    如何进行mongdb备份恢复,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。一、物理备份(拷贝文件)#!/bin/sh DATE=`date...
    99+
    2024-04-02
  • 如何进行Grafana的备份和恢复
    要备份Grafana,可以按照以下步骤进行: 备份Grafana的配置文件:在Grafana的安装目录下找到grafana.in...
    99+
    2024-04-02
  • 如何进行Zabbix的备份和恢复
    Zabbix的备份和恢复可以通过以下步骤实现: 备份Zabbix数据: 在Zabbix服务器上登录到命令行界面。 使用以下命令备份...
    99+
    2024-04-02
  • mysql如何利用binlog进行数据恢复详解
    前言 最近线上误操作了一个数据,由于是直接修改的数据库,所有唯一的恢复方式就在mysql的binlog。binlog使用的是ROW模式,即受影响的每条记录都会生成一个sql。同时利用了binlog2sql项...
    99+
    2024-04-02
  • 如何使用mysqldump对mysql进行备份和恢复
    这篇文章给大家分享的是有关如何使用mysqldump对mysql进行备份和恢复的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。mysqldump是mysql的逻辑备份恢复工具,可以...
    99+
    2024-04-02
  • 如何在MySQL中进行数据备份和恢复
    在MySQL中进行数据备份和恢复可以使用以下几种方法: 使用mysqldump命令进行数据备份: 备份数据库:mysqldum...
    99+
    2024-04-09
    MySQL
  • 如何进行MySQL加锁处理的分析
    如何进行MySQL加锁处理的分析,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。 1. 准备测试数据use t...
    99+
    2024-04-02
  • 如何使用MySQL进行数据备份和恢复?
    如何使用MySQL进行数据备份和恢复?数据库中的数据对于任何企业或个人而言都是非常重要的。由于各种原因(如硬件故障、人为错误或恶意攻击等),数据可能会丢失或损坏。因此,定期进行数据库备份是非常重要的。MySQL作为最受欢迎的开源关系型数据库...
    99+
    2023-10-22
    数据恢复 MySQL备份 MySQL数据备份
  • mysql增量备份及断点恢复脚本的示例分析
    这篇文章给大家分享的是有关mysql增量备份及断点恢复脚本的示例分析的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。简介增量备份是指在一次全备份或上一次增量备份后,以后每次的备份只...
    99+
    2024-04-02
  • FreeBSD如何进行备份和恢复
    FreeBSD可以使用多种工具来进行备份和恢复,以下是一些常用的方法: 使用rsync命令进行备份和恢复: 备份:可以使用rs...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作