Mysql-实战数据备份与恢复

news2024/10/11 5:35:59

文章目录

  • 备份类型
  • 备份内容
  • 备份工具
    • mysqldump备份
  • 实战案例:恢复误删除的表
    • 准备工作
    • 2:30完全备份
    • 完全备份后更新数据表
    • 10:00误删students表
    • 需要恢复还原的状态
    • 开始还原恢复

为什么要备份?

备份是为了:
  灾难恢复:硬件故障、软件故障、自然灾害、黑客攻击、误操作等数据丢失场景。

备份类型

完全备份:整个数据集
部分备份:只备份数据子集,如部分库或表
增量备份:仅备份最近一次完全备份或增量备份(如果存在增量)以来变化的数据,备份加快,还原复杂
差异备份:仅备份最近一次完全备份以来变化的数据,备份较慢,还原简单。

冷备份:读写操作均不可进行,数据库停止服务
温备份;读操作可执行,但写操作不可执行
热备份:读写操作均可执行

MyISAM: 温备,不支持热备
InnoDB: 都支持

物理备份:直接复制数据文件进行备份,与存储引擎有关,占用较多的空间,速度快
逻辑备份:从数据库中“导出”数据另存而进行备份,与存储引擎无关,占用空间少,速度慢,可能丢失精度。

注意:二进制日志文件不应该与数据文件放在同一磁盘。

备份内容

备份什么?
  1.数据
  2.二进制日志、InnoDB的事务日志
  3.用户账号,权限设置,程序代码(存储过程、函数、触发器,事件调度器)
  4.服务器的配置文件

备份工具

mysqldump备份

命令格式

Usage: mysqldump [OPTIONS] database [tables]
OR     mysqldump [OPTIONS] --databases [OPTIONS] DB1 [DB2 DB3...]
OR     mysqldump [OPTIONS] --all-databases [OPTIONS]

实战案例:恢复误删除的表

案例说明:
   每天凌晨2:30做完全备份,早上10:00误删除了students表,10:10才发现故障,
   现在需要将数据库还原到10:10的状态,且恢复被删除的students表。

准备工作

恢复数据之前的准备工作
  1.准备数据库和数据表
  2.确保二进制日志已经开启

现有hellodb数据库中的students、teachers…等数据表

mysql> use hellodb;
Database changed

mysql> show tables;
+-------------------+
| Tables_in_hellodb |
+-------------------+
| classes           |
| coc               |
| courses           |
| scores            |
| students          |
| teachers          |
| toc               |
+-------------------+
7 rows in set (0.01 sec)

现students、teachers表中有如下数据

mysql> select * from students;
+-------+---------------+-----+--------+---------+-----------+
| StuID | Name          | Age | Gender | ClassID | TeacherID |
+-------+---------------+-----+--------+---------+-----------+
|     1 | Shi Zhongyu   |  22 | M      |       2 |         3 |
|     2 | Shi Potian    |  22 | M      |       1 |         7 |
|     3 | Xie Yanke     |  53 | M      |       2 |        16 |
|     4 | Ding Dian     |  32 | M      |       4 |         4 |
|     5 | Yu Yutong     |  26 | M      |       3 |         1 |
|     6 | Shi Qing      |  46 | M      |       5 |      NULL |
|     7 | Xi Ren        |  19 | F      |       3 |      NULL |
|     8 | Lin Daiyu     |  17 | F      |       7 |      NULL |
|     9 | Ren Yingying  |  20 | F      |       6 |      NULL |
|    10 | Yue Lingshan  |  19 | F      |       3 |      NULL |
|    11 | Yuan Chengzhi |  23 | M      |       6 |      NULL |
|    12 | Wen Qingqing  |  19 | F      |       1 |      NULL |
|    13 | Tian Boguang  |  33 | M      |       2 |      NULL |
|    14 | Lu Wushuang   |  17 | F      |       3 |      NULL |
|    15 | Duan Yu       |  19 | M      |       4 |      NULL |
|    16 | Xu Zhu        |  21 | M      |       1 |      NULL |
|    17 | Lin Chong     |  25 | M      |       4 |      NULL |
|    18 | Hua Rong      |  23 | M      |       7 |      NULL |
|    19 | Xue Baochai   |  18 | F      |       6 |      NULL |
|    20 | Diao Chan     |  19 | F      |       7 |      NULL |
|    21 | Huang Yueying |  22 | F      |       6 |      NULL |
|    22 | Xiao Qiao     |  20 | F      |       1 |      NULL |
|    23 | Ma Chao       |  23 | M      |       4 |      NULL |
|    24 | Xu Xian       |  27 | M      |    NULL |      NULL |
|    25 | Sun Dasheng   | 100 | M      |    NULL |      NULL |
+-------+---------------+-----+--------+---------+-----------+
25 rows in set (0.00 sec)

