MySQL的备份恢复

数据备份的重要性

1.生产环境中,数据的安全至关重要

   任何数据的丢失都会导致非常严重的后果。

2.数据为什么会丢失 :程序操作,运算错误,磁盘故障,不可预期的事件(地震,海啸),人为操作

数据库备份的分类和备份策略

1.物理备份

物理备份:对数据库操作系统的物理文件(如数据文件、日志文件等)的备份。

物理备份方法:

冷备份(脱机备份) :是在关闭数据库的时候进行的
热备份(联机备份) :数据库处于运行状态,依赖于数据库的日志文件
温备份:数据库锁定表格(不可写入但可读)的状态下进行备份操作


2)逻辑备份

逻辑备份:对数据库逻辑组件(如:表等数据库对象)的备份。

即以sql语句的形式,把库、表结构、表数据保存下来。

数据库的备份策略 

  • 完全备份(全量备份):每次对数据库进行完整的备份。
  • 差异备份:备份自从上次完全备份之后被修改过的文件。
  • 增量备份:只有在上次完全备份或者增量备份后被修改的文件才会被备份。

如何进行物理备份

systemctl stop mysqld
#关闭MySQL1的服务器。因为关闭服务可以避免新的数据插入或者数据覆盖cd usr/local/mysql/cd datacd kgc安装软件包tar Jcvf /opt/mysql_all_$(data +%F).tar.xz /usr/local/mysql/data/
#打包data的内容lstar -Jxvf mysql_all_
#解压文件cd usr/local/mysql/rm -rf data
#删库cd /opt/cd usr/local/mysqlcp -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/
#远程复制到MySQL2cp -a data/ /usr/local/mysql/data
#保留权限复制到MySQL2systemctl restart mysqld
#重启服务登录一下chown -R mysel.mysql kgc kgc1
#递归给两个库更改归属
#看到无法阅读,就说明没有给权限的问题

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

1.

Xshell与公网IP相连

然后在云服务上进行编译安装

将本地服务器当中需要备份的文件通过(sz   rz)拖入云服务器中

热备份当中的逻辑备份

用到mysql自带的工具 mysqldump

备份命令

备份单个:mysqldump -u root -p123456 --databases test > /opt/zzr.sql备份多个库:mysqldump -u root -p 123456 --databases test test1 > /opt/test1.sql备份所有库:mysqldump -u root -p123456 -all-databases > /opt/test3.sql

mysqldump -u root -p --databases kgc > /opt/kgc.sqlcd /usr/local/mysql/data/
lsrm -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;'

进入mysql之后自动执行命令,结束后自动退出

-e:指定连接mysql之后执行完命令自动退出

恢复命令

mysql -u root -p < /opt/test.sql

如何只恢复数据表

恢复单个表
先备份
mysqldump -u root -p kgc info1 > /opt/kgc_info1.sql
cd /opt
ls
mysql -u root -p -e 'drop table kgc.info1;'
指定库名恢复
mysql -u -root -p kgc < /opt/kgc_info1.sqlmysqldump -u root -p kgc info1 info2 > /opt/kgc_info1-2.sql
//重定向备份mysql -u root -p -e 'drop table kgc.info1;'
mysql -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.110:/opt/all_database.sql /opt/mysql -u root -p < all_database.sql
#用sql语句的方式热备份直接转换。

物理冷备份和物理热备份

:特点 简单

数据量 占用备份空间较大

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

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

也可以作为数据迁移,必然会占用更大空间。比较物理备份,相对来说占的空间要小得多。

增量备份

mysqldump支持增量备份

没有重复数据,备份量小,时间短。

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

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

1.mysql提供的二进制日志间接的实现增量备份

二进制文件怎么来?

vim /etc/my.cnfserver-id=1
log-bin=mysql-bin
binlog_formst=MIXED
wq

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.000002mysqlbinlog --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.000002mysqladmin -u root -p flush-logs
#刷新日志断点再删除表内数据,这时候删除的操作会保存到000004里面mysqlbinlog --no-defaults --base64-out=decode-rows -v mysql-bin.000003

位置恢复

三种方式:

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

从开头,恢复到某一个位置

从指定点开始------指定的结束点

删除表内数据测试
基于位置点进行恢复:
1、 从某一点开始恢复到最后
格式:
mysqlbinlog --no-defaults --start-position='位置点' 文件名 | mysql -u root -p2、 从开头一直恢复到某个位置
格式:
mysqlbinlog --no-defaults --stop-position='位置点' 文件名 | mysql -u root -p3、 从指定点开始恢复到指定的结束点
格式:
mysqlbinlog --no-defaults --start-position='位置点' --stop-position='位置点' 文件名 | mysql -u root -pmysqladmin -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.从某个时间点开始:

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

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

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

