第86讲:MySQLDump与Binlog日志实现企业级数据备份恢复案例

文章目录

    • 1.企业级数据备份恢复案例描述
    • 2.第一环节:周三凌晨进行数据全量备份
    • 3.第二环节:模拟周三凌晨备份完之后到下午3点前的业务操作
    • 4.第三环节:模拟数据库异常数据丢失导致平台无法使用
    • 5.第四环节:发布停服公告全员进入数据恢复处理阶段
    • 6.第五环节:数据加急恢复过程中!
      • 6.1.还原平台库的今日凌晨时的全量备份数据
      • 6.2.从Binlog中还原凌晨到现在时刻没有备份的数据
    • 7.第六环节:校验数据的准确性
    • 7.第七环节:平台恢复上线

1.企业级数据备份恢复案例描述

案例背景:

某互联网公司的MySQL版本时5.7.35,操作系统是Centos7.5,数据量大概在100G左右,每日的数据增量大概是10M以内。

数据备份策略:

每天晚上0点使用mysqldump进行全库备份,并且针对Binlog日志也进行备份。

故障描述:

某周三下午3点,由于某些原因导致数据库中的数据全部损坏,导致平台无法正常使用。

故障处理过程:

  • 1)首先发布平台维护公告,宣布停服,全员抓紧实现进行数据修复。
  • 2)然后评估数据损坏的程度:
    • 数据是否是全部丢失,如果数据全部丢失那么建议直接在线上环境的数据库中进行数据恢复。
    • 是否只有部分数据丢失,如果是部分表数据丢失,可能是运维、开发人员误操作导致,建议从备份中以及Binlog中导出某些表的数据,然后在预发布环境的数据库中进行数据恢复,恢复完成后待测试同事校验,没问题后还原到线上环境。
  • 3)确定是数据全部丢失后,那么直接将周三凌晨的全量备份在线上数据库中还原,追溯到周三凌晨时的数据状态。
  • 4)全备数据恢复完成后,从Binlog日志中截取从凌晨到故障发生时的Binlog日志,然后进行数据恢复。
  • 5)由测试同事校验数据的一致性。
  • 6)一切没问题后,恢复线上使用。

处理结果:

经过30~40分钟左右的处理,平台恢复。

下面我们开始模拟这个案例。

2.第一环节:周三凌晨进行数据全量备份

周三凌晨的自动数据备份:

[root@mysql ~]# mysqldump -uroot -p123456 -A -R --triggers -E --master-data=2 --single-transaction > /data/backup/all_db_bak-`date +%F`.sql

周三上班后检查数据备份情况。

1.检查备份是否存在
[root@mysql ~]# ll /data/backup/all_db_bak-`date +%F`.sql
-rw-r--r-- 1 root root 884223 72 0:45 /data/backup/all_db_bak-2022-07-02.sql

2.检查备份中的内容

3.记录凌晨备份文件中的Binlog状态信息(备份开始时间点的Position号和GTID号)
#每天养成习惯,记录下备份文件中备份开始时间段的Binlog状态,当天出现数据问题,没有备份时,可以快速找到数据对应的Binlog位置。
-- CHANGE MASTER TO MASTER_LOG_FILE='mysql-bin.000012', MASTER_LOG_POS=14417;
SET @@GLOBAL.GTID_PURGED='e0a2c0cc-f835-11ec-8a3c-005056b791aa:1-66';

3.第二环节:模拟周三凌晨备份完之后到下午3点前的业务操作

模拟周三凌晨备份完之后到下午三点数据库异常之前,所产生的业务操作。

CREATE TABLE xscjb (
	xh INT COMMENT '学号',
	xm VARCHAR ( 20 ) COMMENT '姓名',
	ywcj INT COMMENT '语文成绩',
	sxcj INT COMMENT '数学成绩',
	yycj INT COMMENT '英语成绩'
) COMMENT '学生成绩表';
    
insert into xscjb VALUES (1, '小明', 45, 75, 93 );
insert into xscjb VALUES (2, '小红' , 47, 56, 25);
insert into xscjb VALUES (3, '小兰', 82, 91, 89);
insert into xscjb VALUES (4, '小黄', 88, 75, 66);
insert into xscjb VALUES (5, '小李', 93, 96, 91);
insert into xscjb VALUES (6, '小江', 97, 67, 65);
insert into xscjb VALUES (7, '小王', 75, 58, 32);

update xscjb set ywcj = '100' where xh = '7';
update xscjb set sxcj = '77' where xm = '小兰';
update xscjb set yycj = '99' where xm = '小王';

