MySQL数据库,表的增量备份与恢复

1. 从物理与逻辑的角度

     数据库备份可以分为物理备份和逻辑备份物理备份是对数据库操作系统的物理文件(如数据 文件,日志文件等)的备份。这种类型的备份适用于在出现问题时需要快速恢复的大型重要数据库。

    物理备份又可以分为冷备份(脱机备份)、热备份(联机备份)和温备份。

冷备份:在数据库关闭状态下进行备份操作。

热备份:在数据库处于运行状态时进行备份操作,该备份方法依赖数据库的日志文件。

温备份:数据库锁定表格(不可写入但可读)的状态下进行备份操作。

     逻辑备份是对数据库逻辑组件(如表等数据库对象)的备份,表示为逻辑数据库结构(CREATE DATABASE,CREATE TABLE语句)和内容(INSERT语句或分隔文本文件)的信息。这种类型的备份 适用于可以编辑数据值或表结构较小的数据量,或者在不同的机器体系结构上重新创建数据。

2. 从数据库的备份策略角度

     从数据库的备份策略角度,数据库的备份可分为完全备份、差异备份和增量备份

     完全备份:每次对数据进行完整的备份,即对整个数据库的备份,数据库结构和文件结构的备 份,保存的是备份完成时刻的数据库,是差异备份与增量备份的基础,完全备份的备份与恢复操作 都非常简单方便,但是数据存在大量的重复,并且会占用大量的磁盘空间,备份的时间也很长。         差异备份:备份那些自从上次完全备份之后被修改过的所有文件,备份的时间节点是从上次完 整备份起,备份数据量会越来越大。恢复数据时,只需恢复上次的完全备份与最近的一次差异备份。

      增量备份:只有那些在上次完全备份或者增量备份后被修改的文件才会被备份,以上次完整备 份或上次的增量备份的时间为时间点,仅备份这之间的数据变化,因而备份的数据量小,占用空间 小,备份速度快。但恢复时,需要从上一次的完整备份开始到最后一次增量备份之间的所有增量依 次恢复,如中间某次的备份数据损坏,将导致数据的丢失。

3.常见的备份方法

MySQL数据库的备份可以采用很多种方式,如直接打包数据库文件(物理冷备份)、专用备份工 具(mysqldump)、二进制日志增量备份、第三方工具备份等。

实验环境

某学校近期在进行期中考试,要求数据库管理员负责一班,二班学生的考试成绩录入,为保证数据的可靠性,数据库管理员在录入学生成绩后均要做数据库备份,并且为了测试备份数据是否可 用,模拟数据丢失故障,进行数据还原。

需求描述

在数据库表中,分三次录入学生考试成绩,具体的考试成绩信息分别参见表4-2~表4-4。

数据库在上一章已经创建好了

创建表一班学生成绩表

mysql> create table yiban (姓名 char(10) not null,班级 char(10) not null, 学号 char(10) not null,语文 char(10) not null,数学 char(50) not null,英语 char(10) not null,理综 char(10) not null);

录入数据

mysql> insert into yiban(姓名,班级,学号,语文,数学,英语,理综)
    -> values('张三','一班','20170822','110','105','92','235'),
    ->       ('李四','一班','20170820','95','115','110','260'),
    ->       ('王五','一班','20170818','95','103','108','270'),
    ->       ('赵六','一班','20170816','100','109','112','265');

创建二班学生成绩表

mysql> create table erban (姓名 char(10) not null,班级 char(10) not null, 学号 char(100) not null,语文 char(10) not null,数学 char(50) not null,英语 char(10) not null,理综  char(10) not null);

录入数据 

mysql> insert into erban(姓名,班级,学号,语文,数学,英语,理综)
    -> values('李宁','二班','20170824','92','98','105','235'),
    ->       ('陈铭','二班','20170826','111','107','96','204');

创建三班学生成绩表

mysql> create table sanban (姓名 char(10) not null,班级 char(10) not null, 学号 char(100) not null,语文 char(10) not null,数学 char(50) not null,英语 char(10) not null,理综  char(10) not null);

录入数据

mysql> insert into sanban(姓名,班级,学号,语文,数学,英语,理综)
    -> values('付杰','三班','20170828','115','118','116','268'),
    ->       ('郭尚','三班','20170830','111','99','80','259');