3.指定时间范围

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

时间格式:2023-11-06 11:44:32

基于时间点恢复:
YYY-MM-DD 11:11:11 时间格式要按照标准格式来写
1、 从某个时间点开始
格式:mysqlbinlog --no-defaults --start-datettime='时间点' 文件名 | mysql -u root -p2、 从开头到指定结尾时间点
格式:mysqlbinlog --no-defaults --stop-datettime='时间点' 文件名 | mysql -u root -p3、 指定时间范围
格式: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
#从某个时间开始到某个时间结束

日志存放

MySQL 的日志默认保存位置为 /usr/local/mysql/datavim /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秒

查询同用日志访问情况

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;				#在数据库中设置开启慢查询的方法

总结

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

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

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

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

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

相关文章

21.6 Python 构建ARP中间人数据包

ARP中间人攻击&#xff08;ARP spoofing&#xff09;是一种利用本地网络的ARP协议漏洞进行欺骗的攻击方式&#xff0c;攻击者会向目标主机发送虚假ARP响应包&#xff0c;使得目标主机的ARP缓存中的IP地址和MAC地址映射关系被篡改&#xff0c;从而使得目标主机将网络流量发送到攻…

优维低代码实践:打包发布

导语 优维低代码技术专栏&#xff0c;是一个全新的、技术为主的专栏&#xff0c;由优维技术委员会成员执笔&#xff0c;基于优维7年低代码技术研发及运维成果&#xff0c;主要介绍低代码相关的技术原理及架构逻辑&#xff0c;目的是给广大运维人提供一个技术交流与学习的平台。…

【C++】开源:rapidjson数据解析库配置与使用

&#x1f60f;★,:.☆(&#xffe3;▽&#xffe3;)/$:.★ &#x1f60f; 这篇文章主要介绍rapidjson数据解析库配置与使用。 无专精则不能成&#xff0c;无涉猎则不能通。——梁启超 欢迎来到我的博客&#xff0c;一起学习&#xff0c;共同进步。 喜欢的朋友可以关注一下&…

【亲测推荐】魔方财务和魔方云系统开源全解密

简介 资源入口点击进入 众所周知&#xff0c;魔方财务现在官方售价299&#xff0c;那么接下来就是带来开心版&#xff0c;详细手写实测安装教程已经放在付费资源中 展示 > 本文由博客一文多发平台 [OpenWrite](https://openwrite.cn?fromarticle_bottom) 发布&#xff01;

MySQL索引事务存储引擎

索引&#xff1a;是一个排序的列表 列表中存储的是索引的值和包含这个值数据所在行的物理地址 索引的作用 利用索引数据库可以快速定位 大大加快查询速度表的数据很大 或查询需要关联多个表 使用索引也可以查询速度加快表与表之间的连接速度使用分组和排序时可以大大减少时间提…

数据结构 - 全貌总结

目录 一. 前言 二. 分类 三. 常见的线性和非线性结构 一. 前言 数据结构是计算机存储、组织数据的方式。一种好的数据结构可以带来更高的运行或者存储效率。数据在内存中是呈线性排列的&#xff0c;但是我们可以使用指针等道具&#xff0c;构造出类似“树形”等复杂结构。 数…

java项目之宠物管理系统(ssm框架)

项目简介 宠物管理系统实现了以下功能&#xff1a; 管理员&#xff1a;首页、个人中心、宠物分类管理、商品分类管理、宠物用品管理、宠物商店管理、宠物领养管理、用户管理、宠物寄存管理、用户领养管理、宠物挂失管理、论坛管理、管理员管理、系统管理、订单管理。前台首页…

使用 Rust 进行程序

首先&#xff0c;我们需要安装必要的库。在终端中运行以下命令来安装 scraper 和 reqwest 库&#xff1a; rust cargo install scraper reqwest 然后&#xff0c;我们可以开始编写程序。以下是一个基本的爬虫程序&#xff0c;用于爬取 上的图片&#xff1a; rust use reqwe…

Pinia 是什么?Redux、Vuex、Pinia 的区别?

