mysql数据库的备份和恢复

目录

一、备份和恢复

1、备份:

2、备份的方法:

2.1物理备份:

2.2、逻辑备份

2.3增量备份:


一、备份和恢复

1、备份:

先备份再恢复

备份:完全备份,增量备份

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

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

备份的需求:

  1. 在生产环境中,数据的安全至关重要,任何数据的丢失都可能产生严重的后果。
  2. 数据为什么会丢失?可能是程序操作,运算错误,磁盘故障,不可预期的事件(地震之类),人为操作等。

2、备份的方法:

冷备份:关机备份,停止mysql服务,然后进行备份

热备份:开机备份,无需关闭mysql服务,然后进行备份

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

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

2.1物理备份:

一般采用完全备份,对整个数据库进行完整的打包备份

优点:操作简单

缺点:数据库文件占用量是很大的,占用空间太大,备份和恢复的时间都很长,而且需要暂停数据库服务

创建两个库,两张表

安装打包软件:

yum -y install xz

恢复必须建立在备份的基础上

打包备份:

#压缩备份 tar Jcvf /opt/mysql_all_$(date +%F).tar.xz /usr/local/mysql/data/

将/usr/local/mysql/data/目录备份打包到/opt/

解压:

#解压恢复 tar Jxvf /opt/mysql_all_2023-11-06.tar.xz

删库跑路:支持物理删除

删除/usr/local/mysql/data数据库目录:

恢复还原:

之后将备份解压出来的/opt/usr/local/mysql/data,将最后的data目录复制到真正的mysql目录下。/usr/local/mysql/

cp -a usr/local/mysql/data/ /usr/local/mysql/

systemctl restart mysqld.service

检测恢复情况:

数据库迁移:

这里复制过来的所属权限要改一下:

chown -R mysql.mysql data

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

如何把本地的数据库迁移上云?

开放式问题:除了演示的之外还有什么方法上云

dts工具支持热迁移。

2.2、逻辑备份

热备份当中的逻辑备份:

这时mysql自带的工具:mysqldump

只能在终端执行

1、备份单个库:

mysqldump -u root -p123456 --databases 库名 > /opt/ku1.sql

结尾必须是.sql

2、备份多个库:

mysqldump -u root -p123456 --databases 库名1 库名2 > /opt/ku1ku2.sql

3、备份全部库:

mysqldump -u root -p123456 --all-databases > /opt/allku.sql

恢复还原:

mysql -u root -p < /opt/sql文件名

热备份开着服务备份:

先看服务起没起,端口起没起

rm -rf data,物理删除,不能恢复

只能逻辑方式删除:命令行删除

mysql -u root -p123456 -e 'show databases;'

mysql -e:执行完一次之后自动退出

逻辑删除库:

恢复还原:

备份还原多个库:

备份:

mysqldump -u root -p --databases ku ku1 > /opt/kuku1.sql

删除库:

多个库一起恢复:

恢复指定库和指定表:

要先指定库或表备份

不进库删除:

恢复:

指定库名进行恢复

恢复多个指定表:

先备份:

删除:

恢复:

检测

异地迁移恢复:

先在主机1备份一个全部备份文件

主机2远程复制:

直接恢复:

可以用sql语句的方式直接备份恢复

实验:mysql1的全部数据库的逻辑备份文件,导入到mysql2,那么有重名的库是否会覆盖,不重名的库是否还在。

总结:

物理冷备份和物理热备份

特点:简单

缺点:占用的备份空间比较大

mysqldump:这是mysql自带的备份文件的命令

特点:方便,简单。但是只能基于逻辑上的表结构表数据恢复。物理删除之后再用逻辑恢复会报错

他也可以作为数据迁移。也会占用大空间。

比较物理备份相对来说占的空间要小的多

2.3增量备份:

新增的数据进行备份

增量备份用的也是mysqldump

特点:没有重复数据,备份量小,时间短

mysqldump增量备份恢复表数据期间,表会锁定。

缺点:备份时锁表,必然会影响业务。超过10G大小时,耗时会比较长,导致服务不可用

增量备份的过程:

  1. mysql提供的一种二进制日志实现增量备份。

二进制文件怎么来?

修改配置文件:/etc/my.cnf

log-bin=mysql-bin

binlog_format=MIXED

重启服务

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

  1. STATEMENT:基于sql语句

记录修改的sql语句,在高并发情况下记录sql语句的顺序可能会出错,恢复数据时,可能会导致丢失和误差。效率比较高

  1. ROW:基于行

