MySQL的备份恢复

news2024/11/24 7:28:10

数据备份的重要性

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

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

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

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

1.物理备份

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

物理备份方法:

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


2)逻辑备份

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

即以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
#递归给两个库更改归属
#看到无法阅读,就说明没有给权限的问题

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

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.sql

cd /usr/local/mysql/data/
ls

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;'

进入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.sql

mysqldump -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.cnf

server-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.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、 从某一点开始恢复到最后
格式:
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.从某个时间点开始:

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 -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
#从某个时间开始到某个时间结束

日志存放

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秒

查询同用日志访问情况

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.coloradmin.cn/o/1178489.html

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

相关文章

使用cpolar配合Plex搭建私人媒体站并实现远程访问

文章目录 1.前言2. Plex网站搭建2.1 Plex下载和安装2.2 Plex网页测试2.3 cpolar的安装和注册 3. 本地网页发布3.1 Cpolar云端设置3.2 Cpolar本地设置 4. 公网访问测试5. 结语 1.前言 用手机或者平板电脑看视频&#xff0c;已经算是生活中稀松平常的场景了&#xff0c;特别是各…

Nginx默认会自动忽略请求头Headers里带下划线_的参数

起因&#xff1a;该接口设置了必须要传送app_code和app_secret才能正常访问。实际我在本地环境测试中&#xff0c;发现该接口是正常访问的&#xff0c;但是部署到正式系统之后发现&#xff0c;该接口一直提示app_code和app_secret不能为空。 后续排查&#xff1a;发现正式系统…

德博能源、西门子能源、霍尼韦尔等出席2023中国可持续生物燃料峰会

会议背景 可持续燃料是由可再生和/或替代原料生产的&#xff0c;如植物、蔬菜或工业废料的燃料总称。与传统化石燃料相比&#xff0c;可持续燃料可以帮助减少温室气体和碳排放&#xff0c;这有助于保护自然环境。采用可持续燃料可以为航空、重型公路货运和海运等脱碳更复杂的部…

广联达OA存在信息泄露漏洞复现

文章目录 广联达OA存在信息泄露漏洞复现0x01 前言0x02 漏洞描述0x03 影响版本0x04 漏洞环境0x05 漏洞复现1.访问漏洞环境2.复现 0x06 修复建议 广联达OA存在信息泄露漏洞复现 0x01 前言 免责声明&#xff1a;请勿利用文章内的相关技术从事非法测试&#xff0c;由于传播、利用…

二叉平衡搜索树-AVL树

目录 1. avl树的概念2. 树结点的定义3. 结点的插入3.1 左单旋3.2 右单旋3.3 右左双旋3.4 左右双旋 4. 结点的删除(了解)5. 整体代码 1. avl树的概念 前面学习过二叉搜索树&#xff0c;理想状态下虽可以缩短查找的效率&#xff0c;但如果数据有序或接近有序依次插入后二叉搜索树…

C++基础——类与对象

1 概述 C是面向对象的语言&#xff0c;面向对象语言三大特性&#xff1a;封装、继承、多态。 C将万事万物抽象为对象&#xff0c;对象上有其属性和行为。 2 封装 2.1 封装的意义 封装是面向对象的三大特性之一&#xff0c;封装将属性和行为作为一个整体&#xff0c;对属性和…

顺丰函证通API集成,无代码开发连接CRM和电商平台

1. 顺丰&#xff1a;全球第四大快递公司的无代码开发连接 顺丰是全球第四大快递公司&#xff0c;秉承 “以用户为中心&#xff0c;以需求为导向&#xff0c;以体验为根本” 的产品设计思维。顺丰不仅在国内市场深耕&#xff0c;而且横向拓展多元业务领域&#xff0c;纵深完善产…

Node Sass version 9.0.0 is incompatible with ^4.0.0.

1.错误产生原因&#xff1a; node、 node-sass 和sass-loader的版本对应问题 2.解决方案&#xff1a; 删除之前的 npm uninstall node-sass sass-loader 安装指定的 npm i node-sass4.14.1 sass-loader7.3.1 --save -dev

业绩持续增长,“创新与变革”是云南白药发展的不二法门?

提及云南白药&#xff0c;大多数消费者的第一反应便是云南白药气雾剂、云南白药牙膏等产品。事实上&#xff0c;随着消费需求驱动、行业升级走向愈发明确&#xff0c;云南白药早已启动从传统中药制造企业到现代化大健康企业的转型&#xff0c;并持续产出成果。 近日&#xff0…

Kubernetes技术与架构-存储 4