结论先行&#xff1a; Pinia 是 Vue 官方团队开发的一个全新状态管理库。与 Redux、Vuex 相同&#xff0c;核心都是解决组件间的通信和数据的共享问题。 Pinia 和 Vuex 类似&#xff0c;但使用起来更加简单和直观。因为 Pinia 基于 Vue3 的 Composition 组合式 API 风格&…

金豺算法优化VMD参数,六种适应度函数任意切换,最小包络熵、样本熵、信息熵、排列熵、排列熵/互信息熵、包络谱峰值因子...

声明&#xff1a;对于作者的原创代码&#xff0c;禁止转售倒卖&#xff0c;违者必究&#xff01; 本期采用金豺优化算法(Golden Jackal optimization, GJO)优化VMD参数。选取六种适应度函数进行优化&#xff0c;以此确定VMD的最佳k和α参数。6种适应度函数分别是&#xff1a;最…

初识JVM

1. JVM内存区域划分 jvm在启动的时候&#xff0c;会申请到一整个很大的内存区域。整个一大块区域&#xff0c;不太好用。为了更方便使用&#xff0c;把整个区域隔成了很多区域&#xff0c;每个区域都有不同的作用。 本地方法栈 此处提到的栈和数据结构中的栈不是一个东西&…

【广州华锐互动】影视制作VR在线学习:身临其境,提高学习效率

随着科技的不断发展&#xff0c;影视后期制作技术也在日新月异。然而&#xff0c;传统的教学方式往往难以满足学员的学习需求&#xff0c;无法充分展现影视后期制作的魅力和潜力。近年来&#xff0c;虚拟现实(VR)技术的崛起为教学领域带来了新的机遇。通过VR教学课件&#xff0…

超详细Linux搭建Hadoop集群

一、给计算机集群起别名——互通 总纲&#xff1a; 1、准备3台客户机&#xff08;关闭防火墙、静态IP、主机名称都设置好&#xff09; 2、安装JDK&#xff08;可点击&#xff09; 3、配置环境变量 4、安装Hadoop 5、配置hadoop的环境变量 6、配置集群 7、群起测试 1.1、环境准备…

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

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

MCU常见通信总线串讲(一)—— UART和USART

&#x1f64c;秋名山码民的主页 &#x1f602;oi退役选手&#xff0c;Java、大数据、单片机、IoT均有所涉猎&#xff0c;热爱技术&#xff0c;技术无罪 &#x1f389;欢迎关注&#x1f50e;点赞&#x1f44d;收藏⭐️留言&#x1f4dd; 获取源码&#xff0c;添加WX 目录 前言一…

使用 curator 连接 zookeeper 集群 Invalid config event received

dubbo整合zookeeper 如图&#xff0c;错误日志 2023-11-04 21:16:18.699 ERROR 7459 [main-EventThread] org.apache.curator.framework.imps.EnsembleTracker Caller0 at org.apache.curator.framework.imps.EnsembleTracker.processConfigData(EnsembleTracker.java…

Lyapunov function 李雅普诺夫函数

文章目录 正文定义对定义中出现的术语的进一步讨论 Basic Lyapunov theorems for autonomous systems 自治系统的基本李雅普诺夫定理Locally asymptotically stable equilibrium 局部渐近稳定平衡Stable equilibrium 稳定平衡Globally asymptotically stable equilibrium 全局渐…

计算机毕业设计java+vue+springboot的论坛信息网站

项目介绍 本论文系统地描绘了整个网上论坛管理系统的设计与实现&#xff0c;主要实现的功能有以下几点&#xff1a;管理员&#xff1b;首页、个人中心、用户管理、公告管理、公告类型管理、热门帖子管理、帖子分类管理、留言板管理、论坛新天地、我的收藏管理、系统管理&#…

用Java(C语言也可以看)实现冒泡排序和折半查找(详细过程图)+逆序数组

目录 一、冒泡排序 1.冒泡排序介绍 2.排序的思路 3.完整代码 二、折半查找 1.折半查找介绍 2.查找的思路 3.完整代码 三、逆序数组 1.逆序思路 2..完整代码 一、冒泡排序 冒泡排序是众多排序的一种&#xff0c;无论在C语言或者Java中都很常见&#xff0c;后续在数据…

JAVA前端开发介绍

以一个网站为例包括网站设计、前端开发、程序开发等。网站设计就是网站的外观&#xff0c;平面的东西。程序开发也好理解就是功能实现。而前端开发&#xff0c;简单来说&#xff0c;就是把平面效果图转换成网页&#xff0c;把静态转换成动态。它的工作包括了:切图、写样式、做鼠…