mysql> select * from teachers;
+-----+---------------+-----+--------+
| TID | Name          | Age | Gender |
+-----+---------------+-----+--------+
|   1 | Song Jiang    |  45 | M      |
|   2 | Zhang Sanfeng |  94 | M      |
|   3 | Miejue Shitai |  77 | F      |
|   4 | Lin Chaoying  |  93 | F      |
+-----+---------------+-----+--------+
4 rows in set (0.01 sec)

确认二进制日志是否开启

#确认log_bin和sql_log_bin这两个变量是否为1

mysql> select @@log_bin;
+-----------+
| @@log_bin |
+-----------+
|         1 |
+-----------+

mysql> select @@sql_log_bin;
+---------------+
| @@sql_log_bin |
+---------------+
|             1 |
+---------------+

目前二进制日志文件的位置

mysql> show master logs;
+---------------+-----------+-----------+
| Log_name      | File_size | Encrypted |
+---------------+-----------+-----------+
| binlog.000001 |     10753 | No        |
+---------------+-----------+-----------+
# 执行备份之前二进制日志文件,文件名为binlog.000001,文件大小(File_size)在10753处

2:30完全备份

[root@rocky ~]# mysqldump -uroot -F -A --single-transaction --master-data=2 > /data/full_`date +%F`.sql
WARNING: --master-data is deprecated and will be removed in a future version. Use --source-data instead.
[root@rocky ~]# mysqldump -uroot -F -A --single-transaction --source-data=2 > /data/full_`date +%F`.sql
[root@rocky ~]# 

master-data参数mysql8.0.26以后的版本改为source-data了,上面的WARNING中有提示,我的这个是8.0.32版本的

在这里插入图片描述
full_中记录着二进制日志文件的位置
在这里插入图片描述
在这里插入图片描述

完全备份后更新数据表

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在完全备份之后,系统可能做了很多的数据库操作,更多的操作会导致越来越多的二进制文件生成binlog.000004、binlog.000005…等等

我们可以使用flush log来模拟下生成了多个二进制日志文件

mysql> flush logs;
Query OK, 0 rows affected (0.03 sec)

mysql> show master logs;
+---------------+-----------+-----------+
| Log_name      | File_size | Encrypted |
+---------------+-----------+-----------+
| binlog.000001 |     10797 | No        |
| binlog.000002 |       201 | No        |
| binlog.000003 |       809 | No        |
| binlog.000004 |       157 | No        |
+---------------+-----------+-----------+
4 rows in set (0.00 sec)

mysql> insert students (name,age,gender) values('leilei',20,'F');
Query OK, 1 row affected (0.00 sec)

mysql> insert students (name,age,gender) values('mengm',18,'M');
Query OK, 1 row affected (0.00 sec)

mysql> show master logs;
+---------------+-----------+-----------+
| Log_name      | File_size | Encrypted |
+---------------+-----------+-----------+
| binlog.000001 |     10797 | No        |
| binlog.000002 |       201 | No        |
| binlog.000003 |       809 | No        |
| binlog.000004 |       768 | No        |
+---------------+-----------+-----------+
4 rows in set (0.00 sec)

10:00误删students表

mysql> drop table students;
Query OK, 0 rows affected (0.01 sec)

students表误删后,teachers表还在持续跟新中

mysql> drop table students;
Query OK, 0 rows affected (0.01 sec)

mysql> insert teachers (name,age,gender) values('wang',30,'M');
Query OK, 1 row affected (0.00 sec)

mysql> insert teachers (name,age,gender) values('mage',28,'M');
Query OK, 1 row affected (0.01 sec)
mysql> select * from teachers;
+-----+---------------+-----+--------+
| TID | Name          | Age | Gender |
+-----+---------------+-----+--------+
|   1 | Song Jiang    |  45 | M      |
|   2 | Zhang Sanfeng |  94 | M      |
|   3 | Miejue Shitai |  77 | F      |
|   4 | Lin Chaoying  |  93 | F      |
|   5 | wang          |  30 | M      |
|   6 | mage          |  28 | M      |
+-----+---------------+-----+--------+
6 rows in set (0.00 sec)

需要恢复还原的状态

此时继2:30的完全备份后,我们需要恢复还原哪些数据

继2:30的完全备份后我们需要恢复
  1.students表更新的4条记录
  2.十点钟误删的students表
  3.teachers表更新的2条记录

开始还原恢复

在做数据的恢复还原之前,有几句心得不知当讲不当讲!!!

还是讲吧,“不要拿生产做测试啊!!!”,这是领导怼我的原话。懂我意思吧,能感受到语气的气浪吗!!!记住,哥们,就算你再有把握恢复,也请单独拿一个测试机出来,真正恢复出来了再上生产!!!切记!!!切记!!!切记!!!程序数据这玩意儿你还真得信邪,搞不好生成环境被你弄成一锅粥还不如不恢复!!!

