MySQL数据备份与恢复

目录

​编辑

一、数据备份

1.1物理备份

1.1.1冷备份

1.1.2热备份

1.1.3温备份

二、逻辑分区

2.1完全分区

2.2差异分区

2.3增量备份

三、数据备份恢复实验

3.1做一个数据

 3.2物理冷备份与恢复

3.3mysqldump 备份与恢复(温备份)

3.4Mysql数据恢复

 3.5模拟数据库text丢失 

3.5.1备份数据库text

 3.5.2模拟数据库text丢失

3.5.3数据库text恢复

四、MySQL 增量备份与恢复

4.1MySQL数据库增量恢复

4.2MySQL 增量备份

4.2.1.开启二进制日志功能

 4.2.2查看生成的二进制文件

4.3MySQL增量恢复

4.3.1一般恢复

4.3.2断点恢复

五、总结


一、数据备份

1.1物理备份

对数据库操作的物理文件进行备份,这种备份适用于出现问题时需要快速恢复的大型数据库。

1.1.1冷备份

关闭数据库后进行备份(tar)。

tar,需要关闭Msgl服务,或者确保服务在进行tar备份时,没有客户端操作。

1.1.2热备份

运行中备份,依赖于数据库的日志文件。

xtrabackup mysqllhotcapy 等热备工具 (第三方),在mysgl正常运行时,进行备份。

1.1.3温备份

数据库锁定表格(不可写入,但可读)的状态备份操作。

mysqldump,这个是mysg自带的备份工具,特性 表备份,每备份一张表时,会先drop删除,然后重新create创建表结构,然后再锁表(仅锁定写的操作,但可读),进行insert语句的备份,备份完成之后,进行解锁 (unlock),然后会备份下一个。

二、逻辑分区

2.1完全分区

对数据库完全备份,全部备份,但是占用时间长,占用大量的空间

2.2差异分区

每一次差异备份,都会备份上一次完全备份后的数据,可能出现备份重复,占用大量空间

2.3增量备份

主要是使用bin-log 二进制日志来完成备份,同时每个增量备份的文件,可以通过mysgladmin -u-pflush-logs来刷新生成新的二进制增备的日志文件,同时可以结合crontab完成自动刷新。

再进行基于二进制文件的增备恢复时,有必要的话,需要先恢复完备的数据,再去 一次恢复增备的数据,知道恢复至我们需要恢复的数据位置。

三、数据备份恢复实验

3.1做一个数据

create database text1;
use text1;
create table if not exists info1 (
id int(4) not null auto_increment,
name varchar(10) not null,
age char(10) not null,
hobby varchar(50),
primary key (id));insert into info1 values(1,'user1',20,'running');
insert into info1 values(2,'user2',30,'singing');
insert into info1 values(3,'user3',28,'car');select * from info1;

 

 3.2物理冷备份与恢复