> 首次录入成绩后,做该表的完全备份,后两次成绩的录入之后,分别做增量备份。

>  模拟数据丢失,并使用增量备份分别基于位置和时间点恢复二班和三班同学的成绩。

1) 先进行一次完全备份 为方便验证二进制日志的增量恢复功能,我们在插入三条用户数据后先对bdqn数据库的 yiban 表进行一次完全备份。然后在Linux 系统命令行下执行“mysqladmin -u root -p flush-logs”命令或在“mysql>”命令提示符下执行“flush logs;”生成新的二进制日志。

要进行MySQL的增量备份,首先要开启二进制日志功能,按图中命令操作

[root@node01 ~]# mkdir /mysql_bak //创建文件夹

[root@node01 ~]# mysqldump -u root -p bdqn yiban >/mysql_bak/bdqn_yiban-$(date +%F).sql //将bdqn数据库中的一班表备份

[root@node01 ~]# ls /mysql_bak/  //查看备份好的

[root@node01 ~]# mysqladmin -u root -p flush-logs //生成新的二进制日志

[root@node01 ~]# ls -l /usr/local/mysql/mysql-bin.*

 

2)继续录入新的数据并进行增量备份继续录入两个用户的数据,并执行‘mysqladmin -u root -p flush-logs”命令刷新二进制日志,进行增量备份,如此,二进制日志文件mysql-bin.000005中仅保留插入两个用户数据的操作。

mysql> use bdqn;

mysql> insert into yiban(姓名,班级,学号,语文,数学,英语,理综)   //将二班和三班的同学录入一班
    -> values('李宁','二班','20170824','92','98','105','235'),
    ->       ('陈铭','二班','20170826','111','107','96','204'),
    ->       ('付杰','三班','20170828','115','118','116','268'),
    ->       ('郭尚','三班','20170830','111','99','80','259');

mysql> select * from yiban;

[root@node01 ~]# mysqladmin -u root -p flush-logs

[root@node01 ~]# ls -l /usr/local/mysql/mysql-bin.*

[root@node01 ~]# cp /usr/local/mysql/mysql-bin.000004 /mysql_bak/

3) 模拟误操作删除yiban表

[root@node01 ~]# mysql -u root -p

mysql> use bdqn; //使用bdqn数据库

mysql> drop table yiban; //模拟删除yiban表

mysql> select * from yiban; 查看一班表是否被删除

yiban表已被删除 

4)恢复操作(基于位置恢复)

再执行恢复操作时,需要先恢复完全备份,然后恢复增量备份。

root@node01 ~]# mysql -u root -p bdqn < /mysql_bak/bdqn_yiban-2023-12-14.sql //恢复完全备份

想要实现基于位置或时间点恢复数据,必须先通过查看二进制日志文件确定恢复的位置或时间 点,使用“mysqlbinlog --no-defaults 二进制日志文件”可以查看二进制日志文件的具体内容。

[root@node01 ~]# mysqlbinlog --no-defaults /mysql_bak/mysql-bin.000004 //查看二进制日志文件的具体内容

通过查看日志文件的具体内容可以发现,在每进行一个操作之前都会有一个独特的编号,如“# at 617”.此编号随着操作数增多而变大,我们称之为操作ID。在操作ID下面紧跟着的是时间标记. 要实现基于位置或时间点恢复数据,需要分别依赖二进制日志文件中的操作ID或者时间标记.例如, 通过二进制日志文件得知,在操作ID为“617”的时候,user_info表中插入了“除一班外同学”的用户数据。 因此执行以下命令可以实现仅恢复到操作ID为“617”之前的数据,即不恢复“除一班外同学”的信息。这 时所恢复的数据是从二进制日志文件的开始位置直到指定位置。

[root@node01 ~]# mysqlbinlog --no-defaults --stop-position='617' /mysql_bak/mysql-bin.000004 | mysql -u root -p

[root@node01 ~]# mysql -u root -p -e 'select * from bdqn.yiban;'

恢复成功 

上述操作命令中,‘--stop-position”指定的是停止的位置,而“--start-position”选项指定开始恢复数据的位置。这时所恢复的数据是从指定位置开始直到二进制日志文件的最后。

基于时间点恢复

基于时间点恢复数据所使用的选项是“--start-datetime”,指定的时间同样也是查询二进制日志 所得。执行以下操作可以实现仅恢复到10:47:42之前的数据