我们将备份出来的sql拷贝到另一个远程主机上做测试

2:30的完全备份后的数据跟新是从二进制日志文件的开始的,所以完全备份之后的更新数据是之后的所有内容
在这里插入图片描述
在这里插入图片描述
将二进制备份出来的内容导入到一个sql文件中

[root@rocky ~]# mysqlbinlog --start-position=157 /var/lib/mysql/binlog.000003 > /data/inc.sql
[root@rocky ~]# mysqlbinlog /var/lib/mysql/binlog.000004 >> /data/inc.sql
[root@rocky ~]#

已经将2:30的数据完全备份(full_2024-03-29.sql)和10:00更新的数据(inc.sql)都备份出相应的sql文件了。
在这里插入图片描述
因为inc.sql中有drop table students的语句,所以我们要找到这个误删除的语句,搞掉这个drop语句之后再恢复还原。

[root@rocky data]# grep -i drop inc.sql 
DROP TABLE `students` /* generated by server */
[root@rocky data]# sed -n '/DROP TABLE `students`/p' inc.sql 
DROP TABLE `students` /* generated by server */
[root@rocky data]# sed -i '/DROP TABLE `students`/d' inc.sql 
[root@rocky data]# sed -n '/DROP TABLE `students`/p' inc.sql 
[root@rocky data]#

将备份出来的sql文件拷贝到另一台远程主机10.0.0.206的data目录下,先在206这台机器上做测试还原,没问题了再在原来的主机上还原恢复。

[root@rocky data]# scp /data/* 10.0.0.206:/data
The authenticity of host '10.0.0.206 (10.0.0.206)' can't be established.
ECDSA key fingerprint is SHA256:jXjzWTy4SJ9SVHPzyzO0XRP60n9QAWDC5kwQBX/tc0U.
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Warning: Permanently added '10.0.0.206' (ECDSA) to the list of known hosts.
root@10.0.0.206's password: 
full_2024-03-29.sql                                                                                                           100% 1262KB 106.0MB/s   00:00    
inc.sql                                                                                                                       100%   12KB  14.7MB/s   00:00    
[root@rocky data]# 

执行远程拷贝过来的sql原文件

mysql> source /data/full_2024-03-29.sql;

mysql> source /data/inc.sql;

如下图已经将2:30分的完全备份和2:30到10:00之前的新增数据都还原恢复了
在这里插入图片描述

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

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

相关文章

基于springboot实现房屋租赁系统项目【项目源码+论文说明】计算机毕业设计

基于springboot实现房屋租赁系统演示 摘要 社会的发展和科学技术的进步,互联网技术越来越受欢迎。网络计算机的生活方式逐渐受到广大人民群众的喜爱,也逐渐进入了每个用户的使用。互联网具有便利性,速度快,效率高,成本…

转型数据报表开发:奥威BI学习网站如何助你一臂之力?

介绍:奥威BI是一款商业智能工具,专为中国企业设计,提供数据可视化分析功能。以下是关于奥威BI的一些详细信息: 自助式敏捷BI分析:用户可以通过简单的操作,如拖拉拽,制作出炫酷的可视化报表。这种…

前端超分辨率技术应用:图像质量提升与场景实践探索-设计篇

超分辨率! 引言 在数字化时代,图像质量对于用户体验的重要性不言而喻。随着显示技术的飞速发展,尤其是移动终端视网膜屏幕的广泛应用,用户对高分辨率、高质量图像的需求日益增长。然而,受限于网络流量、存储空间和图像…

【软件安装】(十四)Ubuntu22.04安装Psensor硬件监视器

一个愿意伫立在巨人肩膀上的农民...... Ubuntu系统硬件运行查询输入指令太繁琐,终端展示不直观,因此这款具有可视化监控Ubuntu系统下当前电脑的硬件CPU(中央处理器)、GPU(显卡)和硬盘等温度等功能&#xff…

HCIP(DSVPN)实验

HCIP(DSVPN)实验 一,实验要求: 1、r5为isp,只能进行ip地址的配置,其所有ip地址均为共有ip地址 2、r1和r5使用ppp的PAP认证,r5为主认证方 r2和r5之间使用ppp的chap认证,r5为主认证方…

vue基础教程(4)——十分钟吃透vue路由router

同学们可以私信我加入学习群! 正文开始 前言一、路由概念二、路由使用三、创建路由对应的组件四、给整个项目一个入口总结 前言 前面的文章运行成功后,页面显示如下: 在这个页面中,点击Home和About都会切换右面的页面内容&#…

HTML网站的概念

目录 前言: 1.什么是网页: 2.什么是网站: 示例: 3.服务器: 总结: 前言: HTML也称Hyper Text Markup Language,意思是超文本标记语言,同时HTML也是前端的基础&…

