当前位置: 首页 > news >正文

mysql 数据备份和恢复

操作系统:22.04.1-Ubuntu

在这里插入图片描述

mysql 版本:8.033

在这里插入图片描述

binlog 介绍

binlog 是mysql 二进制日志 binary log的简称,可以简单理解为数据的修改记录。
需要开启binlog,才会产生文件,mysql 8.0 默认开启,开启后可以在 /var/lib/mysql (这是mysql默认数据存储路径,如果用户自己指定则另说) 目录下看到一系列 binlog.xxxxxx 的文件
在这里插入图片描述

binlog刷新

每次mysql重启 都会生成一个新的binlog文件,也可以使用命令来刷新binlog
1、进入mysql,使用flush logs,会看到新生成了新的binlog.000011文件
在这里插入图片描述
2、mysqladmin -uroot -p flush-logs(这里也需要root账号密码)
在这里插入图片描述

备份与恢复

以下是官网的关于备份与恢复的翻译:
完整备份是必要的,但创建它们并不总是很方便。它们会生成大型备份文件,并且需要时间来生成。它们不是最佳的,因为每次连续的完全备份都包括所有数据,即使是自上次完全备份以来没有更改的部分。先进行初始完全备份,然后进行增量备份会更高效。增量备份更小,生成时间更短。代价是,在恢复时,不能仅通过重新加载完整备份来恢复数据。您还必须处理增量备份以恢复增量更改
官网关于备份恢复的链接
简而言之就是2种方式,完整和增量,优缺点也如上所述,下面描述2种方式的使用

完整备份与恢复

完整备份就是将所有数据以表的形式进行保存

备份

命令

mysqldump --all-databases --master-data --single-transaction > back_20220806_112100.sql

备份的同时刷新binlog文件

mysqldump --single-transaction --flush-logs --master-data=2 --all-databases > back_20220806_112100.sql

在这里插入图片描述
mysqldump 指令选项说明

恢复

如何恢复

执行指令

mysql <  back_20220806_112100.sql

如果需要密码则

mysql -uroot -p <  back_20220806_112100.sql

该指令相当于执行了备份文件中的sql语句。

可以先可以查看 备份文件,发现里面基本是以下语句:删除表,创建表,数据的插入,显然是以表为单位来备份的,恢复时也是以表来恢复的
因此可以得出结论:在利用备份文件进行数据恢复时,会恢复备份前的所有表数据,但不包括备份后新增加的表,新增的表有以下2中情况:
1、同一个数据库存在相同的表则被则会被覆盖
2、同一个数据库存在不同的表则忽略,因为备份文件中不含任何对该表的操作
在这里插入图片描述

增量恢复

备份

前面我们已经描述过 binlog是一个数据修改记录的文件,默认一个binlog文件代表一次运行的所有数据修改记录,然后也可以使用命令强制生成一个新的binlog文件作为新的起点来记录数据修改过程,因此增量备份其实是自动的,就是一个个binlog文件
在这里插入图片描述

恢复

恢复的前提是要备份,完整备份和增量备份在上面已经描述清楚,因此数据恢复就是利用备份文件+binlog文件来做任意回滚

举个例子,执行备份指令

mysqldump --single-transaction --flush-logs --master-data=2 --all-databases > back_20220806_153500.sql

生成备份文件以及新的binlog文件,从000005开始的binlog文件都是back_20220806_153500.sql备份文件的增量文件
在这里插入图片描述
在上面的基础上(生成了back_20220806_153500.sql 以及新的binlog.000005),现在做一个简单测试来验证数据恢复,分为几个步骤

  • 步骤1、新增一个数据库incrementTestDatabase,再添加一个表incrementTestTable,包含了id、test字段,以及一条数据(1,“test1”)
  • 步骤2、刷新binlog日志
  • 步骤3、删除incrementTestTable,在创建一个incrementTestTable表包含了id、test字段,以及一条数据(2,“test2”)
  • 步骤4、恢复成1中的数据(1,“test1”)
  • 步骤5、恢复成3中的数据(2,“test2”)
    开始测试
    执行步骤1,2效果
    在这里插入图片描述在这里插入图片描述
    执行步骤3后
    在这里插入图片描述
    现在我们开始执行步骤4
    显然我们知道
    binlog.000005中包含了数据(1,“test1”)的新建
    binlog.000006中包含了表的删除及(2,“test2”)的新建
    因此要恢复到步骤1,只需要back_20220806_153500.sql + binlog.000005
    先恢复备份
mysql -uroot -p <  back_20220806_153500.sql

备份基础上恢复修改记录

mysqlbinlog binlog.000005 | mysql -uroot -p

结果如下,与预料中的一样
在这里插入图片描述

现在我们开始执行步骤5,在步骤4的基础上,恢复binlog.000006

mysqlbinlog binlog.000006 | mysql -uroot -p

结果如下,与预料中的一样
在这里插入图片描述

http://www.lryc.cn/news/126693.html

相关文章:

  • Lucene教程_编程入门自学教程_菜鸟教程-免费教程分享
  • 物联网工程应用实训室建设方案
  • 【AI绘画】3分钟学会ikun幻术图
  • Spring 框架入门介绍及IoC的三种注入方式
  • Centos升级openssl
  • 第4章:决策树
  • 小米平板6Max14即将发布:自研G1 电池管理芯片,支持33W反向快充
  • Elasticsearch复合查询之Boosting Query
  • Clickhouse基于文件复制写入
  • 梅赛德斯-奔驰将成为首家集成ChatGPT的汽车制造商
  • QT-播放原始PCM音频流
  • 【杂谈】聊聊我是如何从Java转入Web3的
  • ArrayList
  • 不重启Docker能添加自签SSL证书镜像仓库吗?
  • Ajax介绍
  • docker 学习--02 常用命令
  • socks5 保障网络安全与爬虫需求的完美融合
  • 构建智能医疗未来:人工智能在线上问诊系统开发中的应用
  • css3-grid:grid 布局 / 基础使用
  • 如何在windows电脑安装多个tomcat服务器和乱码问题
  • flutter:webview_flutter的简单使用
  • Ansys Zemax | 手机镜头设计 - 第 1 部分:光学设计
  • jvm从入门到精通
  • [NLP]LLM 训练时GPU显存耗用量估计
  • Unity引擎使用InteriorCubeMap采样制作假室内效果
  • Gin安装解决国内go 与 热加载
  • 安防监控视频云存储平台EasyCVRH.265转码功能更新:新增分辨率配置
  • Linux 创建用户赋予root权限,并限定登录ip
  • 基于令牌级 BERT 嵌入的趋势生成句子级嵌入
  • 计算机视觉目标检测性能指标