MySQL备份与恢复

2023-11-04

目录

数据库备份的分类

数据备份的重要性

数据库备份的分类

常见的备份方法

MySQL完全备份与恢复

MySQL完全备份介绍

MySQL完全备份的优缺点

数据库完全备份分类

完全备份操作

物理冷备份

逻辑备份(mysqldump的使用)

MySQL增量备份与恢复

MySQL增量备份

特点

增量备份与恢复操作

增量备份

增量恢复

断点恢复


数据库备份的分类

数据备份的重要性

  • 备份的主要目的是灾难恢复
  • 在生产环境中,数据的安全性至关重要
  • 任何数据的丢失都可能产生严重的后果
  • 造成数据丢失的原因
    • 程序错误
    • 人为操作错误
    • 运算错误
    • 磁盘故障
    • 灾难(如火灾、地震)和盗窃

数据库备份的分类

物理与逻辑的角度,备份可分为

  • 物理备份:对数据库操作系统的物理文件(如数据文件、日志文件等)的备份
    • 物理备份方法
      • 冷备份(脱机备份):是在关闭数据库的时候进行的
      • 热备份(联机备份):数据库处于运行状态,依赖于数据库的日志文件
      • 温备份:数据库锁定表格(不可写入但可读)的状态下进行备份操作
  • 逻辑备份:对数据库逻辑组件(如:表等数据库对象)的备份

数据库的备份策略角度,备份可分为

  • 完全备份:每次对数据库进行完整的备份

  • 差异备份:备份自从上次完全备份之后被修改过的文件

  • 增量备份:只有在上次完全备份或者增量备份后被修改的文件才会被备份

 

常见的备份方法

  • 物理冷备
    • 备份时数据库处于关闭状态,直接打包数据库文件
    • 备份速度快,恢复时也是最简单的
  • 专用备份工具mydump或mysqlhotcopy
    • mysqldump常用的逻辑备份工具
    • mysqlhotcopy仅拥有备份MyISAM和ARCHIVE表
  • 启用二进制日志进行增量备份
    • 进行增量备份,需要刷新二进制日志
  • 第三方工具备份
    • 免费的MySQL热备份软件Percona、XtraBackup

MySQL完全备份与恢复

MySQL完全备份介绍

  • 是对整个数据库、数据库结构和文件结构的备份
  • 保存的是备份完成时刻的数据库
  • 是差异备份与增量备份的基础

MySQL完全备份的优缺点

  • 优点
    • 备份与恢复操作简单方便
  • 缺点
    • 数据存在大量的重复
    • 占用大量的备份空间
    • 备份与恢复时间长

数据库完全备份分类

  • 物理冷备份与恢复
    • 关闭MySQL数据库
    • 使用tar命令直接打包数据库文件夹
    • 直接替换现有MySQL目录即可
  • mysqldump备份与恢复
    • MySQL自带的备份工具,可方便实现对MySQL的备份
    • 可以将指定的库、表导出为SQL脚本
    • 使用命令mysql导入备份的数据

完全备份操作

物理冷备份

备份

过程:关闭数据库 ——> 对数据目录进行打包压缩

  • 关闭mysqld,创建备份目录

  • 使用xz工具进行压缩,检查xz工具是否已安装。如果没安装,可以先yum安装

  • 打包数据库文件。/usr/local/mysql/data 为数据库文件存放目录

 恢复数据库

过程:解压备份文件 ——> 替换数据目录 ——> 启动数据库

  • 将原本的数据库文件改名,模拟数据库被删的情况。此时重启服务也依然无法登入mysql。

  • 解压打包的数据库文件

  • 将解压的文件移动到数据库文件目录下/usr/local/mysql/

  • 重启服务后登录,查看数据库和表是否还存在

逻辑备份(mysqldump的使用)

mysqldump是常用的逻辑备份工具。
mysqldump可以将指定的库、表导出为SQL脚本。

mysqldump完全备份

mysqldump备份数据库

mysqldump命令对单个库进行完全备份

mysqldump -u用户名 -p[密码] [选项] [数据库名] > /备份路径/备份文件名

-p后面不跟密码的话,会有交互的形式输入密码

 

查看备份文件的内容。

 

mysqldump命令对多个库进行完全备份

mysqldump -u用户名 -p[密码] [选项] --databases 库名1 [库名2] ... > /备份路径/备份文件名

 

 

对所有库进行完全备份

mysqldump -u用户名 -p[密码] [选项] --all-databases > /备份路径/备份文件名

 

mysqldump备份数据表