模拟将二班和三班的同学删除后再进行恢复(如整个表都删除了,也需先恢复完全备份,再进行增量恢复)

增量备份基于时间点恢复 

上图红框可看到时间 

[root@node01 ~]# mysqlbinlog --no-defaults --start-datetime='2023-12-14 17:49:17' /mysql_bak/mysql-bin.000004 | mysql -u root -p

[root@node01 ~]# mysql -u root -p -e 'select * from bdqn.yiban;'

恢复成功 

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

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

相关文章

Redis Cluster集群搭建 三主三从

Redis包下载 Linux&#xff1a; http://download.redis.io/releases/ Mac or Windows: https://redis.io/download/ 2.下载后解压进入文件夹&#xff08;本次我的Redis版本是6.2.14版本&#xff09; /redis/redis-6.2.14 开始安装 make instarll修改配置文件复制redis.conf 6…

Ubuntu 常用命令之 chmod 命令用法介绍

chmod是Linux系统下的一个命令&#xff0c;用于改变文件或目录的权限。它的名称是“change mode”的缩写。在Linux中&#xff0c;文件或目录的权限分为读&#xff08;r&#xff09;、写&#xff08;w&#xff09;和执行&#xff08;x&#xff09;三种&#xff0c;分别对应数字4…

Python redis安装使用教程

一、项目环境 Python 3.8.xredis-5.0.14 二、Redis 安装 下载地址&#xff1a;https://github.com/tporadowski/redis/releases 下载 Redis-x64-xxx.zip压缩包到你要安装的文件夹&#xff0c;解压即可 三、使用redis 打开一个 cmd 窗口&#xff0c;使用 cd 命令切换redis…

(5)shell命令以及Linux的权限

写在前面 本章我们将重点讲解 Linux 权限&#xff0c;这是 Linux 基础部分中非常重要的一部分。内容比较干&#xff0c;我会稍稍正经些去讲解。话不多说&#xff0c;我们直接切入正题。 shell 命令及运行原理 严格意义上说的是一个操作系统&#xff0c;我们称之为 —— &…

MDK编译过程和文件类型

MDK是一款IDE软件&#xff0c;具有&#xff0c;编辑&#xff0c;编译&#xff0c;链接&#xff0c;下载&#xff0c;调试等等的功能。 1.编译器介绍&#xff1a; MDK可以编译C/C文件和汇编文件&#xff0c;MDK只是一款IDE软件&#xff0c;那他内部使用的是什么编译器呢&#x…

【已解决】Java zip解压时候 malformed input off : 4, length : 1

需求&#xff1a;通过页面上传ZIP文件后&#xff0c;对zip文件进行解压。 遇到的错误&#xff1a;在进行zip解压的时候错误如下&#xff1a; 先看报错前的&#xff1a; /*** 解压缩ZIP文件* param zipFile ZIP文件* param destDir 目标路径*/ public static void zipDecompre…

HIVE窗口函数

什么是窗口函数 hive中开窗函数通过over关键字声明&#xff1b;窗口函数&#xff0c;准确地说&#xff0c;函数在窗口中的应用&#xff1b;比如sum函数不仅可在group by后聚合&#xff0c;在可在窗口中应用&#xff1b; hive中groupby算子和开窗over&#xff0c;shuffle的逻辑…

时序数据库选型TimescaleDB

最近要做一个数字车间的物联网项目&#xff0c;数据存储成了首先要解决的问题&#xff0c;整个车间一共104台数控机床&#xff0c;1s钟采集1次数据&#xff0c;360024365*1043,279,744,000 &#xff0c;一年要产生32亿条记录&#xff0c;这个数据量用常见的关系型数据库肯定是不…

phpMyAdmin的常见安装位置

nginx的日志显示有人一直在尝试访问phpMyAdmin的setup.php&#xff0c;用了各种位置。 其实我只有一个nginx&#xff0c;别的什么也没有。 47.99.136.156 - - [01:44:37 0800] "GET http://abc.com:80/phpMyAdmin/scripts/setup.php HTTP/1.0" 404 162 "-"…

新建vue3项目

三种方法 一. 第一种方式 1、操作步骤&#xff1a; 创建项目目录 vue create 项目名称选择配置方式 ? Please pick a preset: #选择一个配置 Default &#xff08;[Vue 3] babel, eslint&#xff09;Default &#xff08;[Vue 2] babel, eslint&#xff09;Manually select …