如上所示&#xff0c;Kubernetes集群支持动态申请存储资源&#xff0c;即集群管理员可以按照实际的需求动态地申请存储资源&#xff0c;集群管理员需要事先定义一个或者多个StorageClass存储类型的资源&#xff0c;Pod中的容器实例直接引用事先定义的StorageClass存储类型的资源…

开关电源泄漏电流测试方法| 万用表测量开关电源漏电流的方法及接线方式分享

漏电流测试是开关电源安规测试项目之一&#xff0c;目的是为了检测漏电流是否超过了额定标准&#xff0c;防止漏电流过大造成设备损毁&#xff0c;甚至引发电击安全事故。漏电流测试方法多样&#xff0c;纳米软件将带你了解如何用万用表测量开关电源的漏电流。 开关电源漏电流测…

Squid

一、Squid 代理服务器 Squid 主要提供缓存加速、应用层过滤控制的功能。 二、代理的工作机制 1&#xff0e;代替客户机向网站请求数据&#xff0c;从而可以隐藏用户的真实IP地址。 2&#xff0e;将获得的网页数据&#xff08;静态 Web 元素&#xff09;保存到缓存中并发送给…

关于 国产系统UOS系统Qt开发Tcp服务器外部连接无法连接上USO系统 的解决方法

若该文为原创文章&#xff0c;转载请注明原文出处 本文章博客地址&#xff1a;https://hpzwl.blog.csdn.net/article/details/134254817 红胖子(红模仿)的博文大全&#xff1a;开发技术集合&#xff08;包含Qt实用技术、树莓派、三维、OpenCV、OpenGL、ffmpeg、OSG、单片机、软…

接口自动化测试分层设计与实践总结01

本文以笔者当前使用的自动化测试项目为例&#xff0c;浅谈分层设计的思路&#xff0c;不涉及到具体的代码细节和某个框架的实现原理&#xff0c;重点关注在分层前后的使用对比&#xff0c;可能会以一些伪代码为例来说明举例。 接口测试三要素&#xff1a; 参数构造 发起请求&…

【Redis】SSM整合Redis注解式缓存的使用

&#x1f389;&#x1f389;欢迎来到我的CSDN主页&#xff01;&#x1f389;&#x1f389; &#x1f3c5;我是Java方文山&#xff0c;一个在CSDN分享笔记的博主。&#x1f4da;&#x1f4da; &#x1f31f;推荐给大家我的专栏《Redis》。&#x1f3af;&#x1f3af; &#x1f4…

2000-2022年上市公司供应链数字化示范名单匹配数据

2000-2022年上市公司供应链数字化示范名单匹配数据 1、时间&#xff1a;2000-2022年 2、来源&#xff1a;商务部 3、指标&#xff1a; 上市公司供应链数字化&#xff08;根据城市名单匹配&#xff09;&#xff1a;股票代码、年份、股票简称、中文全称、省份、城市、区县、上…

接口请求断言

接口请求断言是指在发起请求之后&#xff0c;对返回的响应内容去做判断&#xff0c;用来查看是否响应内容是否与规定的返回值相符。 在发起请求后&#xff0c;我们使用一个变量 r 存储响应的内容&#xff0c;也就是 Response 对象。 Response 对象有很多功能强大的方法可以调…

[动态规划] (九) 路径问题:LeetCode 64.最小路径和

[动态规划] (九) 路径问题&#xff1a;LeetCode 64.最小路径和 文章目录 [动态规划] (九) 路径问题&#xff1a;LeetCode 64.最小路径和题目解析解题思路状态表示状态转移方程初始化和填表顺序返回值 代码实现总结 64. 最小路径和 题目解析 (1) 从左上角到右下角 (2) 只能向右…

Poetry:Python开发者的依赖管理新时代

更多资料获取 &#x1f4da; 个人网站&#xff1a;涛哥聊Python 在Python开发中&#xff0c;管理项目的依赖关系是一个至关重要的任务。传统上&#xff0c;开发者使用requirements.txt文件和pip工具来管理依赖&#xff0c;但这种方式在复杂项目中存在一些问题。Poetry是一个现…

Docker 学习路线 5:在 Docker 中实现数据持久化

Docker 可以运行隔离的容器&#xff0c;包括应用程序和其依赖项&#xff0c;与主机操作系统分离。默认情况下&#xff0c;容器是临时的&#xff0c;这意味着容器中存储的任何数据在终止后都将丢失。为了解决这个问题并在容器生命周期内保留数据&#xff0c;Docker 提供了各种数…