systemctl stop mysqld
yum -y install xz#压缩备份
tar Jcvf /opt/mysql_all_$(date +%F).tar.xz /usr/local/mysql/data/
mv /usr/local/mysql/data/ /opt/#解压恢复
tar Jxvf /opt/mysql_all_2020-11-22.tar.xz 
cd /usr/local/mysql/data
mv /usr/local/mysql/data/* ./

3.3mysqldump 备份与恢复(温备份)

create table info2 (id int,name char(10),age int,sex char(4));
insert into info2 values(1,'user',11,'性别');
insert into info2 values(2,'user',11,'性别');(1)、完全备份一个或多个完整的库 (包括其中所有的表)
mysqldump -u root -p[密码] --databases 库名1 [库名2] ... > /备份路径/备份文件名.sql    #导出的就是数据库脚本文件#备份一个kgc库
mysqldump -u root -p --databases text > /opt/text.sql       
#备份mysql与 kgc两个库
mysqldump -u root -p --databases mysql text > /opt/mysql-text.sql   (2)、完全备份 MySQL 服务器中所有的库
mysqldump -u root -p[密码] --all-databases > /备份路径/备份文件名.sqlmysqldump -u root -p --all-databases > /opt/all.sql (3)、完全备份指定库中的部分表
mysqldump -u root -p[密码] 库名 [表名1] [表名2] ... > /备份路径/备份文件名.sql
例:
mysqldump -u root -p [-d] kgc info1 info2 > /opt/kgc_info1.sql
#使用“-d”选项,说明只保存数据库的表结构 
#不使用“-d"选项,说明表数据也进行备份
#做为一个表结构模板(4)查看备份文件
grep -v "^--" /opt/kgc_info1.sql | grep -v "^/" | grep -v "^$"

3.4Mysql数据恢复

数据备份
mysqldump -uroot -p --databases text > /opt/text.sql 2.模拟数据库出现问题[root@server1 backup]# mysql -uroot -pabc123 登录数据库
mysql> show databases;  查看数据库信息
mysql> drop database school;  删除数据库school
mysql> show databases; 3.数据恢复
mysql -uroot -pabc123  text < /opt/info1.sql 
4.查看情况
mysql -uroot -pabc123  -e  'show  tables from text;'

 3.5模拟数据库text丢失 

3.5.1备份数据库text

mysqldump -uroot  -pabc123  --databases  text  > /opt/text_all.sql

 3.5.2模拟数据库text丢失

drop database text;

 

3.5.3数据库text恢复

mysql -uroot -p  text  <  /opt/text_all.sql mysql  -uroot  -p  -e 'show  tables from text;'

四、MySQL 增量备份与恢复

4.1MySQL数据库增量恢复

1.一般恢复

将所有备份的二进制日志内容全部恢复

2.基于位置恢复

数据库在某一时间点可能既有错误的操作也有正确的操作 可以基于精准的位置跳过错误的操作 发生错误节点之前的一个节点,上一次正确操作的位置点停止

3.基于时间点恢复

跳过某个发生错误的时间点实现数据恢复 在错误时间点停止,在下一个正确时间点开始

4.2MySQL 增量备份

4.2.1.开启二进制日志功能

 二进制日志(binlog)有3种不同的记录格式: STATEMENT (基于SQL语句)、ROW(基于行)、MIXED(混合模式),默认格式是STATEMENT

vim /etc/my.cnf
[mysqld]
log-bin=mysql-bin
binlog_format = MIXED     
server-id = 1    

 4.2.2查看生成的二进制文件

二进制日志中需要关注的部分

1、at :开始的位置点

2、end_log_pos:结束的位置

3、时间戳: 210712 11:50:30

4、SQL语句

cp /usr/local/mysql/data/mysql-bin.000002 /opt/#①
mysqlbinlog --no-defaults  /opt/mysql-bin.000002
#②mysqlbinlog --no-defaults --base64-output=decode-rows -v /opt/mysql-bin.000002# 可以将解码后的文件导出为txt格式,方便查阅
mysqlbinlog --no-defaults --base64-output=decode-rows -v /opt/mysql-bin.000002 > /opt/mysql-bin.000002

 #--base64-output=decode-rows:使用64位编码机制去解码(decode)并按行读取(rows)
#-v: 显示详细内容
#--no-defaults : 默认字符集(不加会报UTF-8的错误)

4.3MySQL增量恢复

4.3.1一般恢复

#数据 备份
[root@localhost opt]# mysqldump -uroot -pabc123 text info1 > /opt/text_info1__2023-07-18.sql#删除数据
mysql> drop table info1;
Query OK, 0 rows affected (0.00 sec)#数据恢复
[root@localhost opt]# mysql -uroot -pabc123  text < text_info1_2023-07-18.sql 
mysql: [Warning] Using a password on the command line interface can be insecure.#查看数据是否恢复
mysql> mysql> show  tables;
+----------------+
| Tables_in_text |
+----------------+
| info1          |
| info2          |
| info3          |
| info_bak       |
| info_bak1      |
+----------------+
5 rows in set (0.00 sec)mysql> select * from info1;
+----+-------+-----+---------+
| id | name  | age | hobby   |
+----+-------+-----+---------+
|  1 | user1 | 20  | running |
|  2 | user2 | 30  | singing |
+----+-------+-----+---------+
2 rows in set (0.00 sec)mysql> drop database ky13;
Query OK, 1 row affected (0.00 sec)mysql> exit② 基于mysql-bin.000002恢复
mysqlbinlog --no-defaults /opt/mysql-bin.000002 | mysql -u root -p

4.3.2断点恢复

mysqlbinlog --no-defaults --base64-output=decode-rows -v /opt/mysql-bin.000002
例:at 302#201122 16:41:16
插入了"user3"的用户数据at 623#201122 16:41:24 
插入了"user4"的用户数据(1)、基于位置恢复
① 插入三条数据
mysql> use lakers;mysql> select * from test1;
+------+------+
| id   | name |
+------+------+
|    1 | one  |
|    2 | two  |
+------+------+
2 rows in set (0.00 sec)mysql> insert into test1 values(3,'true');
Query OK, 1 row affected (0.00 sec)mysql> insert into test1 values(4,'f');
Query OK, 1 row affected (0.00 sec)mysql> insert into test1 values(5,'t');
Query OK, 1 row affected (0.00 sec)mysql> select * from test1;
+------+------+
| id   | name |
+------+------+
|    1 | one  |
|    2 | two  |
|    3 | true |
|    4 | f    |
|    5 | t    |
+------+------+
5 rows in set (0.00 sec)#需求:以上id =4的数据操作失误,需要跳过② 确认位置点,刷新二进制日志并删除test1表
mysqlbinlog --no-defaults --base64-output=decode-rows -v /opt/mysql-bin.000003
960 停止 
1066 开始#刷新日志
mysqladmin -uroot -p123123 flush-logsmysql> use lakers;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -ADatabase changed
mysql> show tables;
+----------------+
| Tables_in_lakers |
+----------------+
| test1          |
+----------------+
1 row in set (0.00 sec)mysql> drop table lakers.test1;
Query OK, 0 rows affected (0.00 sec)③ 基于位置点恢复
#仅恢复到操作 ID 为“623"之前的数据,即不恢复"user4"的数据
mysqlbinlog --no-defaults --stop-position='623' /opt/mysql-bin.000002 | mysql -uroot -p
#仅恢复"user4"的数据,跳过"user3"的数据恢复
mysqlbinlog --no-defaults --start-position='623' /opt/mysql-bin.000002 | mysql -uroot -p
mysqlbinlog --no-defaults --start-position='400' --stop-position='623' /opt/mysql-bin.000002 | mysql -uroot -p      #恢复从位置为400开始到位置为623为止
(2)、基于时间点恢复
mysqlbinlog [--no-defaults] --start-datetime='年-月-日 小时:分钟:秒' --stop-datetime='年-月-日小时:分钟:秒' 二进制日志 | mysql -u 用户名 -p 密码
#仅恢复到16:41:24 之前的数据,即不恢复"user4"的数据
mysqlbinlog --no-defaults --stop-datetime='2020-11-22 16:41:24' /opt/mysql-bin.000002 | mysql -uroot -p 
#仅恢复"user4"的数据,跳过"user3"的数据恢复
mysqlbinlog --no-defaults --start-datetime='2020-11-22 16:41:24' /opt/mysql-bin.000002 | mysql -uroot -p
如果恢复某条SQL语之前的所有数据,就stop在这个语句的位置节点或者时间点
如果恢复某条SQL语句以及之后的所有数据,就从这个语句的位置节点或者时间点start

五、总结

完全备份

物理冷备份 ―关闭Mysqld 服务,tar命令打包 data目录,恢复就是解压tar包

逻辑备份

mysqldump -u-p--datebases 库1 库2 > xxx.sql

mysqldump -u -p --all-datebases > Xxx.sql

mysqldump -u -p 库1 表1 表2 >XXx.sql

完全恢复

mysql -u -p <xxx.sql 恢复库

mysql-u -p 库名 < XXx.sql 恢复表

增量备份

1、开启二进制日志,设置二进制日志格式MIXED

2、进行一次完全备份,可每周备份一次,通过crontab -e

3、使用mysqladm -uroot -p flush-logs刷新分割出二进制日志,由于刷新之前的数据操作都记录在老的二进制日志里,所以需要把老的二进制日志复制到一个安全的目录中保管

4、可以通过mysqlbinlog --no-defaults --base64-output=decode-rows -v二进制日志文件名查看日志内容

5、可以通过mysqlbinlog --no-defaults二进制日志文件名l mysql -uroot -p恢复丢失的数据 位置恢复 时间恢复
 

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

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

相关文章

采集极验4滑块验证码图片数据

在网络安全领域&#xff0c;验证码是一种常见的用于验证用户身份或防止恶意机器人攻击的技术。而极验4滑块验证码作为一种广泛应用的验证码形式&#xff0c;其具有较高的安全性和防御能力。本文将以获取极验4滑块验证码图片数据为主题&#xff0c;介绍相关技术和方法。 一、极…

redis 相关

redis相关面试题 redis支持哪几种数据形式&#xff1f; String,hash,set,zset,list redis主要消费什么物理资源&#xff1f; 内存&#xff0c;key-value的形式&#xff0c; redis 具有快速和数据持久化的特征&#xff0c;如果不将数据放在内存中&#xff0c;磁盘 I/O 速度为严…

MySQL常用语句

目录 连接MySQL 数据库操作 表的操作 数据操作 进阶查询 源码等资料获取方法 连接MySQL -- 语法&#xff1a;mysql -u用户名 -p密码 注&#xff1a;--空格 起到注释的作用 mysql -uroot -p123456 数据库操作 -- 显示当前时间、用户名、数据库版本&#xff08;可以单独…

MATLAB 之 可视化图形用户界面设计

这里写目录标题 一、可视化图形用户界面设计1. 图形用户界面设计窗口1.1 图形用户界面设计模板1.2 图形用户界面设计窗口 2. 可视化图形用户界面设计工具1.1 对象属性检查器2.2 菜单编辑器2.3 工具栏编辑器2.4 对齐对象工具2.5 对象浏览器2.6 Tab 键顺序编辑器 3. 可视化图形用…

hibernate入门,springboot整合hibernate

Mybatis和Hibernate是我们常用的两大ORM框架&#xff0c;这篇文章主要介绍hibernate的使用&#xff0c;如何通过springboot整合hibernate&#xff0c;实现简单的crud功能。 添加依赖 首先&#xff0c;需要创建一个springboot项目&#xff0c;这里就取名为hibernate。项目创建完…

【Visual Studio Code】---自定义键盘快捷键设置

概述 一个好的文章能够帮助开发者完成更便捷、更快速的开发。书山有路勤为径&#xff0c;学海无涯苦作舟。我是秋知叶i、期望每一个阅读了我的文章的开发者都能够有所成长。 一、进入键盘快捷键设置 1、进入键盘快捷键设置方法1 使用快捷键进入键盘快捷键设置先按 Ctrl K再…

怎么做活码二维码?动态码在线生成技巧

现在制作二维码用户大多习惯使用活码二维码&#xff0c;其优势在于能够在二维码不变的情况下修改内容&#xff0c;能够生成二维码长期使用&#xff0c;还可以设置有效期、加密等其他功能可以使用。那么怎么生成活码二维码呢&#xff1f;可以使用二维码生成器&#xff08;免费在…

leetcode 445. Add Two Numbers II(两数相加)

用链表代表2个数字&#xff0c;这2个数字相加的和用链表返回。 最高位在链表的head. 思路&#xff1a; 1.链表逆序 数字相加是从低位到高位的&#xff0c;然而链表中的数字是从高位指向低位。 所以涉及到链表的逆序。 逆序之后只需从head到tail把两个链表的数字相加&#x…

克服 ClickHouse 运维难题:ByteHouse 水平扩容功能上线

前言 对于分析型数据库产品&#xff0c;通过增加服务节点实现集群水平扩容&#xff0c;并提升集群性能和容量&#xff0c;是运维的必要手段。 但是对于熟悉 ClickHouse 的工程师而言&#xff0c;听到“扩容”二字一定会头疼不已。开源 ClickHouse 的 MPP 架构导致扩容成本高&…

C++图形开发(16):绘制一个圆环和一根针

文章目录 绘制一个圆环和一根针1.1 绘制1.2 line()函数1.3 circle()函数1.4 setlinestyle()函数1.5 setlinecolor()函数 接下来&#xff0c;我会继续制作一些小游戏&#xff0c;但因为整个难度的上升&#xff08;毕竟我也是初学者&#xff09;&#xff0c;可能文章不会再像之前…

http连接处理(下)(四)

1.结合代码分析请求报文响应 下面我们将介绍服务器如何响应请求报文&#xff0c;并将该报文发送给浏览器端。首先介绍一些基础API&#xff0c;然后结合流程图和代码对服务器响应请求报文进行详解。 基础API部分&#xff0c;介绍stat、mmap、iovec、writev。 流程图部分&…

【Ubuntu 20.04LTS系统】安装CUDA11.8、cuDNN,可进行CUDA版本切换

Ubuntu 20.04LTS系统安装CUDA11.8、cuDNN&#xff0c;可进行CUDA版本切换 1. 更改为清华源并更新软件列表和依赖项2. 安装CUDA3. 安装cuDNN4. CUDA版本切换 1. 更改为清华源并更新软件列表和依赖项 https://mirrors.tuna.tsinghua.edu.cn/help/ubuntu/ # 默认注释了源码镜像以提…

二维码识别 OCR 原理及如何应用于物流和仓储管理中

摘要 在传统的物流和仓储管理中&#xff0c;人工操作容易出现错误和低效率。然而&#xff0c;随着二维码技术的普及和二维码识别OCR接口的应用&#xff0c;物流和仓储管理实现了更高水平的自动化和智能化。通过扫描和解码二维码&#xff0c;物流和仓储管理系统可以实现货物跟踪…

【JavaEE】JavaEE进阶:框架的学习 - Spring的初步认识

JavaEE进阶首章 文章目录 【JavaEE】JavaEE进阶&#xff1a;框架的学习 - Spring的初步认识1. JavaEE初阶 与 JavaEE进阶 开发上的区别1.1 Servlet VS Spring Boot1.2 Spring Boot的 “hello world”代码演示1.2.1 Spring Boot项目的创建1.2.2 hello world1.2.3 发布 2. 框架的…

分区类型ID一键变身!快速改变分区类型ID的简单方法

分区类型ID是什么&#xff1f; 想要改变分区类型ID&#xff0c;先得明白分区类型ID是什么。大多数电脑用户可能只熟悉分区和分区类型&#xff0c;实际上有5种分区类型&#xff1a;主分区、可扩展固件接口&#xff08;EFI&#xff09;、扩展分区、逻辑分区和Microsoft保留分…

idea 自定义类注释模板和方法模板,无警告

背景&#xff1a;idea&#xff1a;IntelliJ IDEA 2023.1.3 (Ultimate Edition) 效果&#xff1a;&#xff08;主要是没无参&#xff0c;不会换行&#xff09; 类&#xff1a; /** * author sss* date ${DATE} on ${TIME}* desc $NAME*/# 完全复制上面的&#xff0c;删除这一行…