wordpress安装之正式开始安装wordpress

1、拉取wordpress镜像 docker pull wordpress 2、启动容器 启动容器&#xff0c;设置容器名为wordpress2并把80端口映射到宿主机的9988端口 docker run -it --name wordpress2 -p 9988:80 -d wordpress 3、查看容器状态 docker ps 4、安装wordpress博客程序 因为我们前面启…

「斗破年番」小医仙黑皇城遭调戏,五品丹换药材,获取菩提涎消息

Hello,小伙伴们&#xff0c;我是拾荒君。 《斗破苍穹年番》的第75集已经更新了&#xff0c;喜欢这部国漫的小伙伴应该都去观看了吧&#xff0c;拾荒君也是看了看这一集。在这一集中&#xff0c;萧炎成功地帮助吴昊等人摆脱了鹰爪老人的围困&#xff0c;然后便前往了黑皇城。 黑…

【JAVA-Day65】Java内部类深度解析

Java内部类深度解析 《Java内部类深度解析》摘要引言一、理解内部类1. 内部类的基本概念和语法1.1 什么是内部类&#xff1f;1.2 内部类的语法结构1.3 内部类的基本概念 2. 不同类型的内部类详解2.1 成员内部类2.2 静态内部类2.3 局部内部类2.4 匿名内部类 二、内部类与普通类的…

FL Studio2024破解版注册机及使用教程

FL Studio 2024破解版是一款非常实用的软件。该软件用于不同的目的&#xff0c;例如从音频中删除人声、管理音频以及更改不同的音频属性。此外&#xff0c;您还可以查看音频和歌曲的不同效果并管理其音量和大小。您还可以管理音乐和音频的自动化。您可以用它创作一首具有不同音…

深入理解——快速排序

目录 &#x1f4a1;基本思想 &#x1f4a1;基本框架 &#x1f4a1;分割方法 ⭐Hoare版本 ⭐挖坑法 ⭐前后指针法 &#x1f4a1;优化方法 ⭐三数取中法 ⭐小区间内使用插入排序 &#x1f4a1;非递归实现快速排序 &#x1f4a1;性能分析 &#x1f4a1;基本思想 任取待排…

LeedCode刷题---滑动窗口问题(二)

顾得泉&#xff1a;个人主页 个人专栏&#xff1a;《Linux操作系统》 《C/C》 《LeedCode刷题》 键盘敲烂&#xff0c;年薪百万&#xff01; 一、将X减到0的最小操作数 题目链接&#xff1a;将 x 减到 0 的最小操作数 题目描述 给你一个整数数组 nums 和一个整数 x 。每一…

函数和函数表达式

我们先来看三个式子 1️⃣ yf(x) 2️⃣ f(x)2x1 3️⃣ y2x1 先来明确一下概念&#xff0c;这三个式子的&#x1f7f0;两边总共有3种表达形式 y是函数最终输出的值f(x) 是整个函数运算过程2x1是具体的表达式 那么这三个式子分别是什么意思呢&#xff1f; yf(x)是对函数关系的…

一个简单的光线追踪渲染器

前言 本文参照自raytracing in one weekend教程&#xff0c;地址为&#xff1a;https://raytracing.github.io/books/RayTracingInOneWeekend.html 什么是光线追踪&#xff1f; 光线追踪模拟现实中的成像原理&#xff0c;通过模拟一条条直线在场景内反射折射&#xff0c;最终…

Cadence SPB17.4做Logo封装及添加中文丝印

Cadence SPB17.4 -Allegro - 做Logo封装及添加中文丝印 Chapter1 Cadence SPB17.4做Logo封装Chapter2 Allegro添加中文字体的简单有效方法Chapter3 Allegro添加Logo方法方法一方法二 Chapter4选择菜单栏Dimension——Create Detail命令对logo进行缩放设置&#xff0c;如下图所示…

【linux--进程通信之共享内存】

目录 一、共享内存的原理二、共享内存的数据结构三、共享内存使用的函数2.1ftok函数2.2shmget函数2.3shmctr函数2.4shmat函数2.5shmdt函数 四、实现进程通信 一、共享内存的原理 共享内存实际是操作系统在实际物理内存中开辟的一段内存。 共享内存实现进程间通信&#xff0c;是…