精准记录每一行的数据,准确率高,但是恢复的时效率低

  1. MIXED:既可以根据sql语句,也可以根据行

在正常情况下使用STATEMENT,一旦发生高并发,会智能自动切换到ROW行

先建表插入几个数据,再修改配置文件,重启服务

二进制文件所在目录:

/usr/local/mysql/data

之后表中新加入内容:

查看二进制内容命令:

mysqlbinlog --no-defaults --base64-output=decode-rows -v mysql-bin.000002

刷新命令:会新增一个二进制文件

mysqladmin -u root -p flush-logs

把增量的部分删除:

断点,每次刷新会生成新的一个二进制文件

恢复:

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

注意的是要恢复的二进制文件是哪个文件

位置恢复和时间恢复

基于位置点来进行恢复

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

mysqlbinlog --no-defaults --start-position='位置点' 文件名 | mysql -u root -p123456

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

mysqlbinlog --no-defaults --stop-position='位置点' 文件名 | mysql -u root -p

3、从指定点开始———指定结束点

mysqlbinlog --no-defaults --start-position='位置点' --stop-position'位置点' 文件名 | mysql -u root -p

打个新的断点,防止写入要操作的断点

查看位置点:

at后面的数字就是位置点

选commit后面的位置点

操作实验:

先mysqladmin -u root -p flush-logs

先刷新出一个二进制备份文件000001

然后创建一个新表test

这样创建的数据1-4都会记录到00001中

然后再mysqladmin -u root -p flush-logs

刷新一个000002二进制备份文件

对表进行操作:新插入5-8

插入5-8的操作就记录在二进制文件000002中

断点会记录所有新增操作,直到下一次新增断点,新操作会记录到新增断点中

再基于位置点恢复的话,是基于二进制备份文件的操作对表进行新增操作,不会像物理和逻辑备份一样,完全清空表的内容。是基于目前表来进行操作。下面的基于时间点操作同理。

基于时间点来进行恢复

  1. 从某个时间点开始

mysqlbinlog --no-defaults --start-datetime='时间点' 文件 | mysql -u root -p

  1. 从开头,到指定的结尾时间点

mysqlbinlog --no-defaults --stop-datetime='时间点' 文件 | mysql -u root -p

  1. 指定时间范围:

mysqlbinlog --no-defaults --start-datetime='时间点' --stop-datetime='时间点' 文件 | mysql -u root -p

查看时间点:

时间格式YYYY-MM-DD HH:MM:SS

基于时间点内的操作:

总结:

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

我们只需要对binlog文件进行备份,随时可以进行备份和恢复

附加题:写一个脚本,每个月的20号对数据库,打一个断点。

断点之后自动进行增量备份

如何打开mysql的默认日志:

打开/etc/my.cnf

错误日志单独记录:

记录通用访问日志:

记录慢查询日志:指定慢查询时间,超过5s才会记录

重启即生效

日志文件在data目录下

MySQL 的日志默认保存位置为 /usr/local/mysql/data

vim /etc/my.cnf

[mysqld]

##错误日志,用来记录当MySQL启动、停止或运行时发生的错误信息,默认已开启

log-error=/usr/local/mysql/data/mysql_error.log #指定日志的保存位置和文件名

##通用查询日志,用来记录MySQL的所有连接和语句,默认是关闭的

general_log=ON

general_log_file=/usr/local/mysql/data/mysql_general.log

##二进制日志(binlog),用来记录所有更新了数据或者已经潜在更新了数据的语句,记录了数据的更改,可用于数据恢复,默认已开启

log-bin=mysql-bin #也可以 log_bin=mysql-bin

##慢查询日志,用来记录所有执行时间超过long_query_time秒的语句,可以找到哪些查询语句执行时间长,

以便于优化,默认是关闭的

slow_query_log=ON

slow_query_log_file=/usr/local/mysql/data/mysql_slow_query.log

long_query_time=5 #设置超过5秒执行的语句被记录,缺省时为10秒

systemctl restart mysqld

mysql -u root -p

show variables like 'general%'; #查看通用查询日志是否开启

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

show variables like '%slow%'; #查看慢查询日功能是否开启

show variables like 'long_query_time'; #查看慢查询时间设置

set global slow_query_log=ON; #在数据库中设置开启慢查询的方法

实验:

数据库迁移上云:

1、整体备份