ES6标准下在if中进行函数声明

ES5中规定&#xff0c;函数只能在顶层作用域或函数作用域之中声明&#xff0c;不能在块级作用域声明。 // 情况一 if (true) {function f() {} }// 情况二 try {function f() {} } catch(e) {// ... }上面两种函数声明&#xff0c;根据 ES5 的规定都是非法的。但是&#xff0c…

【C++】将类对象转换成基本数据类型

2023年7月19日&#xff0c;周三晚上&#xff1a; 今天晚上看源码的时候&#xff0c;突然在某个类里面看到了“operator bool() const;”&#xff0c;我完全想不起来这是啥意思了&#xff0c;于是今晚重新学习了一下 目录 类型转换函数的定义类型转换函数的作用 类型转换函数的…

王道计算机网络学习笔记(5)——传输层和应用层

前言 文章中的内容来自B站王道考研计算机网络课程&#xff0c;想要完整学习的可以到B站官方看完整版。 五&#xff1a;传输层 5.1&#xff1a;传输层基本概述 传输层的功能&#xff1a; 1传输层提供进程和进程之间的逻辑通信 2复用和分用 微信和QQ都使用传输层的协议进行发…

Vue3基础知识

文章目录 第一章 vue3 安装1.1安装1.2开启服务器1.3 使用图形化界面1.4 Vite1.5 vue3项目打包1.6 vue3 创建项目1.6.1 vue create命令1.6.2 创建一个项目 第二章 vue3 基础2.1 vue3 的目录结构2.2 vue3 的起步2.2.2 data 选项2,2.3 methods 2.3 Vue3 指令2.4 vue3 模板语法2.4.…