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 > /备份路径/备份文件名.sql

mysqldump -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-logs
 
mysql> use lakers;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A
 
Database 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恢复丢失的数据 位置恢复 时间恢复
 

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

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

相关文章

TinyKv流程梳理三

split流程 处理协程启动 func (bs *Raftstore) startWorkers(peers []*peer) {ctx : bs.ctxworkers : bs.workersrouter : bs.routerbs.wg.Add(2) // raftWorker, storeWorkerrw : newRaftWorker(ctx, router)go rw.run(bs.closeCh, bs.wg)sw : newStoreWorker(ctx, bs.store…

GIT常用命令汇总

文章目录 新建仓库git clone克隆一个仓库指定版本到指定文件夹克隆带子模块的仓库 子模块添加子模块删除子模块切换子模块分支更新子模块 GIT IGNORE忽略文件添加忽略某个文件夹下所有文件刷新.gitignore使其生效 参考链接&#xff1a; 新建仓库 git clone 语法如下&#xff…

Centos 7 安装 Oracle 11G

Oracle 11G 安装教程 准备环境 p13390677_112040_Linux-x86-64_1of7.zipp13390677_112040_Linux-x86-64_2of7.zipCentos 7- rhel7-英文版的系统–不想换语言的执行(LANGen_US)– 传输 文件到服务器上 创建用户和组 [rootlocalhost ~]# groupadd oracle [rootlocalhost ~]…

ASUS华硕飞行堡垒8笔记本FX506LH LI LU FX706原装出厂 Win10系统工厂模式20H2

自带所有驱动、出厂主题壁纸LOGO、Office办公软件、MyASUS电脑管家、奥创控制中心等预装程序 所需要工具&#xff1a;16G或以上的U盘 文件格式&#xff1a;HDI,SWP,OFS,EDN,KIT,TLK多个底包 文件大小&#xff1a;10.95GB 注&#xff1a;恢复时会清空电脑上所有盘的数据&…

OpenCV中的RGB与YUV转换

1 基本概念 YUV 颜色空间从模拟电视时代开始就被广泛应用于彩色图像的转换与处理。其基于一个 3x3 的矩阵&#xff0c;通过线性变换将 RGB 像素转换为一个亮度&#xff08;Luma&#xff09;分量 Y 以及两个色度&#xff08;Chroma&#xff09;分量 U 和 V。由于模拟电视存在着多…

曲师大2023大一新生排位赛-B.Sort题解

题目描述 插入排序是一种非常常见且简单的排序算法。王同学是一名大一的新生&#xff0c;今天许师哥刚刚在上课的时候讲了插入排序算法。 假设比较两个元素的时间为 &#xff0c;则插入排序可以以 的时间复杂度完成长度为 n&#xfffd; 的数组的排序。不妨假设这 n 个数字分…

JavaWeb(4)——HTML、CSS、JS 快速入门

一、JavaScript 数组 数组筛选&#xff08;查找&#xff0c;将原来数组中的某些数据去除&#xff09; <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta http-equiv"X-UA-Compatible" content&quo…

【Hydro】一个简单的HBV水文模型产流Python实现

说明 HBV模型包括一系列自由参数&#xff0c;其值可以通过率定得到。同时也包括一些描述流域和气候特征的参数&#xff0c;它们的值在模型率定是假定不变。子流域的划分使得在一个子流域中可能有很多参数值。虽然在大多数应用中&#xff0c;各子流域之间参数值只有很小的变化&a…

webpack插件compression-webpack-plugin

Vue配置compression-webpack-plugin实现Gzip压缩 1、为什么要压缩&#xff1f; 打包的时候开启gzip可以很大程度减少包的大小&#xff0c;页面大小可以变为原来的30%甚至更小&#xff0c;非常适合于上线部署。更小的体积对于用户体验来说就意味着更快的加载速度以及更好的用户…

使用IDEA社区版创建SpringBoot项目

文章目录 1.关于IDEA社区版的版本2.下载Spring Boot Helper3.创建项目4.配置Maven国内源4.1找不到settings.xml的情况4.2找得到settings.xml的情况 4.3删除repository目录下的所有文件和目录5.加载项目6.解决org.springframework.boot:spring-boot-starter-parent:pom:2.7.13.R…

NXP i.MX 6ULL工业开发板硬件说明书( ARM Cortex-A7,主频792MHz)

前 言 本文档主要介绍TLIMX6U-EVM评估板硬件接口资源以及设计注意事项等内容。 创龙科技TLIMX6U-EVM是一款基于NXP i.MX 6ULL的ARM Cortex-A7高性能低功耗处理器设计的评估板&#xff0c;由核心板和评估底板组成。核心板经过专业的PCB Layout和高低温测试验证&#xff0c;稳…

我们如何在 Elasticsearch 8.6、8.7 和 8.8 中加速数据摄入

作者&#xff1a;Adrien Grand, Joe Gallo, Tyler Perkins 正如你们中的一些人已经注意到的&#xff0c;Elasticsearch 8.6、8.7 和 8.8 在各种数据集上带来了良好的索引加速&#xff0c;从简单的关键字到繁重的 KNN 向量&#xff0c;以及摄取管道繁重的摄取工作负载。 摄取涉及…

Java Mybatis拓展03

0目录 1.MyBatis当实体类和数据库字段名不对应 2.多表查询 1.MyBatis当实体类和数据库字段名不对应 方法2 测试 多表查询 加入子标签association 模糊查询 加入Address 对象 三表联查 2.五表联查 测试

使用 appium 进行微信小程序的自动化测试

目录 前言&#xff1a; 微信小程序结构 自动化用例的调整 示例代码 后记 前言&#xff1a; 微信小程序是一种流行的移动应用程序&#xff0c;它在移动设备上提供了丰富的功能和用户体验。为了确保微信小程序的质量和稳定性&#xff0c;自动化测试是必不可少的一环。Appiu…

el-table找出当前单元格与对应的上下列的值

当前单元格与对应的上下列的值如果不相同就设置个红色边框 当前单元格与对应的上下列的值如果不相同就设置个红色边框 当前单元格与对应的上下列的值如果不相同就设置个红色边框 以下是示例代码&#xff0c;对tableData数据的name字段进行处理 如果当前name值与上一条数据的na…

港联证券-尾盘集合竞价拉升意味着什么意思?

在股票市场中&#xff0c;尾盘集合竞价是指每个交易日的最后几分钟&#xff0c;即下午14:57到3:00之间的交易。在这段时间内&#xff0c;所有股票的买卖都将以竞价的方式进行&#xff0c;最终价格以最高买价与最低卖价的平均值确定&#xff0c;成交量也将作为当日的收盘价和成交…

科普一下Elasticsearch中BM25算法的使用

首先还是先了解几个概念&#xff0c;Elasticsearch是一个开源的分布式搜索和分析引擎&#xff0c;它使用一系列算法来计算文档的相关性分数&#xff08;relevance score&#xff09;。这些算法用于确定查询与文档的匹配程度&#xff0c;以便按相关性对搜索结果进行排序。以下是…

Unity URP 2D光照导入与配置

上面随时间变化的火烧云和晚霞&#xff0c;篝火的呼吸光照&#xff0c;都是URP的功劳。 1.什么是URP&#xff1f; URP 全称为 Universal Render Pipeline(通用渲染管线)。 它的特点是在手游和端游均能在保持性能的同时有良好的效果 也就说在多数情况下&#xff0c;在下面的平台…

10亿级用户,如何做 熔断降级架构?微信和hystrix的架构对比

说在前面 在40岁老架构师 尼恩的读者社区(50)中&#xff0c;最近有小伙伴拿到了一线互联网企业如极兔、有赞、希音、百度、网易、滴滴的面试资格&#xff0c;遇到一几个很重要的面试题&#xff1a; (1) 什么是熔断&#xff0c;降级&#xff1f;如何实现&#xff1f; (2) 服务熔…

linux内核调试工具记录

Linux性能测试使用的工具在github网站可见&#xff0c;网址如下&#xff1a; slides: http://www.slideshare.net/brendangregg/linux-performance-analysis-new-tools-and-old-secrets video: https://www.usenix.org/conference/lisa14/conference-program/presentation/greg…