2、sql文件 如果复制到另外一个库,不是重名命的库,是否会被覆盖,相同的表名会不会覆盖,相同的库名会不会覆盖

3、增量备份,位置节点和时间点,注意一下断点

4、一个工具:xtrabackup(DTS)

5、使用工具,要有完整的流程,从安装 使用 备份 结果 报错记录下来,形成文档。

附加题:

写一个脚本,每个月的20号,对数据库打一个断点。

断点之后进行自动进行增量备份。

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

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

相关文章

JAVA中类和对象的认识

1、面向对象的初步认知 1.1 什么是面向对象 Java是一门纯面向对象的语言(Object Oriented Program&#xff0c;简称OOP)&#xff0c;在面向对象的世界里&#xff0c;一切皆为对象。面 向对象是解决问题的一种思想&#xff0c;主要依靠对象之间的交互完成一件事情。用面向对象的…

Java的JDBC编程

文章目录 一、数据库编程的必备条件二、Java的数据库编程&#xff1a;JDBC三、JDBC的工作原理四、JDBC的使用4.1 JDBC 开发案例4.2 JDBC 使用步骤总结 五、JDBC常用的接口和类5.1 JDBC API5.2 数据库连接 Connection5.3 Statement 对象5.4 ResultSet 对象 七、内容总结 一、数据…

【调度算法】并行机调度问题遗传算法

问题描述 m台相同的机器&#xff0c;n个工件&#xff0c;每个工件有1道工序&#xff0c;可按照任意的工序为每个工件分配一台机器进行加工 工件ABCDEFGHI工件编号012345678加工时间4765835510到达时间324532186交货期101530241413201810 设备数目&#xff1a;3 目标函数 最…

0X03

红包题第二弹 看到源码里面的提示 ?cmdphpinfo(); 看到源码 kk 关键点就是有两个正则表达式 第一个 preg_match("/[A-Za-oq-z0-9$]/",$cmd) 第二个 preg_match("/\~|\!|\|\#|\%|\^|\&|\*|\(|\)|\&#xff08;|\&#xff09;|\-|\_|\{|\}|\[|\]|\|\&q…

Redis 的缓存击穿,穿透,雪崩及其解决方案

1 缓存穿透 什么是缓存穿透&#xff1f; 大量请求的 key 是不合理的&#xff0c;根本不存在于缓存中&#xff0c;也不存在于数据库中 。导致这些请求直接到了数据库上&#xff0c;根本没有经过缓存这一层&#xff0c;对数据库造成了巨大的压力&#xff0c;可能直接就被这么多…

QT 实现解密m3u8文件

文章目录 概要如何解密M3U8文件呢实现思路和代码序列图网络请求解密 结论 概要 视频文件很多已M3U8文件格式来提供&#xff0c;先复习下什么是M3U8文件&#xff01;用QT的 mutimedia框架来播放视频时&#xff0c;有的视频加载慢&#xff0c;有的视频加载快&#xff0c;为啥&am…

深入了解Jedis:Java操作Redis的常见类型数据存储

目录 前言 一、Jedis介绍 1.Jedis在各方面的功能 2.特点 二、Java连接Redis 1.导入pom依赖 2.建立连接 三、Java操作Redis的常见类型数据存储 1.字符串 2.哈希表 3.列表 4.集合 5.有序集合 四、Redis的实际应用场景实例 1.会议信息实体 2.自定义注解 3.创建切面…

mermaid学习第一天/更改主题颜色和边框颜色/《需求解释流程图》

mermaid 在线官网&#xff1a; https://mermaid-js.github.io/ 在线学习文件&#xff1a; https://mermaid.js.org/syntax/quadrantChart.html 1、今天主要是想做需求解释的流程图&#xff0c;又不想自己画&#xff0c;就用了&#xff0c;框框不能直接进行全局配置&#xff0…

Mac电脑录屏软件 Screen Recorder by Omi 中文最新

Screen Recorder by Omi是一款屏幕录制软件&#xff0c;它可以帮助用户轻松地录制屏幕活动&#xff0c;并将其保存为高质量的视频文件。 该软件提供了多种录制选项&#xff0c;包括全屏录制、选择区域录制和单窗口录制等&#xff0c;同时提供了丰富的设置选项&#xff0c;如视…

[动态规划] (十) 路径问题 LeetCode 174.地下城游戏

[动态规划] (十) 路径问题: LeetCode 174.地下城游戏 文章目录 [动态规划] (十) 路径问题: LeetCode 174.地下城游戏题目解析解题思路状态表示状态转移方程初始化和填表顺序返回值 代码实现总结 174. 地下城游戏 题目解析 先明白下题题再来看。 [动态规划] (四) LeetCode 91.…

Apache Doris (五十一): Doris数据缓存

🏡 个人主页:IT贫道_大数据OLAP体系技术栈,Apache Doris,Clickhouse 技术-CSDN博客 🚩 私聊博主:加入大数据技术讨论群聊,获取更多大数据资料。 🔔 博主个人B栈地址:豹哥教你大数据的个人空间-豹哥教你大数据个人主页-哔哩哔哩视频 目录 1.

【教3妹学编程-算法题】2924. 找到冠军 II

3妹&#xff1a;2哥快看&#xff0c;我黑龙江的闺蜜给我发了一个她在打雪仗的视频&#xff0c;好大的雪啊&#xff0c;好欢乐。 2哥&#xff1a;什么&#xff0c;东北不是暴雪吗&#xff0c; 还可以打雪仗。 3妹 :是啊&#xff0c;可是雪停了就可以打雪仗了啊。 2哥&#xff1a…

竞赛选题 深度学习手势识别算法实现 - opencv python

文章目录 1 前言2 项目背景3 任务描述4 环境搭配5 项目实现5.1 准备数据5.2 构建网络5.3 开始训练5.4 模型评估 6 识别效果7 最后 1 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 &#x1f6a9; 深度学习手势识别算法实现 - opencv python 该项目较为新颖…

DVWA - 1

文章目录 Brute Forcelowhigh Command Injectionlowmediumhigh CSRFlowmediumhigh Brute Force low 1.进入到Brute Force页面&#xff0c;随机输入一个用户名及密码&#xff0c;点击登录。使用 BurpSuite查看拦截历史&#xff0c;找到该登录请求&#xff0c;右键send to intr…

互联网医院|湖南互联网医院|解决医疗资源不足问题

随着科技的进步和互联网的普及&#xff0c;互联网医院作为一种新型的医疗模式&#xff0c;逐渐受到人们的关注和认可。本文将详细介绍互联网医院的功能和优势&#xff0c;帮助大家全面了解这种新型的医疗服务。 一、互联网医院的功能 1、在线问诊&#xff1a;互联网医院为患者…

[CISCN2019 华北赛区 Day2 Web1]Hack World1

提示 基于布尔的盲注使用python脚本跑 这里已经提示flag在flag表在flag字段 首先输入1 2都能有回显 每当这个时候第一想到的都应该是基于布尔的盲注是否能使用 尝试fuzz 通过fuzz大概知道后续思路 应为过滤的比较全面所以放弃联合查询 报错查询 预设置 使用基于布尔的盲注…

在CSDN上挣点外快的小tips

作为一个在csdn上也挣了一点辛苦费的博主&#xff0c;个人简单总结了两个方法。 1、道德的方法 如上图&#xff0c;可以把自己曾经做过的一些设计或其它资源类的内容&#xff0c;打包传到CSDN的资源池中&#xff0c;有条件的可以写个文章引流一下&#xff0c;运气好的话会有人下…

axios 全局错误处理和请求取消

这两个功能都是用拦截器实现。 前景提要&#xff1a; ts 简易封装 axios&#xff0c;统一 API 实现在 config 中配置开关拦截器 全局错误处理 在构造函数中&#xff0c;添加一个响应拦截器即可。在构造函数中注册拦截器的好处是&#xff0c;无论怎么实例化封装类&#xff0c…

【数智化人物展】觉非科技CEO李东旻:数据闭环,智能驾驶数智时代发展的新引擎...

李东旻 本文由觉非科技CEO李东旻投递并参与《2023中国企业数智化转型升级先锋人物》榜单/奖项评选。 大数据产业创新服务媒体 ——聚焦数据 改变商业 数智化的主要作用是帮助决策。它的核心是大数据&#xff0c;以大数据为基础&#xff0c;匹配合适的AI技术&#xff0c;促使数…

list、numpy、tensor之间相互转化

参考博客【精选】python 中各类型介绍及相互转换 - list, array, tensor, dict, tuple, DataFrame_dict转tensor-CSDN博客 1 # list -> numpy scores np.array(scores) # list -> numpy 2 # numpy -> tensor scores torch.tensor(scores) # numpy -> tensor…