delete from xscjb where xh = '4';

数据库异常时刻,xscjb业务表最后的样子。

image-20220702220935456

4.第三环节:模拟数据库异常数据丢失导致平台无法使用

模拟数据库文件损坏,数据丢失,导致平台无法使用。

直接将平台的数据库删除就行了。
mysql> drop database db_1;
[root@mysql ~]# rm -rf /data/mysql/db_1/

模拟结果:平台库数据库全部损坏,已崩,数据库实例还能用。(本次模拟过程中,没有将数据库所有文件删除,是因为Binlog也在这个路径,如果模拟数据库文件全部损坏,那么修复的时候就需要重新初始化数据库的,Binlog也会被覆盖,因此这里只模拟平台库数据库文件损坏,全部丢失。)

如果只删除了磁盘中某个数据库的所有文件,那么在交互式中是无法删除这个数据库中,需要先重启MySQL实例,然后才能进行删除,因此再删库时,要先删库,再删磁盘文件。

5.第四环节:发布停服公告全员进入数据恢复处理阶段

此时已经下午3点了,数据库突然损坏,平台库文件由于某某全部损坏,导致平台无法访问。

停服公告已发布,下面开始进入问题处理解决阶段。

经过一番分析后,确定平台对应的数据库文件全部损坏,该库的数据全部丢失,不是部分表数据丢失,下面需要紧急进入数据修复阶段,预计耗时未知!!!!

6.第五环节:数据加急恢复过程中!

6.1.还原平台库的今日凌晨时的全量备份数据

1.找到今日凌晨时的数据备份文件。
[root@mysql ~]# ll /data/backup/all_db_bak-2022-07-02.sql 
-rw-r--r-- 1 root root 884223 72 0:45 /data/backup/all_db_bak-2022-07-02.sql

2.直接在线上生产库中还原凌晨备份的数据。
mysql> set sql_log_bin=0;
mysql> source /data/backup/all_db_bak-2022-07-02.sql 

此时已经从全量备份中恢复了平台库,但是全量备份只包含今日凌晨之前的数据,今日凌晨到现在的数据还没有恢复。

image-20220702222802625

6.2.从Binlog中还原凌晨到现在时刻没有备份的数据

我们已经从全备中将平台库的数据恢复到了今日凌晨时的状态,但是从凌晨到故障发生前的数据还没来得及备份就丢失了,下面从Binlog中恢复没有备份的数据。

下面我们需要从Binlog中截取今日凌晨到现在时刻的Binlog,我们都知道Binlog日志截取最麻烦的就是找起点和终点,终点很好找,平台库已经挂了,那么Binlog中最后一个GTID事务号,就是终点。

由于我们使用mysqldump备份时,增加了--maste-data=2这个参数,此参数会在备份文件中帮我们记录:从备份开始的时间算,Binlog中最近的一个GTID号、当前使用的Binlog日志名称、Binlog中事件的最近一个Position标识位号,有了这三个信息之后,找起点不再是难事,我们可以非常快速的指定我们要截取那些Binlog日志。

GTID号更加好找,我们以GTID号截取Binlog数据。

1)确定要截取的Binlog日志GTID号范围

下面的这两行就是从备份文件中找到的关于Binlog日志的状态。从中我们可以得知当前使用的Binlog是mysql-bin.000012,最近一个事件的Position号是14417,最近的一个GTID号是66。

并且记录的GTID号格式是e0a2c0cc-f835-11ec-8a3c-005056b791aa:1-66这样子,其实也就告诉了我们在这个备份文件中,将GTID号1-66这个范围之间所有产生的日志都进行备份了。

-- CHANGE MASTER TO MASTER_LOG_FILE='mysql-bin.000012', MASTER_LOG_POS=14417;
SET @@GLOBAL.GTID_PURGED='e0a2c0cc-f835-11ec-8a3c-005056b791aa:1-66';

刚刚我们也做了全库备份的数据还原,也就表示GTID号1-66这个范围的数据已经全部被恢复了,但是从67GTID号开始一直到数据库崩溃时的这个范围是没有被恢复的。

下面我们去看一下Binlog的事件信息,看看GTID号67是不是新数据,然后再获取数据库崩溃时的最新GTID号。

在GTID号67这里,我们看到创建了一张新表,这个操作就是新的业务逻辑,没错就是从这里截取,备份文件中记录的是准确无误的。

image-20220702225046179