mysqldump可针对库内特定的表进行备份

使用mysqldump备份表的操作

mysqldump -u用户名 -p[密码] [选项] 数据库名 表1 表2 ... > /备份路径/备份文件名

备份单个表

 

备份多个表

-d只保存表结构

-d选项的作用:只保存表结构,不保存表数据

 

查看备份文件,只有创建表的命令,没有插入数据的命令。

 

mysqldump恢复

mysql -u [用户] -p[密码] -e 'SQL语句'
-e选项:用于指定连接MySQL后执行的命令,命令执行完后自动退出

mysqldump恢复库

  • 先删除备份的school数据库

  • mysql -u [用户] -p[密码] 数据库名 < /备份路径/备份文件名,将备份数据库文件再导入mysql

 

 

补充:如果备份时想保存数据库名,则带上--databases,单库备份多库备份都可以
之前的多库备份带上了--databases,这里查看该备份文件。

 

如果备份文件中保留了数据库名,则恢复命令中不用指定数据库,mysql -u [用户] -p[密码] < /备份路径/备份文件名

mysqldump恢复表

  • 先删除数据库中备份过的表

  • mysql -u [用户] -p[密码] 数据库名 < /备份路径/备份文件名,将备份数表文件导入数据库

  • 如果将表导入别的数据库也可以

 

 

MySQL增量备份与恢复

MySQL增量备份

  • 使用mysqldump进行完全备份存在的问题
    • 备份数据中有重复数据
    • 备份时间与恢复时间过长

增量备份是自上一次备份后增加/变化的文件或者内容

特点

  • 没有重复数据,备份量不大,时间短
  • 恢复需要上次完全备份及完全备份之后所有的增量备份才能恢复,而且要对所有增量备份进行逐个反推恢复

增量备份与恢复操作

准备工作

  • 准备一个数据库,并在里面创建一个表

  • 创建一个用于存放备份文件的目录

  • 开启二进制日志功能

vim /etc/my.cnf
[mysqld]
log-bin=mysql-bin    #开启二进制日志。如果使用相对路径,则保存在/usr/local/mysql/data/目录下
binlog_format = MIXED     #可选,指定二进制日志(binlog)的记录格式为MIXED
server-id = 1

systemctl restart mysqld
ls -l /usr/local/mysql/data/mysql-bin.*
复制代码

 

增量备份

  1. 每周先对数据库或者表进行完全备份

  2. 每天进行增量备份操作,生成新的二进制日志文件(例如mysql-bin.000002)
    mysqladmin -u root -p flush-logs

  3. 插入新数据,以模拟数据的增加或变更

  4. 再次刷新生成新的二进制日志文件(例如mysql-bin.000003)

    • 之前的步骤3的数据库操作会保存到mysql-bin.000002文件中,之后数据库数据再发生变化则保存在mysql-bin.00003文件中

查看二进制日志文件的内容

mv /usr/local/mysql/data/mysql-bin.000002 /opt/backup/binlog-$(date +%Y%m%d)
mysqlbinlog --no-defaults --base64-output=decode-rows -v /opt/backup/binlog-20221028

#--base64-output=decode-rows:使用64位编码机制去解码并按行读取
#-v:显示详细内容
复制代码

 

增量恢复

  • 一般恢复
    • 将所有备份的二进制日志内容全部恢复
  • 基于位置恢复
    • 数据库在某一时间点可能既有错误的操作也有正确的操作
    • 可以基于精准的位置跳过错误的操作
  • 基于时间点恢复
    • 跳过某个发生错误的时间点实现数据恢复

一般恢复

模拟表中数据丢失

  1. 删除新增加的内容模拟数据丢失

  2. 增量恢复,新增加的两条数据记录保存在mysql-bin.000002日志中
    mysqlbinlog --no-defaults 二进制日志文件路径 | mysql -u 用户 -p密码

  3. 查看表的内容

 

 

 

模拟整个表丢失

  1. 删除表表模拟表的丢失

  2. 先恢复完全备份的数据

  3. 再恢复增量备份的内容

 

 

断点恢复

准备工作

  • 再插入两条数据,用于断点恢复实验

  • 刷新数据库生成新的二进制

  • 将上个二进制文件移动到备份目录

 

 

 

基于位置恢复

查看备份文件

 

mysqlbinlog --no-defaults --start-position='位置点' 文件名 | mysql -u root -p
#从某一个位置点开始恢复,一直到日志结尾

mysqlbinlog --no-defaults --stop-position='位置点' 文件名 | mysql -u root -p
#从日志开头,一直恢复到某一个位置点前结束

