MySQL数据备份与恢复

news2024/12/26 23:22:33

目录

​编辑

一、数据备份

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 mysglhotcapy 等热备工具 (第三方),在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恢复丢失的数据 位置恢复 时间恢复
 

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

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

相关文章

mmdetection3.1.0 训练自己的数据集

目录 前言安装mmcv安装mmdetection验证安装数据集转为COCO划分训练集、验证集及测试集安装PaddlePaddle安装PaddleX划分数据集 修改对应文件修改coco.py重新安装修改模型文件 训练测试测试带真值的图像测试不带真值的图像批量测试 错误集锦ValueError: need at least one array…

设计模式 ~ 发布订阅者

发表订阅者模式 用于实现对象之间的松耦合通信&#xff1b; 在该模式中&#xff0c;存在一个或多个发布者&#xff08;Publishers&#xff09;和一个或多个订阅者&#xff08;Subscribers&#xff09;&#xff1b; 发布者负责发布消息&#xff0c;而订阅者负责订阅感兴趣的消息…

C++中的“三重”

博文内容&#xff1a;重载、重定义&#xff08;隐藏&#xff09;&#xff0c;重写&#xff08;覆盖&#xff09; 三重区别及联系 概念联系及区别1、作用域2、函数要求 概念 重载 函数名相同,函数的参数列表不同(包括参数个数和参数类型)&#xff0c;至于返回类型可同可不同。 …

如何应对黑产进行验证图片资源遍历

第一期&#xff0c;我们分享的攻防点是&#xff1a;验证图片资源遍历。 “遍历”指黑产通过穷举法获得所有验证码图片的答案&#xff0c;以便能在未来彻底无视验证码。由于验证码主要是通过图片语义答案来识别人机&#xff0c;因此攻破这层防御最有效的方式就是遍历该验证码图…

【电路原理学习笔记】第4章:能量与功率:4.4 能量转换与电阻的电压降

第4章&#xff1a;能量与功率 4.4 能量转换与电阻的电压降 图4-11以电子作为电荷进行举例说明&#xff0c;电子从电池的负极流过电路&#xff0c;然后流回正极。当它们从负极出来时&#xff0c;电子具有最高的能量水平。电子流经过每个电阻&#xff0c;这些电阻连接在一起形成…

微信要怎么定时自动发布朋友圈呢?

大家都知道&#xff0c;朋友圈营销在当今十分重要。对于那些做了私域的人来说&#xff0c;他们知道这可以给自己带来多少的收益。最近&#xff0c;很多客户都纷纷向我咨询朋友圈发圈的问题。客户们认为朋友圈多号操作很费事&#xff0c;拥有多个号容易漏发&#xff1b;若看到同…

【Ceph集群应用】Ceph对象存储系统之RGW接口详解

Ceph对象存储系统之RGW接口详解 1.创建Ceph对象存储系统RGW接口2. 开启httphttps,更改监听端口3. 更改监听端口4.S3接口访问测试5.实验中遇到的故障案例 接上文基于ceph-deploy部署Ceph集群详解 1.创建Ceph对象存储系统RGW接口 &#xff08;1&#xff09;对象存储概念 对象存…

【C语言】杨氏矩阵中寻找元素

题目名称&#xff1a; 杨氏矩阵 题目内容&#xff1a; 有一个数字矩阵&#xff0c;矩阵的每行从左到右是递增的&#xff0c;矩阵从下到上递增的&#xff08;杨氏矩阵的定义&#xff09;&#xff0c;请编写程序在这样的矩阵中查找某个数字是否存在。 形如这样的矩阵就是杨氏…

基于51单片机和proteus的八路抢答器系统

此系统是基于51单片机和proteus的仿真设计&#xff0c;功能如下&#xff1a; 1. 分别采集八路抢答器按键输入信号和系统按键信号。 2. 检测到按键输入后蜂鸣器发出提示音。 3. 数码管显示八路中首次按下的按键。 4. 重置按键可重置系统&#xff0c;重新抢答。 功能框图如下…

【文生图系列】stable diffusion webui 汉化(双语)教程

文章目录 安装双语插件下载json源文件设置双语 这篇博文记录于我成功安装双语插件之后&#xff0c;所以以下的示例页面均是双语。汉化教程分为三步&#xff0c;安装插件&#xff0c;JSON源文件下载和最后一步的双语设置。 安装双语插件 在扩展&#xff08;extensions&#xf…

