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

数据备份和恢复

数据备份和恢复

什么情况下会用到数据备份呢

数据丢失的场景

  • 人为误操作造成的某些数据被误操作
  • 软件BUG造成数据部分或者全部丢失
  • 硬件故障造成数据库部分或全部丢失
  • 安全漏洞被入侵数据恶意破坏

非数据丢失场景

  • 基于某个时间点的数据恢复
  • 开发测试环境数据库搭建
  • 相同数据库的新环境搭建
  • 数据库或者数据迁移

既然数据备份如此重要,那么如何进行数据备份呢?

主要有逻辑备份和物理备份两个方向

逻辑备份与对应的恢复

逻辑备份是比较简单的,也是中小型系统中最常用的备份方式,主要有两种方式,一种是将数据生成可以完全重现当前数据库中数据的insert语句;另一种就是将数据通过逻辑备份软件,将数据库表数据以特定分隔符进行分隔记录在文本文件中

生成insert语句备份

使用mysqldump可以来实现生成insert语句的逻辑备份文件

Usage: mysqldump [OPTIONS] database [tables]
OR     mysqldump [OPTIONS] --databases [OPTIONS] DB1 [DB2 DB3...]
OR     mysqldump [OPTIONS] --all-databases [OPTIONS]

mysqldump的参数选项很多


  --add-drop-database 在create database之前先执行drop database
  
  -E, --events        备份事件
 
  -x, --lock-all-tables  锁住所有数据库下的所有表
                      
  -l, --lock-tables   在备份中,锁住所有的表,备份时只能进行读取操作,一般用于Myisam,INNODB一般使用                 --single-transaction
  --master-data[=#]   当value为1时,转储文件中记录change master语句,当value为2时,change master语句被注释,默认为空
  
  -R, --routines      备份函数和存储过程
  
  --single-transaction  只对innodb有效,保证获得备份的一致性,但是并不能隔离DDL语句的操作,ALTER TABLE,              DROP TABLE, RENAME TABLE,TRUNCATE TABLE
                
  -T, --tab=name      产生tab分割的数据文件
  --triggers          备份触发器
  -w, --where=name    导出给定条件的数据
  

不过为了保证数据库中的数据一致,就需要进行一下特殊处理,两种方式都可

第一种方式:保证在同一事务里备份

使用--single-transaction选项,可以保证备份过程在同一个事务中,而且可以不影响数据库的任何正常服务

第二种方式:数据库不在有其他新的操作

这种方式就是将所需要备份的表锁住,只允许读不允许写,可以使用--lock-tables--lock-all-tables来进行锁表操作,执行结束后会自动释放锁定

对于--lock-tables选项并不会一次性将所有需要备份的表都锁定,而是每次仅仅锁定一个数据库的表,所以如果需要备份多个数据库的表,要使用--lock-all-tables来进行锁表,才能确保数据的完全一致性

恢复方式

可以使用source命令来进行数据恢复

source /tmp/backup.sql

也可以使用mysql命令行来进行恢复

mysql <backup.sql
生成特定格式的纯文本备份

这种备份方式比insert命令文件相比,占用的存储空间更小,但是在同一个备份文件中不能存在多个表的备份数据

mysql中提供两种方式来实现这种备份文件

第一种方式

使用select ... into outfile from ...来实现

示例

select * from user into outfile '/tmp/dump.txt' 
fields terminated by ',' -- 表示每列的分隔符
optionally enclosed by '"'  -- 对于字符串的包含符
lines terminated by '\n'

第二种方式

依然使用mysqldump来实现

mysqldump -uroot -T/temp/dump test user --fields-enclosed-by=\" --fields-terminated-by=,
恢复方式

由于该方式是按照每个表来进行备份的,所以恢复起来也需要每张表来进行恢复

有两种方式来进行恢复

第一种方式

使用load data infile命令,只能导入一张表

示例

load data infile '/tmp/user.txt' into table user fields terminated by ',' enclosed by '"'

第二种方式

使用mysql提供的mysqlimport来进行恢复,可以导入多张表,使用--user-threads参数可以并发导入多个文件

示例

mysqlimport --user=name --password=pwd test --fields-enclosed-by=\" fields-terminated-by=, /tmp/user.txt
mysqlimport --user=name --password=pwd test --user-threads=2 --fields-enclosed-by=\" fields-terminated-by=, /tmp/user.txt /tmp/student.txt

物理备份与对应的恢复

物理备份就是对数据库的物理对象所做的备份,数据库的物理对象主要由数据库的物理数据文件、日志文件以及配置文件等组成,由于不同的存储引擎存储的文件也不同,所以对于不同的存储引擎备份的文件也有所不同

MyISAM存储引擎

存储表结构元数据的.frm文件,存储表数据的.MYD文件,存储索引数据的.MYI文件

mysql提供了mysqlhotcopy来备份MyISAM存储引擎的数据

mysqlhotcopy db_name [./table_regex/] [new_db_name | directory]

该命令会先lock住表,然后执行flush tables动作,该正常关闭的表正常关闭,该fsync的数据都fsync,然后通过执行OS级别的复制命令,将需要备份的表或数据库的所有物理文件都复制到指定的备份集位置

Innodb存储引擎

Innodb中存放数据位置的配置有innodb_data-home-dirinnodb_data_file_pathinnodb_log_group_home_dirinnodb_file_per_table

分为热备份和冷备份

  • 冷备份:数据库处于关闭状态

  • 热备份:数据库处于运行状态,热备份不停机进行备份,可以使用xtrabackup工具

https://zhhll.icu/2021/数据库/关系型数据库/MySQL/进阶/27.数据备份和恢复/

本文由 mdnice 多平台发布

相关文章:

数据备份和恢复

数据备份和恢复 什么情况下会用到数据备份呢 数据丢失的场景 人为误操作造成的某些数据被误操作 软件BUG造成数据部分或者全部丢失 硬件故障造成数据库部分或全部丢失 安全漏洞被入侵数据恶意破坏 非数据丢失场景 基于某个时间点的数据恢复 开发测试环境数据库搭建 相同数据库的…...

核心篇 - 集成IS-IS配置实战

文章目录 一. 实验专题1.1. 实验1&#xff1a;配置单区域集成IS-IS1.1.1. 实验目的1.1.2. 实验拓扑1.1.3. 实验步骤&#xff08;1&#xff09;配置IP地址&#xff08;2&#xff09;配置IS-IS 1.1.4. 实验调试&#xff08;1&#xff09;查看邻接表&#xff08;2&#xff09;查看…...

【OpenAI Sora】开启未来:视频生成模型作为终极世界模拟器的突破之旅

这份技术报告主要关注两个方面&#xff1a;&#xff08;1&#xff09;我们的方法将各种类型的视觉数据转化为统一的表示形式&#xff0c;从而实现了大规模生成模型的训练&#xff1b;&#xff08;2&#xff09;对Sora的能力和局限性进行了定性评估。报告中不包含模型和实现细节…...

MVC 、DDD、中台、Java SPI(Service Provider Interface)

文章目录 引言I 单体架构DDD实现版本1.1 核心概念1.2 DDD四层架构规范1.3 案例1.4 请求转发流程II 领域服务调用2.1 菱形对称架构2.2 中台III Java SPI3.1 概念3.2 实现原理3.3 例子:本地SPI找服务see alsojava -cp</...

C++单例模式的实现

单例模式就是在整个程序运行期都只有一个实例。在代码实现方面&#xff0c;我们要限制new出多于一个对象这种情况的发生。而不是仅仅依靠无保障的约定。 目前大多数的编程语言的做法都是私有化构造函数&#xff0c;对外提供一个获取实例的接口。这样做的目的使实例的创建不能在…...

rust函数 stuct struct方法 关联函数

本文结合2个代码实例主要介绍了rust函数定义方法&#xff0c;struct结构体定义、struct方法及关联函数等相关基础知识。 代码1&#xff1a; main.rc #[derive(Debug)]//定义一个结构体 struct Ellipse {max_semi_axis: u32,min_semi_axis: u32, }fn main() {//椭圆&#xff0…...

浅谈基于中台模式的大数据生态体系的理解

这篇文章主要浅谈一下我对大数据生态体系建设的理解。 大数据生态系统为高并发&#xff0c;高吞吐&#xff0c;高峰值&#xff0c;高堆积等大规模数据的采集&#xff0c;处理&#xff0c;计算&#xff0c;存储&#xff0c;服务提供了完善的处理体系&#xff0c;致力于打造核心数…...

MySQL的锁机制

一&#xff1a;概述 锁是计算机协调多个进程或线程并发访问某一资源的机制&#xff08;避免争抢&#xff09;&#xff1b; 在数据库中&#xff0c;除传统的计算资源&#xff08;如CPU&#xff0c;RAM&#xff0c;I/O等&#xff09;的争用以外&#xff0c;数据也是一种供许多用…...

已解决ImportError: cannot import name ‘PILLOW_VERSION‘异常的正确解决方法,亲测有效!!!

已解决ImportError: cannot import name PILLOW_VERSION异常的正确解决方法&#xff0c;亲测有效&#xff01;&#xff01;&#xff01; 文章目录 问题分析 报错原因 解决思路 解决方法 总结 在Python项目开发中&#xff0c;依赖管理是保证项目正常运行的关键环节。然而&…...

力扣:300. 最长递增子序列

动态规划: 1. 先定义dp数组来表示在下标为i时最长递增子序列&#xff0c;先初始化一下每个下标的值为dp【i】1。同时我们要判断在下标i之前的最长的递增子序列为多少&#xff0c;在判断当前的下标i是否满足递增的条件满足的话就进行dp【i】的重新赋值。之后要更新接受的最长递…...

Swing程序设计(10)列表框,文本框,文本域,密码框

文章目录 前言一、列表框二、文本框&#xff08;域&#xff09; 1.文本框2.文本域三、密码框总结 前言 该篇文章简单介绍了Java中Swing组件里的列表框、文本框、密码框。 一、列表框 列表框&#xff08;JList&#xff09;相比下拉框&#xff0c;自身只是在窗体上占据固定的大小…...

【Java八股面试系列】JVM-常见参数设置

目录 堆内存相关 显式指定堆内存–Xms和-Xmx 显式新生代内存(Young Generation) 显式指定永久代/元空间的大小 垃圾收集相关 垃圾回收器 GC 日志记录 处理 OOM JDK监控和故障处理工具总结 堆内存相关 Java 虚拟机所管理的内存中最大的一块&#xff0c;Java 堆是所有线…...

【Python--Web应用框架大比较】

&#x1f680; 作者 &#xff1a;“码上有前” &#x1f680; 文章简介 &#xff1a;Python &#x1f680; 欢迎小伙伴们 点赞&#x1f44d;、收藏⭐、留言&#x1f4ac; Django Django太重了&#xff0c;除了web框架&#xff0c;自带ORM和模板引擎&#xff0c;灵活和自由度不…...

Effective Objective-C 学习第三周

理解引用计数 Objective-C 使用引用计数来管理内存&#xff1a;每个对象都有个可以递增或递减的计数器。如果想使某个对象继续存活&#xff0c;那就递增其引用计数&#xff1a;用完了之后&#xff0c;就递减其计数。计数变为 0时&#xff0c;就可以把它销毁。 在ARC中&#xf…...

人工智能学习与实训笔记(四):神经网络之NLP基础—词向量

人工智能专栏文章汇总&#xff1a;人工智能学习专栏文章汇总-CSDN博客 本篇目录 四、自然语言处理 4.1 词向量 (Word Embedding) 4.1.1 词向量的生成过程 4.1.2 word2vec介绍 4.1.3 word2vec&#xff1a;skip-gram算法的实现 4.2 句向量 - 情感分析 4.2.1 LSTM (Long S…...

【教程】Kotlin语言学习笔记(一)——认识Kotlin(持续更新)

写在前面&#xff1a; 如果文章对你有帮助&#xff0c;记得点赞关注加收藏一波&#xff0c;利于以后需要的时候复习&#xff0c;多谢支持&#xff01; 【Kotlin语言学习】系列文章 第一章 《认识Kotlin》 文章目录 【Kotlin语言学习】系列文章一、Kotlin介绍二、学习路径 一、…...

MySQL性能分析1

1、查看执行频次 查看当前数据库的INSERT,UPDATE,DELETE,SELECT的访问频次&#xff0c;得到当前数据库是以插入&#xff0c;更新和删除为主还是以查询为主&#xff0c;如果是以插入&#xff0c;更新和删除为主的话&#xff0c;那么优化比重可以轻一点儿。 语法&#xff1a; …...

四、案例 - Oracle数据迁移至MySQL

Oracle数据迁移至MySQL 一、生成测试数据表和数据1.在Oracle创建数据表和数据2.在MySQL创建数据表 二、生成模板文件1.模板文件内容2.模板文件参数详解2.1 全局设置2.2 数据读取&#xff08;Reader&#xff09;2.3 数据写入&#xff08;Writer&#xff09;2.4 性能设置 三、案例…...

ABC340 A-F题解

文章目录 A题目AC Code&#xff1a; B题目AC Code&#xff1a; C题目AC Code&#xff1a; D题目AC Code&#xff1a; E题目思路做法时间复杂度AC Code&#xff1a; F题目思路AC Code&#xff1a; A 题目 模拟即可&#xff0c;会循环都能写。 AC Code&#xff1a; #include …...

微软 CMU - Tag-LLM:将通用大语言模型改用于专业领域

文章目录 一、前言二、主要内容三、总结 &#x1f349; CSDN 叶庭云&#xff1a;https://yetingyun.blog.csdn.net/ 一、前言 论文地址&#xff1a;https://arxiv.org/abs/2402.05140 Github 地址&#xff1a;https://github.com/sjunhongshen/Tag-LLM 大语言模型&#xff08…...

B站m4s转MP4终极指南:一键解决缓存视频兼容性问题

B站m4s转MP4终极指南&#xff1a;一键解决缓存视频兼容性问题 【免费下载链接】m4s-converter 一个跨平台小工具&#xff0c;将bilibili缓存的m4s格式音视频文件合并成mp4 项目地址: https://gitcode.com/gh_mirrors/m4/m4s-converter 你是否曾经遇到过这样的困扰&#…...

仅限专业影像团队内部流通的Perplexity摄影搜索矩阵(含ISO/快门/色温等8维结构化Prompt库)

更多请点击&#xff1a; https://codechina.net 第一章&#xff1a;Perplexity摄影技巧搜索的底层逻辑与架构设计 Perplexity 并非专为摄影设计的工具&#xff0c;但其搜索系统在处理“摄影技巧”类长尾、意图模糊、多模态关联的问题时&#xff0c;展现出独特的推理架构特征。…...

书匠策AI论文生存指南:降重降AIGC,2025届毕业生的“反内卷外挂“

&#x1f3ac; 开场&#xff1a;一场关于"论文能不能活着毕业"的生存实验 朋友们&#xff0c;今天咱不开学术讲座&#xff0c;咱开一场生存发布会。 2025年写毕业论文是什么体验&#xff1f;你辛辛苦苦码了两万字&#xff0c;满怀信心点了查重——好家伙&#xff0…...

3步打造你的专属Minecraft领地世界:PlotSquared终极指南

3步打造你的专属Minecraft领地世界&#xff1a;PlotSquared终极指南 【免费下载链接】PlotSquared PlotSquared - Reinventing the plotworld 项目地址: https://gitcode.com/gh_mirrors/pl/PlotSquared 还在为Minecraft服务器管理混乱而烦恼吗&#xff1f;想要创建一个…...

观察Taotoken在多模型自动路由下的服务可用性与容灾表现

&#x1f680; 告别海外账号与网络限制&#xff01;稳定直连全球优质大模型&#xff0c;限时半价接入中。 &#x1f449; 点击领取海量免费额度 观察Taotoken在多模型自动路由下的服务可用性与容灾表现 在构建基于大模型的应用时&#xff0c;服务的稳定性是保障业务连续性的基…...

在Node.js后端服务中集成Taotoken实现稳定高效的多模型调用

&#x1f680; 告别海外账号与网络限制&#xff01;稳定直连全球优质大模型&#xff0c;限时半价接入中。 &#x1f449; 点击领取海量免费额度 在Node.js后端服务中集成Taotoken实现稳定高效的多模型调用 对于需要构建AI功能的后端开发者而言&#xff0c;直接对接多个模型厂商…...

HPM6750 RISC-V高性能MCU开发实战:从双核应用到图形加速

1. 项目概述与核心价值最近几年&#xff0c;RISC-V架构在嵌入式领域的声量越来越大&#xff0c;从最初的学术研究到如今在工业控制、边缘计算等场景的落地&#xff0c;生态的成熟度肉眼可见。作为一名长期混迹在嵌入式开发一线的工程师&#xff0c;我对于新架构、新平台总是抱有…...

Few-shot vid2vid自定义数据集训练指南:从标签图到真实视频的转换

Few-shot vid2vid自定义数据集训练指南&#xff1a;从标签图到真实视频的转换 【免费下载链接】few-shot-vid2vid Pytorch implementation for few-shot photorealistic video-to-video translation. 项目地址: https://gitcode.com/gh_mirrors/fe/few-shot-vid2vid Few…...

别再只改IMEI了!深入理解高通基带QCN:从参数结构到软件检测的完整对抗思路

高通基带QCN参数体系解析与多维设备指纹对抗策略 在移动设备安全领域&#xff0c;设备标识参数的修改与检测始终是一场动态博弈。随着安卓系统安全机制的不断升级&#xff0c;简单的IMEI修改早已无法应对现代应用的多维指纹检测体系。理解高通基带QCN参数的组织结构及其在系统中…...

从原理到实战:晶体管开关电路设计与常见问题解析

1. 项目概述&#xff1a;为什么我们需要晶体管开关&#xff1f;如果你玩过Arduino或者树莓派&#xff0c;肯定遇到过这样的尴尬&#xff1a;想用单片机的一个GPIO引脚直接点亮一个12V的汽车大灯&#xff0c;或者驱动一个小马达&#xff0c;结果要么灯不亮&#xff0c;要么马达纹…...