python实战之PyQt5桌面软件

一. 演示效果 二. 准备工作 1. 使用pip 下载所需包 pyqt5 2. 下载可视化UI工具 QT Designer 链接:https://pan.baidu.com/s/1ic4S3ocEF90Y4L1GqYHPPA?pwdywct 提取码:ywct 3. 可视化UI工具汉化 把上面的链接打开, 里面有安装和汉化包, 前面的路径还要看…

小白python爬虫基础教程(看这一篇就完了)

爬虫的五个步骤: 1)需求分析,找到需求相关的网址 2)获取网址的返回信息(urllib,requests) 3)定位需要的信息所在位置(re正则表达式,XPATH, CSS selector) 4&#xff…

开通幻兽帕鲁游戏多人联机服务器多少钱?价格意想不到

2024年全网最全的幻兽帕鲁服务器租用价格表,阿里云幻兽帕鲁游戏服务器26元1个月、腾讯云32元一个月、京东云26元一个月、华为云24元1个月,阿腾云atengyun.com整理最新幻兽帕鲁专用4核16G、8核16G、8核32G游戏服务器租用价格表大全: 阿里云幻…

在微信上处理小程序用户反馈具体的方法

想必大家在开发小程序的时候,一定遇到这种情况: 为了用户有更好的体验,我们会定期登陆微信小程序来查看用户反馈并对用户的问题进行回复和处理,但是这种方法的缺点就是最多间隔48小时要进行登陆一次以及回复用户不及时。 这样的话…

codesys通过moudbus TCP连接西门子1214c,西门子做客户端

思路在codesys中发送数据到西门子,西门子原封不动的将数据传回。 1.首先配置codesys; 我设置了500个,但是好像发不这么多,只能120多个。因为什么来我忘了。但是这里不影响。 2.配置映射: 3.写代码 PROGRAM PLC_PRG VARarySendDa…

大模型助力学术图谱挖掘!OAG-Challenge @ KDD Cup 2024正式开始

如何用大模型推动学术知识图谱挖掘任务?OAG-Challenge KDD Cup 2024 邀你来赛! 竞赛网址:https://www.biendata.xyz/kdd2024/ 竞赛背景 自 1997 年创办以来,知识发现和数据挖掘会议 ACM SIGKDD 上举办的 KDD Cup 被誉为全球最…

【微服务】Sentinel(流量控制)

文章目录 1.基本介绍1.Sentinel是什么2.Sentinel主要特性3.Sentinel核心功能1.流量控制2.熔断降级3.消息削峰填谷 4.Sentinel两个组成部分 2.Sentinel控制台显示1.需求分析2.下载3.运行1.进入cmd2.输入java -jar sentinel-dashboard-1.8.0.jar3.查看默认端口8080 4.访问1.账号和…

考研数学|《660》完全不会做怎么办?【注意】

很多人有一个误区: 不仅仅是做660题的误区,很多人做其他的习题册都有这个误区,就是以为太依靠答案,如果一道题目做不出来,也不去思考,就直接去看答案怎么做,然后把答案看会了,就认为…

如何利用OpenCV4.9 更改图像的对比度和亮度

返回:OpenCV系列文章目录(持续更新中......) 上一篇:使用 OpenCV 添加(混合)两个图像 下一篇:如何利用OpenCV4.9离散傅里叶变换 ​目标 在本教程中,您将学习如何: 访问像素值用零…

路由的完整使用

多页面和单页面 多页面是指超链接等跳转到另一个HTML文件,单页面是仍是这个文件只是路由改变了页面的一部分结构. 路由的基本使用 使用vue2,则配套的路由需要是第3版. 1)下载vue-router插件 2)引入导出函数 3)new 创建路由对象 4)当写到vue的router后只能写路由对象,因此只…

Git版本管理使用手册 - 8 - 合并分支、解决冲突

合并整个开发分支 切换到本地test分支,选择右下角远程开发分支,选择Merge into Current。然后提交到远程test仓库。 合并某次提交的代码 当前工作区切换成test分支,选择远程仓库中的dev开发分支,选择需要合并的提交版本右击&a…

cmd小黑框——命令行基础语句与实操效果演示

cmd小黑框——命令行学习 初识cmd小黑框cmd命令缩写含义介绍cmd基础操作cmd实操效果演示cmd命令行快捷键 初识cmd小黑框 CMD,全称Command,是Windows系统中自带的一个命令行解释器,它允许用户通过输入命令来对系统进行各种操作。CMD命令在Win…

从运营层面看财务管理:如何做好项目的财务预算

有效的项目运营是企业发展进步的主要活动,企业管理者的项目财务管理主要针对项目财务预算。项目财务预算管理是企业财务管理的一个分支,也是项目财务管理的核心部分,其表现形式为一个综合性的财务计划,主要包括预算编制、报告、执…