起点找到了是GTID 67号,那么接着还早终点,直接翻到最后,最后一个GTID号就是数据库崩溃时的最后一个事务,最后一个GTID号是78。

image-20220702225529891

2)截取凌晨到当前时间产生的Binlog日志

在上一步已经确定了GTID起点是67,终点是78,下面开始截取这一部分的Binlog日志

[root@mysql ~]# mysqlbinlog --skip-gtids --include-gtids='e0a2c0cc-f835-11ec-8a3c-005056b791aa:67-78' /data/mysql/mysql-bin.000012 > /data/backup/sjbkjd-binlog.sql

3)从Binlog中恢复从凌晨到数据库崩溃时间段的数据

mysql> set sql_log_bin=0;
mysql> source /data/backup/sjbkjd-binlog.sql

7.第六环节:校验数据的准确性

数据库全备已经恢复了,从凌晨到数据库崩溃时间段的数据也从Binlog中恢复了,下面由测试同事检测数据的准确性。

mysql> select * from db_1.xscjb;
+------+--------+------+------+------+
| xh   | xm     | ywcj | sxcj | yycj |
+------+--------+------+------+------+
|    1 | 小明   |   45 |   75 |   93 |
|    2 | 小红   |   47 |   56 |   25 |
|    3 | 小兰   |   82 |   77 |   89 |
|    5 | 小李   |   93 |   96 |   91 |
|    6 | 小江   |   97 |   67 |   65 |
|    7 | 小王   |  100 |   58 |   99 |
+------+--------+------+------+------+
6 rows in set (0.00 sec)

数据准确无误,全部恢复成功。

7.第七环节:平台恢复上线

此时数据已经全部恢复了,平台也能正常使用了,宣告再次上线。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

PCL 计算异面直线的距离

目录 一、算法原理二、代码实现三、结果展示四、相关链接本文由CSDN点云侠原创,PCL 计算异面直线的距离,爬虫自重。如果你不是在点云侠的博客中看到该文章,那么此处便是不要脸的爬虫与GPT。 一、算法原理 设置直线 A B AB A

【Linux】通过两台linux主机配置ssh实现互相免密登陆

以下是通过两台Linux主机配置SSH实现互相免密登录的代码及操作流程: node1主机IP:192.168.48.129 server主机IP:192.168.48.130 1、在node1主机上生成密钥对: ssh-keygen -t rsa 2、将node1主机的公钥发送到server主机&#x…

Visual Studio 新特性:对 include 指令进行智能诊断

今天,我们很高兴地宣布新功能:#include 语言智能诊断。 此功能自 Visual Studio 2022 v17.9 预览版2 中可用。通过此新功能,您可以获取到有关每个 include 的引用和生成时间的详细信息,从而更好地了解 #include 指令的行为。 &g…

docker 部署项目的操作文档,安装nginx

目录 1 部署环境检查2 相关知识点2.1 docker默认镜像存放地址2.2 docker 的镜像都是tar 包?2.3 Docker-compose 是直接使用镜像创建容器?2.4 Docker Compose down 就是将容器删除?2.5 删除,会删除挂载嘛2.6 DockerFile 和 docker …

什么是线程?

线程 1. 线程概述 线程是计算机科学中的基本概念,指的是在一个进程中执行的独立指令流。通常,一个进程可以包含多个线程,它们共享进程的资源,如内存空间、文件句柄等,但每个线程有自己的独立执行流。线程是操作系统进…

计算机毕业设计 基于Java的流浪动物救助平台的设计与实现 Java实战项目 附源码+文档+视频讲解

博主介绍:✌从事软件开发10年之余,专注于Java技术领域、Python人工智能及数据挖掘、小程序项目开发和Android项目开发等。CSDN、掘金、华为云、InfoQ、阿里云等平台优质作者✌ 🍅文末获取源码联系🍅 👇🏻 精…

使用Windbg动态调试目标进程的一般步骤详解

目录 1、概述 2、将Windbg附加到已经启动起来的目标进程上,或者用Windbg启动目标程序 2.1、将Windbg附加到已经启动起来的目标进程上 2.2、用Windbg启动目标程序 2.3、Windbg关联到目标进程上会中断下来,输入g命令将该中断跳过去 3、分析实例说明 …

机器学习之线性回归-多因子房价预测

机器学习是一种实现人工智能的方法 从数据中寻找规律、建立关系,根据建立的关系去解决问题 机器学习的应用场景 数据挖掘、计算机视觉、自然语言处理、证券分析、医学诊断、机器人… 实现机器学习的基本框架 将训练数据喂给计算机,计算机自动求解数据…