mysqlbinlog --no-defaults --start-position='xxx' --stop-position='位置点' 文件名 | mysql -u root -p
#从某一个位置点开始恢复,一直到某一个位置点前结束
复制代码

 

示例:恢复熊二的信息

 

 

基于时间点恢复

mysqlbinlog --no-defaults --start-datetime='时间点' 文件名 | mysql -u root -p
#从某一个时间点开始恢复,一直到日志结尾

mysqlbinlog --no-defaults --stop-datetime='时间点' 文件名 | mysql -u root -p
#从日志开头,一直恢复到某一个时间点前结束

mysqlbinlog --no-defaults --start-datetime='起始时间点' --stop-datetime='结束时间点' 文件名 | mysql -u root -p
#从某一个时间点开始恢复,一直到某一个位置点前结束
复制代码

注意:日期必须是"yyyy-mm-dd"的格式。

示例:恢复熊二的信息

 

 

 

断点恢复总结

  • 如果恢复某条SQL语句之前的数据,就--stop在这个语句的位置点
  • 如果恢复某条SQL语句之后的数据,就从这个语句的点位开始
    • 位置点--start-position
    • 时间点--start-datetime='YYYY-mm-dd HH:MM:SS'
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

MySQL备份与恢复 的相关文章

  • Play框架运行应用程序问题

    每当我尝试运行使用以下命令创建的新 Web 应用程序时 我都会收到以下错误Play http www playframework org Error occurred during initialization of VM Could no
  • Java - 将节点添加到列表的末尾?

    这是我所拥有的 public class Node Object data Node next Node Object data Node next this data data this next next public Object g
  • 给定两个 SSH2 密钥,我如何检查它们是否属于 Java 中的同一密钥对?

    我正在尝试找到一种方法来验证两个 SSH2 密钥 一个私有密钥和一个公共密钥 是否属于同一密钥对 我用过JSch http www jcraft com jsch 用于加载和解析私钥 更新 可以显示如何从私钥 SSH2 RSA 重新生成公钥
  • 制作一个交互式Windows服务

    我希望我的 Java 应用程序成为交互式 Windows 服务 用户登录时具有 GUI 的 Windows 服务 我搜索了这个 我发现这样做的方法是有两个程序 第一个是服务 第二个是 GUI 程序并使它们进行通信 服务将从 GUI 程序获取
  • Final字段的线程安全

    假设我有一个 JavaBeanUser这是从另一个线程更新的 如下所示 public class A private final User user public A User user this user user public void
  • 磁模拟

    假设我在 n m 像素的 2D 表面上有 p 个节点 我希望这些节点相互吸引 使得它们相距越远吸引力就越强 但是 如果两个节点之间的距离 比如 d A B 小于某个阈值 比如 k 那么它们就会开始排斥 谁能让我开始编写一些关于如何随时间更新
  • 我可以使用 HSQLDB 进行 junit 测试克隆 mySQL 数据库吗

    我正在开发一个 spring webflow 项目 我想我可以使用 HSQLDB 而不是 mysql 进行 junit 测试吗 如何将我的 mysql 数据库克隆到 HSQLDB 如果您使用 spring 3 1 或更高版本 您可以使用 s
  • Spring @RequestMapping 带有可选参数

    我的控制器在请求映射中存在可选参数的问题 请查看下面的控制器 GetMapping produces MediaType APPLICATION JSON VALUE public ResponseEntity
  • 如何在PreferenceActivity中添加工具栏

    我已经使用首选项创建了应用程序设置 但我注意到 我的 PreferenceActivity 中没有工具栏 如何将工具栏添加到我的 PreferenceActivity 中 My code 我的 pref xml
  • AWS 无法从 START_OBJECT 中反序列化 java.lang.String 实例

    我创建了一个 Lambda 函数 我想在 API 网关的帮助下通过 URL 访问它 我已经把一切都设置好了 我还创建了一个application jsonAPI Gateway 中的正文映射模板如下所示 input input params
  • 在 Mac 上正确运行基于 SWT 的跨平台 jar

    我一直致力于一个基于 SWT 的项目 该项目旨在部署为 Java Web Start 从而可以在多个平台上使用 到目前为止 我已经成功解决了由于 SWT 依赖的系统特定库而出现的导出问题 请参阅相关thread https stackove
  • Eclipse Java 远程调试器通过 VPN 速度极慢

    我有时被迫离开办公室工作 这意味着我需要通过 VPN 进入我的实验室 我注意到在这种情况下使用 Eclipse 进行远程调试速度非常慢 速度慢到调试器需要 5 7 分钟才能连接到远程 jvm 连接后 每次单步执行断点 行可能需要 20 30
  • Java执行器服务线程池[关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 如果我使用 Executor 框架在
  • 如何从终端运行处理应用程序

    我目前正在使用加工 http processing org对于一个小项目 但是我不喜欢它附带的文本编辑器 我使用 vim 编写所有代码 我找到了 pde 文件的位置 并且我一直在从 vim 中编辑它们 然后重新打开它们并运行它们 重新加载脚
  • 如何在桌面浏览器上使用 webdriver 移动网络

    我正在使用 selenium webdriver 进行 AUT 被测应用程序 的功能测试自动化 AUT 是响应式网络 我几乎完成了桌面浏览器的不同测试用例 现在 相同的测试用例也适用于移动浏览器 因为可以从移动浏览器访问 AUT 由于它是响
  • 获取 JVM 上所有引导类的列表?

    有一种方法叫做findBootstrapClass对于一个类加载器 如果它是引导的 则返回一个类 有没有办法找到类已经加载了 您可以尝试首先通过例如获取引导类加载器呼叫 ClassLoader bootstrapLoader ClassLo
  • 捕获的图像分辨率太大

    我在做什么 我允许用户捕获图像 将其存储到 SD 卡中并上传到服务器 但捕获图像的分辨率为宽度 4608 像素和高度 2592 像素 现在我想要什么 如何在不影响质量的情况下获得小分辨率图像 例如我可以获取或设置捕获的图像分辨率为原始图像分
  • 如何修复 JNLP 应用程序中的“缺少代码库、权限和应用程序名称清单属性”?

    随着最近的 Java 更新 许多人都遇到了缺少 Java Web Start 应用程序的问题Codebase Permissions and Application name体现属性 尽管有资源可以帮助您完成此任务 但我找不到任何资源综合的
  • 如何修改现有表以添加时区

    我有一个包含 500 多个表的大型应用程序 我必须将应用程序转换为时区感知 当前应用程序使用new java util Date GETDATE 与服务器的时区 即没有任何时区支持 我已将这项任务分为几个步骤 以便于开发 我确定的第一个步骤
  • 节拍匹配算法

    我最近开始尝试创建一个移动应用程序 iOS Android 它将自动击败比赛 http en wikipedia org wiki Beatmatching http en wikipedia org wiki Beatmatching 两

随机推荐

  • 【RPA入门教程】数据抓取功能使用教学(一)

    UiBot 0 7 版新增加了 数据抓取 功能 这项功能可以方便获取网页中的相似元素 将相似元素的数据采集到数组中 比如各种电商网站 淘宝 京东 拼多多等 的商品分类 商品列表信息 商品名 价格等 或者网页中的各种列表 表格的数据 本期教学
  • 怎样入门嵌入式嵌入式未来的发展方向

    概述 很多工程师要往嵌入式方向发展 特别是ARM得到应用后 这个趋势更是有增无减 但你真的知道怎样入门嵌入式么 你知道嵌入式未来的发展方向么 怎样入门嵌入式嵌入式未来的发展方向 在很多学生或者初级工程师都关注嵌入式 尤其在ARM大红大紫以后
  • 用js写一个简单的定时器

  • STM32学习笔记 -系统时钟Systick

    文章目录 一 SysTick系统时钟滴答定时器的相关概念 1 SysTick的两大作用 1 1 可以产生精确延时 节省定时器 1 2 可以提供给操作系统一个单独的心跳 时钟 节拍 主要 2 SysTick的定义 3 SysTick运行机制
  • 重构,改善既有代码的设计--总结篇

    重构 改善既有代码的设计 第一章感悟 一 书中经典句子 1 重构之前 首先检查自己是否有一套可靠的测试机制 这些测试必须有自我检验能力 2 面对长长的函数 需要分解 代码块越小越好管理 二 自己总结的句子 1 修改长长的函数 找到变的参数和
  • Cesium 之加载倾斜摄影3d模型(解决倾斜漂移问题)

    以Cesium3DTileset方式加载服务发布的倾斜摄影静态资源Json文件 参考如下 item url 倾斜摄影的json地址 tileset json let tileset window viewer scene primitive
  • OpenAi[ChatGPT] 使用Python对接OpenAi APi 实现智能QQ机器人-学习详解篇

    文章大部分来自 https lucent blog 原文博客地址 https blog ideaopen cn 最近火热全文的ChatGPT 被很多人玩出了花 我们在Github上可以看到几个常见的逆向SDK包 这一篇我将以学习的方式来写这
  • 项目实用功能-全局loading动画

    1 为设么要使用全局loading 调用的每一个接口都要绑定一个loading真的很烦 2 实现这个需要考虑哪些要素 首先全局的loading需要一个调用任何接口都要执行的地方打开 那就肯定是axios的前置拦截函数了 loading有加载
  • mongodb导入数据库报错:command listCollections requires authentication

    今天迁移mongodb数据 需要将数据导入到一个新的mongodb中去 把环境搭建好之后 执行 mongorestore dir home backdata 想要导入数据 却报错了 错误信息如下 command listCollection
  • 第50步 深度学习图像识别:Data-efficient Image Transformers建模(Pytorch)

    基于WIN10的64位系统演示 一 写在前面 1 Data efficient Image Transformers Data efficient Image Transformers DeiT 是一种用于图像分类的新型模型 由Facebo
  • Minio(储桶bucket)上传和下载文件【Java】(图片转流、base64)

    此处先将图片下载到本地 再进行转换 MinIO是一个对象存储服务 非常轻量 Java Api 依赖
  • Springboot启动扩展点超详细总结,再也不怕面试官问了

    1 背景 Spring的核心思想就是容器 当容器refresh的时候 外部看上去风平浪静 其实内部则是一片惊涛骇浪 汪洋一片 Springboot更是封装了Spring 遵循约定大于配置 加上自动装配的机制 很多时候我们只要引用了一个依赖
  • NoSQL数据库概述

    简介 本文首先解释了NoSQL的出现的原因 介绍了NoSQL数据库所依据的理论和原则 然后分别介绍了四种NoSQL数据库的类型 以及其代表产品 并讨论了这四种类型的NoSQL的特点以及适用场景 需要NoSQL的理由 NoSQL数据库 看起来
  • Qt程序设置不重复打开该程序

    Qt程序设置不重复打开该程序 文章目录 Qt程序设置不重复打开该程序 对于已经打开的Qt桌面程序 我们希望用户再次双击桌面的快捷方式时 程序可以自动激活到其他所有程序的最前面 而不是重新打开一次程序 此时我们采用QSharedMemory方
  • 【图像处理】【去模糊】图像去模糊之初探--Single Image Motion Deblurring

    原文 原文地址 曾经很长一段时间 对图像去模糊都有一种偏见 认为这是一个灌水的领域 没有什么实用价值 要到这样的文章 不管是多高的档次 直接pass 最近在调研最近几年的关于Computational Photography的一些研究热点时
  • 莫言用 GPT 写颁奖辞,那如果他自己写会是什么效果呢?

    在 收获 杂志 65 周年庆典上 莫言在为余华颁奖时表示 余华是自己的好朋友 但给他的颁奖词写了好几天也想不出来 后来找了 ChatGPT 帮忙写 最后 莫言让 ChatGPT 写了一篇莎士比亚风格 1000 多字的颁奖词 输入了关键词 活
  • 数据仓库_缓慢渐变维_拉链表(全揭秘)

    这篇文章我们主要讲解下以下几个点 什么是拉链表 用于什么样的场景 拉链表的示例 如何获取某一天的历史状态 如何在使用维度拉链表并使用代理键的前提下 构建含维度代理键的事实表 1 什么是拉链表 用于什么样的场景 当维度数据发生变化时 将旧数据
  • Hutool:一行代码搞定数据脱敏

    1 什么是数据脱敏 1 1 数据脱敏的定义 数据脱敏百度百科中是这样定义的 数据脱敏 指对某些敏感信息通过脱敏规则进行数据的变形 实现敏感隐私数据的可靠保护 这样就可以在开发 测试和其它非生产环境以及外包环境中安全地使用脱敏后的真实数据集
  • 枭龙智能眼镜 XLOONG X100 Glass拆解

    这里只拆到主板过 首先需要对带Glass的可拆卸配件进行壳体加热 主机外壳有密封胶 吹风机对主机外壳的接缝处进行加热 可以从下侧的点开始用撬棒拆 拆开一个角之后沿着边慢慢打开 如果还是有阻尼感打不开 用吹风机加热再慢慢撬开 但是注意 打开幅
  • MySQL备份与恢复

    目录 数据库备份的分类 数据备份的重要性 数据库备份的分类 常见的备份方法 MySQL完全备份与恢复 MySQL完全备份介绍 MySQL完全备份的优缺点 数据库完全备份分类 完全备份操作 物理冷备份 逻辑备份 mysqldump的使用 My