Mysql数据备份与恢复实战

文章目录

  • 备份类型
  • 备份内容
  • 备份工具
    • 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 changedmysql> 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 |......
|    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      |
......
|   3 | Miejue Shitai |  77 | F      |
|   4 | Lin Chaoying  |  93 | F      |
+-----+---------------+-----+--------+
4 rows in set (0.01 sec)

确认二进制日志是否开启

#确认log_bin和sql_log_bin这两个变量是否为1mysql> 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_2024-03-29.sql中记录着二进制日志文件的位置,如下截图:
在这里插入图片描述
在这里插入图片描述

完全备份后更新数据表

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在完全备份之后,系统可能做了很多的数据库操作,更多的操作会导致越来越多的二进制文件生成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.mzph.cn/news/780366.shtml

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

相关文章

Leetcode的正确打开方式

很多新手朋友在学习完数据结构与算法之后,都想找个平台磨练自己的技艺。那么LeetCode绝对是不二之选。但是官网刷题不是很友好,那么今天给大家介绍一款刷LeetCode神器。也是未来工作之后的摸鱼神器。 leetcode-editor 本打工人的摸(nei&am…

10分钟带你用openlab搭建web网站

准备工作 虚拟机恢复快照 关闭防火墙、下载httpd,启动httpd服务、显示httpd服务是否开启 [rootserver ~]# systemctl stop firewalld [rootserver ~]# yum install httpd -y [rootserver ~]# systemctl start httpd [rootserver ~]# systemctl enable httpd [root…

【Java初阶(六)下】封装 继承 多态

❣博主主页: 33的博客❣ ▶文章专栏分类: Java从入门到精通◀ 🚚我的代码仓库: 33的代码仓库🚚 目录 1.前言2.多态2.1多态的概念2.2多态实现条件2.3重写2.3.1避免在构造方法中调用重写的方法 2.4向上转型和向下转型2.4.1向上转型2.4.2向下转型 3.抽象类3…

常见的数学方法

Math类表示数学类,其中的数学方法都被定义成为static形式,所以可以直接通过Math类的类名调用某个数学方法。语法格式: Math.xxx(参数); 例题 输入n个整数a1,a2,a3,......an,求这n个数的最大值max,最小值min&#xff0…

记录个人学习golang路线(如何学习golang,如何转golang)

最近好久没更,在看兔兔的博客,学习golang,兔兔的文章,有一定的编程经验 && 初学golang者,一定要看,如果是其他语言转golang,那就必须要看了,可以帮助你了解golang的语法&…

再见 mysql_upgrade

在数据库管理的世界里,随着技术的不断进步和业务的不断发展,数据库的版本升级成为了一个不可避免的过程。 MySQL 作为业界领先的开源关系型数据库管理系统,其版本迭代与功能优化同样不容忽视。 而在这个过程中,升级工具就显得尤为…

政安晨:【Keras机器学习实践要点】(五)—— 通过子类化创建新层和模型

目录 介绍 安装 层级:状态(权重)与某些计算的组合 层可以有不可训练的重量 最佳实践:推迟权重的创建,直到输入的形状已知。 层可以递归组合 后端不可知层和特定后端层 add_loss()方法 可以选择在您的层上启用…

C语言goto语句介绍

在C语言中,goto语句是一种流程控制语句,用于无条件地转移到程序中的特定标签位置。尽管goto语句在编程中具有一定的争议,但在某些情况下,它可以提供一种简单有效的解决方案。本文将深入介绍C语言中的goto语句,包括其基…

前端小白的学习之路(webpack)

提示:webpack简介,nvm,npm配置环境,常用命令,基本web项目构建 目录 webpack 1.配置环境 1)node.js node常用命令 2)nvm nvm常用命令: 3)npm npm常用命令 2.构建简易web项目 1)创建目录 2)安装webpack依赖 3)配置 webpac…

4核32G轻量云服务器优惠价格65元/月、951元一年

京东云4核32G轻量服务器优惠价格65元/月、195元3个月、476元6个月、951元一年,配置4C32G-100G SSD系统盘-8M带宽-1500G月流量 华北-北京,京东云优惠活动 yunfuwuqiba.com/go/jd 活动链接打开如下图: 京东云4核32G轻量服务器优惠价格 京东云&a…

Vue基础配置、组件通信

基础配置 Vue框架已经集成了webpack配置 小注意点 vbase 快速生成vue模板 组件名必须是多词格式(驼峰模式) 具体三种写法: ①小驼峰:abcDef.vue ②大驼峰:AbcDef.vue ③中横线:abc-def.vue 假如文件名不符合多次格式的补救办法: 导出重命名…

写作类AI推荐(二)

本章要介绍的写作AI如下: 火山写作 主要功能: AI智能创作:告诉 AI 你想写什么,立即生成你理想中的文章AI智能改写:选中段落句子,可提升表达、修改语气、扩写、总结、缩写等文章内容优化:根据全文…

【Vue】手写Vue工具函数hasChanged源码

function hasChanged(x,y) {}hasChanged函数接受两个参数,判断参数是否发生变化,即两个参数是否完全相同,发生了改变返回true,否则返回flase。 对象类型数据先比较值,相同则比较址,址不同也返回true。 首先…

Stable Diffusion 模型下载:epiCPhotoGasm(真实、照片)

本文收录于《AI绘画从入门到精通》专栏,专栏总目录:点这里,订阅后可阅读专栏内所有文章。 文章目录 模型介绍生成案例案例一案例二案例三案例四案例五案例六案例七案例八 下载地址 模型介绍 该模型对照片是什么有很高的了解,所以…

泰迪智能科技荣获山东省“技能兴鲁”职业技能大赛优秀组织奖

近日,泰迪智能科技荣获了山东省“技能兴鲁”职业技能大赛——第四届山东省“云数”技能竞赛“优秀组织单位”。 据悉,山东省“技能兴鲁”职业技能大赛——第四届山东省“云数”技能竞赛是由山东电子学会、山东省信息产业协会主办的,该竞赛是通…

OpenHarmony OpenCV应用样例开发

背景 OpenCV 介绍 OpenCV(Open Source Computer Vision Library)是一个开源的计算机视觉和机器学习软件库。它由一系列的 C 函数和少量 C 类构成,同时提供 Python、Java 和 MATLAB 等语言的接口,实现了图像处理和计算机视觉方面…

java-pytorch 使用手动下载FashionMNIST数据集进行测试

java-pytorch 使用手动下载FashionMNIST数据集进行测试 先定义训练数据和测试数据的位置查看一下读取到的标签数据格式使用loc和iloc访问下数据,便于下面操作使用read_image函数查看下图片的数据大小开始写数据集使用DataLoader去加载我们自己的数据看下加载后的dat…

FANUC机器人故障诊断—报警代码(一)

一、SRVO-050碰撞检测报警 [原因]检测出碰撞 [对策] 1.确认机器人是否碰撞。 2.确认是否正确进行了负载设定。 3.确认是否有过载、过度的加速度附加指令。 4.在长期停用后启动,或者外部气温较低时发生该报警。启动后,先短时间内低速运转设备&#…

vue3使用UEditorPlus 、后端配置、上传图片等处理

前端安装 vue3安装vue-ueditor-wrap // vue-ueditor-wrap v3 仅支持 Vue 3 npm i vue-ueditor-wrap3.x -S // or yarn add vue-ueditor-wrap3.x 下载 UEditorPlus 仓库地址 把dist文件复制到vue3项目中的public下,重命名为UEditorPlus UEditorPlus文档 在main.…