MySQL数据库的备份和恢复

news2024/11/28 6:40:19

备份

完全备份和完全备份

完全备份

完全备份:就是将整个数据库完整的进行备份

增量备份

增量备份:就是在完全备份的基础之上,对后续新增的内容进行备份

备份的需求

1、 在生产环境中数据的安全至关重要,任何数据的丢失都可能产生严重的后果。

2、 数据为什么会丢失,例如:可能是程序操作、运算错误、磁盘故障、不可预测事件(地震、海啸之类)、人为操作等。

备份的方法

冷备份:关机备份。停止MySQL的服务,然后进行备份

热备份:开机备份。无需关闭MySQL的服务,进行备份

物理备份:对数据系统的物理文件(数据文件、日志文件)进行备份

逻辑备份:对组件进行备份(表结构),以sql语句的形式,把库,表结构,表数据进行备份保存。(直接在数据库中删除全部文件,逻辑备份无法恢复

物理备份

物理备份:完全备份,对整个数据库进行完整的打包备份。

优点:操作简单 缺点:数据库文件占用量很大。占用空间太大,备份和恢复的时间都很长,而且需要站厅数据库服务。

如何进行物理备份

systemctl stop mysqld
#关闭MySQL1的服务器。因为关闭服务可以避免新的数据插入或者数据覆盖

cd usr/local/mysql/

cd data

cd kgc

安装软件包

tar Jcvf /opt/mysql_all_$(data +%F).tar.xz /usr/local/mysql/data/
#打包data的内容

ls

tar -Jxvf mysql_all_
#解压文件

cd usr/local/mysql/

rm -rf data
#删库跑路

cd /opt/

cd usr/local/mysql

cp -a data/ /usr/local/mysql
#保留权限复制

systemctl restart mysqld
#重启mysql服务

到另外一台库

cd /usr/local/mysql/

cp -a data/ /opt/
#MySQL2自己先做一个文件备份

scp -r root@20.0.0.60:/opt/usr/local/mysql/data /opt/
#远程复制到MySQL2

cp -a data/ /usr/local/mysql/data
#保留权限复制到MySQL2

systemctl restart mysqld
#重启服务登录一下

chown -R mysel.mysql kgc kgc1
#递归给两个库更改归属
#看到无法阅读,就说明没有给权限的问题

到另外一台主机MySQL2

打包备份最好是把服务关闭,避免有新的数据进入,被覆盖。也可能会导致恢复失败。

基于热备份的逻辑备份

MySQL自带的工具: MySQLdump:用于逻辑恢复库、表结构表数据。

在命令行操作:
mysqldump -u root -p --databases 库名 > /opt/文件名.sql
#备份单个库
mysqldump -u root -p --databases 库1 库2 > /opt/文件名2.sql
#多个备份
mysqldump -u root -p --all-databases > /opt/文件名3.sql
#备份所有库

只是逻辑上的备份

systemctl restart mysqld

netstart -antp | grep 3306

mysqldump -u root -p --databases kgc > /opt/kgc.sql
#把kgc库备份到/opt、目录下

cd /usr/local/mysql/data
rm -rf kgc
#物理删库

mysql -u root -p < /opt/kgc.sql
#会直接报错,库会回来,但是kgc库里面的表结构消失了。只能使用逻辑删除(在命令行删除)

mysql -u root -p123456 -e 'show databases;'
#-e:表示连接指定MySQL之后执行完命令后就自动退出
#进入MySQL执行一次show databases命令后就退出

mysql -u root -p -e 'drop database kgc;'
#需要手动数据密码

mysql -u root -p < /opt/kgc.sql
#手动输入密码

对多个库一次性备份
先备份多个库
mysqldump -u root -p --databases kgc kgc1 > /opt/kgc_all.sql
#手动输入密码。保存多个库

mysql -u root -p -e 'drop database kgc;'
mysql -u root -p -e 'drop database kgc1;'
#手动输入密码。模拟删除库

mysqldump -u root -p < /opt/kgc_all.sql
#手动输入密码。一次性恢复多个库

对全部库一次性备份
mysqldump -r root -p --all-databases > /opt/all_database.sql
#备份全部

备份单个库还原

备份多个库还原

mysql -u root -p123456 -e 'show databases;'
#-e:表示连接指定MySQL之后执行完命令后就自动退出
​​​​​​​#进入MySQL执行一次show databases命令后就退出

如何恢复数据表

只恢复单个表或者多个表:
准备另外一张表插入数据
恢复一张表:
mysqldump -u root -p kgc info1 > opt/kgc_info1.sql

msql -u root -p -e 'drop table kgc.info1;'
#指定库删除表

mysql -u root -p kgc < /opt/kgc_info1.sql
#指定库名恢复
#刷新一下查看一下

恢复多个表:
mysqldump -u root -p kgc info1 info2 > /opt/kgc_info1-2.sql

msql -u root -p -e 'drop table kgc.info1;'

msql -u root -p -e 'drop table kgc.info2;'

mysql -u root -p kgc < /opt/kgc_info1-2.sql
#指定库名恢复
#刷新一下查看一下

MySQL1全部数据库的逻辑备份文件恢复到MySQL2。

scp root@20.0.0.60:/opt/all_database.sql /opt/

mysql -u root -p < all_database.sql
#用sql语句的方式热备份直接转换。
#会覆盖掉MySQL2的全部数据

恢复单个表

恢复多个表:

物理冷备份和热备份 特点:简单 数据量,占用的备份空间大 mysqldump:这是MySQL自带的备份文件命令 特点:方便,简单。但是只能是基于逻辑上的表结构和表数据恢复。物理删除之后再用逻辑恢复会报错。也可也作为数据迁移。会占用大空间。比较物理备份,相对来说,占用的空间小得多。

百G之内使用逻辑备份。百G以上建议使用工具。

增量备份

增量备份: mysqldump:支持增量备份 特点:没有重复数据,备份量小,时间短。 MySQL增量备份恢复表数据期间,表会锁定。可以查但是无法写入。 缺点:备份时锁表,必然会影响业务。超过10G,耗时会比较长。导致服务不可用。

增量备份的过程

1、 MySQL提供的二进制日志来间接的实现增量备份 二进制文件怎么来? 答:修改配置文件

vim /etc/my.conf
#插入内容
log-bin=mysql-bin

binlog_format=MIXED
#表示混合模式
systemctl restart mysqld

MySQL二进制日志记录格式有三种:

1、 STATEMNET:基于sql语句。是记录修改的sql语句,在高并发情况下记录sql语句时的顺序可能会出错。数据恢复可能会导致丢失或者误差。效率比较高,但是不适合高并发场景。

2、 ROW:基于行。会精准记录每一行的数据,准确率高但是回复的时效率低。

3、 MIXED:混合模式。既可以根据语句,也可也根据行。在正常情况下使用STATEMNET,一旦发生高并发,会智能的切换到ROW模式,虽然效率低但是一定不会出错。

表数据设置多一点

select * from info1;
#查看数据是否写入

cd /usr/local/mysql/data/
#会生成了两个文件
mysql -bin.index
mysql-bin.000001
表内写入信息后再查看日志文件 mysql-bin.000001
mysqlbinlog --no-defaults --base64-output=decode-rows -v mysql-bin.000001
#查看新插入表的日志

mysqladmin -u root -p flush-logs
#刷新日志.
#此时data目录下会生成一个新的日志文件mysql-bin.000002

mysqlbinlog --no-defaults --base64-output=decode-rows -v mysql-bin.000002
#刷新之后更新的内容会更新在2里面这就是断点

如何恢复:
mysqlbinlog --no-defaults mysql-bin00000.1 | mysql -u root -p
#增量备份,恢复之前表内插入的数据。这个叫断点恢复。


此时再对表插入信息。此时新插入的数据再000002里面。只要没有刷新日志就不会出现断点。会先插入再删除。
mysqlbinlog --no-defaults --base64-output=decode-rows -v mysql-bin.000002

如果需要备份新的数据之前需要再刷新一次。
mysqladmin -u root -p flush-logs
#刷新日志.

重新在表内插入数据
此时断点之后数据都在新生成的000003里面
mysqlbinlog --no-defaults --base64-output=decode-rows -v mysql-bin.000002

mysqladmin -u root -p flush-logs
#刷新日志断点

再删除表内数据,这时候删除的操作会保存到000004里面

mysqlbinlog --no-defaults --base64-out=decode-rows -v mysql-bin.000003

位置恢复

三种方式:

1、 从某一点开始恢复到最后

2、 从开头一直恢复到某个位置

3、 从指定点开始恢复到指定的结束点

删除表内数据测试
基于位置点进行恢复:
1、 从某一点开始恢复到最后
格式:
mysqlbinlog --no-defaults --start-position='位置点' 文件名 | mysql -u root -p

2、 从开头一直恢复到某个位置
格式:
mysqlbinlog --no-defaults --stop-position='位置点' 文件名 | mysql -u root -p

3、 从指定点开始恢复到指定的结束点
格式:
mysqlbinlog --no-defaults --start-position='位置点' --stop-position='位置点' 文件名 | mysql -u root -p

mysqladmin -u root -p flush-logs
#刷新日志断点

删除表内数据此时数据再000005上

mysqlbinlog --no-defaults --start-position='6171' mysql-bin.000004 | mysql -u root -p

查看位置点
#at后面的数字就是位置点。要选择commit后面的位置点
mysqlbinlog --no-defaults --base64-out=decode-rows -v mysql-bin.000004
#查看000004日志内的位置点

从开头一直恢复到某个位置:
mysqlbinlog --no-defaults --stop-position='6106' mysql-bin.000004 | mysql -u root -p
#从头恢复到指定点

范围恢复:
mysqlbinlog --no-defaults --start-position='6106' --stop-position='6748' mysql-bin.000004 | mysql -u root -p
#指定位置到指定位置恢复

时间恢复

基于时间点进行恢复

1、 从某个时间点开始

2、 从开头到指定结尾时间点

3、 指定时间范围

基于时间点恢复:
YYY-MM-DD 11:11:11 时间格式要按照标准格式来写
1、 从某个时间点开始
格式:mysqlbinlog --no-defaults --start-datettime='时间点' 文件名 | mysql -u root -p

2、 从开头到指定结尾时间点
格式:mysqlbinlog --no-defaults --stop-datettime='时间点' 文件名 | mysql -u root -p

3、 指定时间范围
格式:mysqlbinlog --no-defaults --start-datettime='时间点' --stop-datettime='时间点' 文件名 | mysql -u root -p

从某个时间点开始
mysqlbinlog --no-defaults --start-datetime='2023-11-06 11:44:32' mysql-bin.000004 | mysql -u root -p
#从某个时间点开始

从开头到指定结尾时间点
mysqlbinlog --no-defaults --stop-datetime='2023-11-06 11:44:32' mysql-bin.000004 | mysql -u root -p
#从头开始到某个时间结束

指定时间范围
mysqlbinlog --no-defaults --start-datetime='2023-11-06 11:44:37' --stop-datetime='2023-11-06 11:49:05' mysql-bin.000004 | mysql -u root -p
#从某个时间开始到某个时间结束

日志单独存放的规则

单独存放错误日志
vim /etc/my.conf
log-error=/usr/local/mysql/data/mysql_error.log
#单独存放错误日志

单独存放通用访问日志
general_log=ON
general_log_file=/usr/local/mysql/data/mysql_general.log
#单独存放通用访问日志

开启慢查询日志
slow_query_log=ON
slow_query_log_file=/usr/local/mysql/data/mysql_show_query.log
long_query_time=5
#设置超时时间5秒
#开启慢查询日志.所有超过5秒的都会被记录在内

systemctl restart mysqld

查询通用日志开始情况

show variables like 'general%';
#查询是否开启通用日志访问记录

show variables like 'log_bin%';
#查询二进制日志是否开启

show variables like 'slow%';
#查询是是否开启慢查询访问日志

总结

在生产中,通过binlog进行增量恢复是非常好用的方法。

我们只需要对binlog文件进行备份,随时可以进行备份和恢复。(只能是root用户来进行操作)

除非有特殊需要一般不打额外断点,具体根据需求来,一般是通过脚本按月来设置断点。

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

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

相关文章

APP测试的7大注意点。

1. 运行 1&#xff09; App安装完成后的试运行&#xff0c;可正常打开软件。 2&#xff09; App打开测试&#xff0c;是否有加载状态进度提示。 3&#xff09; App⻚面间的切换是否流畅&#xff0c;逻辑是否正确。 4&#xff09; 注册 同表单编辑⻚面 用户名密码⻓度 …

windows环境下安装Java过程(免登录Oracle官网下载java)

下载路径 oracle官网&#xff1a; java下载路径 Oracle共享账号可下载JDK&#xff1a; 指路 安装流程 执行下载后的jdk的可执行文件一路next下去&#xff0c; 可以自定义安装路径添加环境变量&#xff0c; 两个地方需要添加 在cmd中输入java -version 进行验证&#xff0c;…

【Web】在前端中CSS的语法

CSS规则是由两个主要的部分构成&#xff1a;选择器、以及一条或多条声明。 选择器通常是需要改变的HTML元素。 每条声明由一个属性和一个值组成。 属性&#xff08;Property&#xff09;是需要设置的样式属性&#xff08;Style attribute&#xff09;。每一个属性有一个值。…

vue 实现在线预览Excel-LuckyExcel/LuckySheet实现方案

一、准备工作 1. npm安装 luckyexcel npm i -D luckyexcel 2.引入luckysheet 注意&#xff1a;引入luckysheet&#xff0c;只能通过CDN或者直接引入静态资源的形式&#xff0c;不能npm install。 个人建议直接下载资源引入。我给你们提供一个下载资源的地址&#xff1a; …

vue3实践

选项式API和组合式API 1、使用选项式 API&#xff0c;用包含多个选项的对象来描述组件的逻辑&#xff0c;例如 data、methods 和 mounted。选项所定义的属性都会暴露在函数内部的 this 上&#xff0c;它会指向当前的组件实例。 2、组合式 API&#xff0c;我们可以使用导入的 A…

4、Python基本数据类型:数字、字符串、列表、元组、集合、字典

文章目录 1、Python基本数据类型简介2、数字3、字符串4、列表5、元组6、集合7、字典1、Python基本数据类型简介 Python是一种非常强大且易于学习的编程语言,它具有简洁的语法和丰富的数据类型。了解和掌握Python的基本数据类型是学习和使用Python的基础。本文将详细介绍Pytho…

Qt 继承QAbstractListModel实现自定义ListModel

1.简介 QAbstractListModel类提供了一个抽象模型&#xff0c;可以将其子类化以创建一维列表模型。 QAbstractListModel为将其数据表示为简单的非层次项目序列的模型提供了一个标准接口。它不直接使用&#xff0c;但必须进行子类化。 由于该模型提供了比QAbstractItemModel更…

今天放个大招,带你手把手搭建 Jenkins 的分布式构建

UI 自动化测试代码写完了以后&#xff0c;会放到 Jenkins 这样的持续集成工具上去构建。 如果 Jenkins 平台是搭建在服务器上&#xff0c;会面临 2 个问题&#xff1a; 第一个问题是 UI 自动化测试需要渲染界面&#xff0c;需要消耗大量的 CPU 和内存资源&#xff0c;如果服务…

【3D图像分割】基于Pytorch的VNet 3D 图像分割5(改写数据流篇)

在这篇文章&#xff1a;【3D 图像分割】基于 Pytorch 的 VNet 3D 图像分割2&#xff08;基础数据流篇&#xff09; 的最后&#xff0c;我们提到了&#xff1a; 在采用vent模型进行3d数据的分割训练任务中&#xff0c;输入大小是16*96*96&#xff0c;这个的裁剪是放到Dataset类…

家用好物风云汇,值得买风尚购物清单

双十一又要来啦&#xff01;作为购物狂热者的我们&#xff0c;肯定早已经在各大电商平台上准备好了购物清单。但是&#xff0c;如果你还没有找到心仪的好物&#xff0c;那么不妨来看看值得买在线上线下的选品活动。 最近&#xff0c;我在风尚场发现了很多值得买的家用好物&…

js获取url截取文件名或后缀名

示例图 var url "http://localhost:5613/static/挽风.jpg"var lastOf url.lastIndexOf(/) // /所在的最后位置var str url.substr(lastOf 1) //截取文件名称和后缀 输出&#xff1a;挽风.jpgvar strUrl url.substr(0, lastOf) //截取路径字符串 输出&…

【构建一套Spring Cloud项目的大概步骤】【Springcloud Alibaba微服务分布式架构学习资料】

目录 1、创建一个Maven项目2、搭建Spring Cloud服务3、搭建Spring Cloud Eureka4、搭建Spring Cloud Config5、搭建Spring Cloud Consumer6、搭建Spring Cloud Zuul7、使用Jenkins进行代码自动化部署另附录、Springcloud Alibaba微服务分布式架构 1、创建一个Maven项目 在IDEA…

四.pyqt5 登录界面和功能

一.使用qt creator 设置登录界面 主界面为之前设计的界面 from123.py 文章地址&#xff1a;三.listview或tableviw显示 二.导出ui文件为py文件 # from123.py 为导出 py文件 form.ui 为 qt creator创造的 ui 文件 pyuic5 -o x:\xxx\Fromlogin20230809.py form.ui三.python 显…

排查CPU飙高与系统反应慢的问题

今天我要和大家分享的是如何排查系统中的CPU飙高和系统反应慢的问题。在日常的系统运维中&#xff0c;我们可能会遇到这样的问题&#xff0c;因此&#xff0c;我将尽可能详细地介绍排查的步骤&#xff0c;并通过实际的例子来展示如何进行排查。希望大家能够从这篇文章中获得所需…

分享一下微信小程序里怎么创建会员卡功能

在当今的数字化时代&#xff0c;微信小程序已经成为一种广泛使用的应用模式&#xff0c;涵盖了各种行业。对于企业而言&#xff0c;拥有一个会员卡系统可以更好地管理客户&#xff0c;提高客户忠诚度&#xff0c;并促进消费。本文将探讨如何在微信小程序中创建会员卡功能&#…

计算机毕设 基于大数据的股票量化分析与股价预测系统

文章目录 0 前言1 课题背景2 实现效果3 设计原理QTChartsarma模型预测K-means聚类算法算法实现关键问题说明 4 部分核心代码5 最后 0 前言 &#x1f525; 这两年开始毕业设计和毕业答辩的要求和难度不断提升&#xff0c;传统的毕设题目缺少创新和亮点&#xff0c;往往达不到毕…

YOLOv5算法改进(22)— 更换主干网络MobileNetv3 + 添加CA注意力机制

前言:Hello大家好,我是小哥谈。本节课就让我们结合论文来对YOLOv5进行组合改进(更换主干网络MobileNetv3 + 添加CA注意力机制),希望同学们学完本节课可以有所启迪,并且后期可以自行进行YOLOv5算法的改进!🌈 前期回顾: YOLOv5算法改进(1)— 如何去改进YOLOv5算法

智能安全配电装置在临时展会场所中的应用

【摘要】简述了商场临时展会、展摊等场所中电气装置用电的特性&#xff0c;针对此类场所中隐含的电气安全隐患问题&#xff0c;结合智能安全配电装置的功能&#xff0c;从用电设备的接地、线路的安装与敷设、设备的维护和管理等方面介绍了其安全保障技术&#xff0c;以保证此临…

蓝鹏测控平台软件 智能制造生产线的大脑

测控软件平台&#xff0c;是由包括底层驱动程序、通讯协议等&#xff0c;集数据采集、自动反馈控制、信息分析以及多种工程应用于一体的一种电子信息处理平台。 蓝鹏测控软件平台目前支持各种文本标签 、数字标签&#xff1b;支持趋势图、波动图、缺陷图及统计图表。多端口实现…

马斯克的人工智能初创公司xAI推出首款AI助手Grok;吴恩达生成式AI新课

&#x1f989; AI新闻 &#x1f680; 马斯克的人工智能初创公司xAI推出首款AI助手Grok&#xff0c;并放入特斯拉的Premium Plus套餐中 摘要&#xff1a;本周&#xff0c;埃隆马斯克发布了多篇帖子&#xff0c;宣布其人工智能初创公司xAI将推出首款AI助手Grok&#xff0c;并将…