HCIA作业(一)

题目 实现Client1能够通过域名www.baidu.com来获取Serverlet1&#xff08;Http服务器&#xff09;所放置的文件 配置信息 Servlet1配置&#xff1a; PC1配置&#xff1a; PC2配置&#xff1a; Client1配置&#xff1a; Servlet2配置&#xff1a; AR1配置&#xff1a; 结果

ceph集群(二)

ceph 一、资源池 Pool 管理二、创建 CephFS 文件系统 MDS 接口三、创建 Ceph 块存储系统 RBD 接口四、创建 Ceph 对象存储系统 RGW 接口五、OSD 故障模拟与恢复 一、资源池 Pool 管理 上次我们已经完成了 Ceph 集群的部署&#xff0c;但是我们如何向 Ceph 中存储数据呢&#x…

problem(1):VMware网络虚拟编辑器添加VMnet0+IDA远程调试

VMware网络虚拟编辑器添加VMnet0 桥接模式&#xff1a;由于VMnet0是跟桥接模式有关系的&#xff0c;是ping通的条件&#xff0c;所以很重要。是IDA远程调试的 关键&#xff08;remote window debugger&#xff09; NAT模式&#xff1a;外部网络&#xff08;桥接模式&#xff…

Pyhon:串口应用及数据解析过程

Pyhon:串口应用及数据解析过程 串口通信是一种常用的通信协议&#xff0c;本文重点记录在Python中使用串口&#xff0c;并且以一款电源保护板的串口数据协议为例&#xff0c;对其进行解析&#xff0c;记录收发过程中对16进制数据进行转换的过程。 1. 调用串口 在Python中进行…

浅谈HTTPS抓包原理,为什么Charles能够抓取HTTPS报文?

Charles作用其实相当于拦截器&#xff0c;当客户端和服务器通信时&#xff0c;Charles其实会先接收到服务器的证书&#xff0c;但是它会自己生成一个证书发送给客户端(不管是Web端或App应用)&#xff0c;也就是说它不仅仅是拦截&#xff0c;甚至还可以修改。 由于Charles更改了…

[数据结构 -- 手撕排序算法第六篇] 递归实现快速排序(集霍尔版本,挖坑法,前后指针法为一篇的实现方法,很能打)

目录 1、常见的排序算法 1.1 交换排序基本思想 2、快速排序的实现方法 2.1 基本思想 3 hoare&#xff08;霍尔&#xff09;版本 3.1 实现思路 3.2 思路图解 3.3 为什么实现思路的步骤2、3不能交换 3.4 hoare版本代码实现 3.5 hoare版本代码测试 4、挖坑法 4.1 实现…

SpringCloud(六)Config配置中心

一、配置中心 官方文档&#xff1a;**https://docs.spring.io/spring-cloud-config/docs/current/reference/html/ 经过前面的学习&#xff0c;我们对于一个分布式应用的技术选型和搭建已经了解得比较多了&#xff0c;但是如果我们的微服务项目需要部署很多个实例&#xff0c…

基于时域特征和频域特征组合的敏感特征集,再利用SVM或KNN传统分类器进行轴承故障诊断(python编程,代码有详细注释)

1.文件夹介绍&#xff08;使用的是CWRU数据集&#xff09; 0HP-3HP四个文件夹装载不同工况下的内圈故障、外圈故障、滚动体故障和正常轴承数据。 这里以打开0HP文件为例进行展示&#xff0c;creat_data.py是处理原始数据的脚本&#xff0c;负责将原始数据切不重叠割成1024的固…

postgresql导入导出数据库的一些问题

新建一个数据库 别忘了添加空间数据的扩展 备份之前的数据库 注意一定要自定义表&#xff0c;去掉 spatial_ref_sys &#xff0c;要不然需要先drop在创建&#xff0c;可能会报错。 一般不会去导函数&#xff0c;如果有个别自己创建的函数可以手动复制一下&#xff0c;全部导的话…

联合接地的概念和优势——通信设备的“保命秘籍”

夏日炎炎&#xff0c;强对流天气多发&#xff0c;雷电灾害也需要引起关注。雷电是大气中的超长距离放电过程。雷电有着强大的电流、炙热的高温、强烈的电磁辐射以及猛烈的冲击波&#xff0c;这让其能够瞬间变身“无敌破坏王”&#xff0c;造成雷电灾害。如若强大的瞬间过电压冲…