javaWebssh校园物业管理系统myeclipse开发mysql数据库MVC模式java编程计算机网页设计

一、源码特点 java ssh校园物业管理系统是一套完善的web设计系统(系统采用ssh框架进行设计开发),对理解JSP java编程开发语言有帮助,系统具有完整的源代码和数据库,系统主要采用 B/S模式开发。开发环境为TOMCAT7.…

网工内推 | 上市公司网工,NP认证优先,最高15薪+项目奖金

01 广东轩辕网络科技股份有限公司 招聘岗位:网络工程师 职责描述: 1、主要负责教育行业园区网的有线及无线网络项目的实施、维护、巡检等工作; 2、协助windows/linux平台服务器OS的安装、部署、配置与维护; 3、协助服务器、存储、…

2023-12-30 买卖股票的最佳时机 II和跳跃游戏以及跳跃游戏 II

122. 买卖股票的最佳时机 II 思路:关键点是每一次利用峰值来计算【画图好理解一点,就是计算陡坡的值】!每一次累加和的最大! 或者可以这样理解,把利润划分为每天的,如假如第 0 天买入,第 3 天卖出&#xf…

【I2多语言】多语言快速上手

简介 官方API:http://www.inter-illusion.com/assets/I2LocalizationManual/I2LocalizationManual.html意义:更改游戏语言(多语言支持) 快速上手 插件安装: 直接拖拽进Unity即可 创建语言源(Creating a …

夏目友人帐OVA:和猫咪老师的初次跑腿、曾几何时下雪之日 2013.12.15

夏目友人帐OVA 1、和猫咪老师的初次跑腿 / ニャンコ先生とはじめてのおつかい2、曾几何时下雪之日 / いつかゆきのひに 1、和猫咪老师的初次跑腿 / ニャンコ先生とはじめてのおつかい 和夏目一起外出的途中,猫咪老师因追蜻蜓遇到了一对迷路的龙凤胎兄妹。猫咪老师不…

设计模式⑤ :一致性

一、前言 有时候不想动脑子,就懒得看源码又不像浪费时间所以会看看书,但是又记不住,所以决定开始写"抄书"系列。本系列大部分内容都是来源于《 图解设计模式》(【日】结城浩 著)。该系列文章可随意转载。 …

旧衣回收小程序,降低企业商家成本,推动行业发展!

随着大众环保意识的增加,人们对于闲置衣服的处理方式也从丢弃转向回收,旧衣服回收行业受到了大家的关注,成为了新的商业发展模式。 在当下科技发展的背景下,旧衣回收从回收箱演变到了线上预约上门回收,旧衣回收小程序…

地铁判官(外包)

到处都是说外包不好不好的,从没有想过自身问题。 例如: 技术人员动不动就是说,进了外包三天,一年,三年之后技术退步很多。就算你这样的人进了甲方,也是个渣渣。(声明一下,我也是外包&#xff0…

jmeter监控服务器资源使用情况

GitHub - undera/perfmon-agent: Server metrics fetching agent, based on SIGAR 下载安装包:ServerAgent-2.2.3.zip 解压先 启动,如果是windows运行startAgent.bat,如果是linux运行startAgent.sh 注意:linux上注意权限的问题…

离散数学-二元关系

4.1关系的概念 1)序偶及n元有序组 由两个个体x和y&#xff0c;按照一定顺序排序成的、有序数组称为有序偶或有序对、二元有序组&#xff0c; 记作<x&#xff0c;y>&#xff0c;其中x是第一分量&#xff0c;y是第二分量。 相等有序偶&#xff1a;第一分量和第二分量分…

三维地下管线建模工具MagicPipe3D V3.3发布

经纬管网建模系统MagicPipe3D V3.3 持续更新&#xff0c;欢迎下载试用&#xff1a;http://www.magic3d.net 1、发布MagicPipe3D宣传操作视频, 2、发布MagicPipe3D数据规格说明, 3、更新使用手册到3.3.0版本, 4、增加支持属性字段中文, 5、增加支持附属物方…

由于找不到x3daudio1_7.dll无法继续执行此代码的多种解决方法大全

在我们运行软件游戏的时候&#xff0c;偶尔会出现无法运行的报错&#xff0c;其中之一就是“找不到x3daudio1_7.dll”的错误。x3daudio1_7.dll是Windows操作系统中的一个重要动态链接库文件&#xff0c;主要负责音频设备的3D音效功能。电脑“找不到x3daudio1_7.dll”可能会导致…