热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

初探MySQL数据备份及备份原理

相信通过上一篇文章《数据丢失如当头棒喝,数据备份重如山!》,很多人对于数据备份的重要性有了深刻的认识,本文将以MySQL为例带大家进一步了解

相信通过上一篇文章《数据丢失如当头棒喝,数据备份重如山!》,很多人对于数据备份的重要性有了深刻的认识,本文将以MySQL为例带大家进一步了解数据备份的原理和初步实践。

根据需求的不同,数据备份的方式也不同,MySQL官方给定的备份方式有三种,分别是冷备、热备和温备;如果以备份的数据集为划分标准,那么可划分为完全备份和部分备份;如果是以备份时的接口为划分标准,那么可分为物理备份、逻辑备份、完全备份、增量备份和差异备份。

后面两种备份的分类方式比较容易理解,下面我们着重介绍一下冷备、热备和温备。

  • 冷备:简单来说,就是数据必须下线后备份。在备份之前,停止MySQL实例的运行,并且在整个备份过程中,用户都无法访问数据库。

  • 热备:简单来说,就是数据不离线,读写可以正常进行,MySQL实例始终处于运行状态。

  • 温备:简单来说,就是全局施加共享锁,只能读,不能写。在备份过程中,MySQL实例虽然仍是运行的,但是不能进行更新或修改等操作。

数据、配置文件、代码(存储过程、存储函数、触发器)、os相关的配置文件、复制相关的配置以及二进制日志都是我们要备份的对象。那么问题来了,如何来备份上述这些呢?我们以文件系统快照(LVM)、逻辑备份工具Mysqldump、Mydumper以及物理备份工具Xtrabackup这四种方案为例,剖析一下MySQL数据备份的原理。

快照备份

快照备份是我们上文提到的热备份的一种,通过文件系统支持的快照功能对数据库进行备份。在MySQL中使用快照备份只需将数据文件、日志文件都放在一个逻辑卷中,并对该逻辑卷快照备份。快照备份倾向于防范误操作,一旦操作失误,就可以利用快照恢复到之前的时间点,不过,因为快照只能是在本地,如果磁盘损坏,那么快照也就损坏,备份也就消失了。

初探MySQL数据备份及备份原理

图源网络

Mysqldump

Mysqldump是MySQL自带的备份工具,通过create table、drop table和insert into 等SQL语句,将数据库中的数据导出成.sql文件。由于Mysqldump依赖数据库层的转换,并不关心底层的存储引擎,所以适用范围更广泛,并且可以在不同MySQL版本之间切换。也同样是因为此,Mysqldump生成的备份文件很大、速度较慢,且在备份过程中对数据库的访问有较大的影响,不适用于数据量大、业务压力高的实例。

Mydumper

Mydumper与Mysqldump的原理类似,但其有一个特点就是可以采用多线程并行备份,大大提高了数据导出的速度。该工具由MySQL、Facebook、skysql公司的开发人员一起开发维护,由轻量级C语言开发。据说,执行速度比mysqldump快10倍,支持事务和非事务表的一致性备份、导出binlog、多线程备份、以守护进程的形式工作,定时备份等等。

初探MySQL数据备份及备份原理

图源网络

XtraBackup

XtraBackup可能是现在最为广泛的备份方式,它是 Percona 公司开发的一个用于 MySQL 数据库物理热备的备份工具,支持 MySQl(Oracle)、Percona Server 和 MariaDB,并且全部开源。因为XtraBackup是物理备份,所以其是靠拷贝数据库文件和日志来完成备份,速度更快,其中最主要的工具集是 innobackupex(备份InnoDB表) 和 xtrabackup(备份非InnoDB表),前者是一个 perl 脚本,后者是 C/C++ 编译的二进制。

初探MySQL数据备份及备份原理

图源网络


推荐阅读
  • Java String与StringBuffer的区别及其应用场景
    本文主要介绍了Java中String和StringBuffer的区别,String是不可变的,而StringBuffer是可变的。StringBuffer在进行字符串处理时不生成新的对象,内存使用上要优于String类。因此,在需要频繁对字符串进行修改的情况下,使用StringBuffer更加适合。同时,文章还介绍了String和StringBuffer的应用场景。 ... [详细]
  • Python SQLAlchemy库的使用方法详解
    本文详细介绍了Python中使用SQLAlchemy库的方法。首先对SQLAlchemy进行了简介,包括其定义、适用的数据库类型等。然后讨论了SQLAlchemy提供的两种主要使用模式,即SQL表达式语言和ORM。针对不同的需求,给出了选择哪种模式的建议。最后,介绍了连接数据库的方法,包括创建SQLAlchemy引擎和执行SQL语句的接口。 ... [详细]
  • 在Oracle11g以前版本中的的DataGuard物理备用数据库,可以以只读的方式打开数据库,但此时MediaRecovery利用日志进行数据同步的过 ... [详细]
  • 本文介绍了在开发Android新闻App时,搭建本地服务器的步骤。通过使用XAMPP软件,可以一键式搭建起开发环境,包括Apache、MySQL、PHP、PERL。在本地服务器上新建数据库和表,并设置相应的属性。最后,给出了创建new表的SQL语句。这个教程适合初学者参考。 ... [详细]
  • 本文讨论了在数据库打开和关闭状态下,重新命名或移动数据文件和日志文件的情况。针对性能和维护原因,需要将数据库文件移动到不同的磁盘上或重新分配到新的磁盘上的情况,以及在操作系统级别移动或重命名数据文件但未在数据库层进行重命名导致报错的情况。通过三个方面进行讨论。 ... [详细]
  • ALTERTABLE通过更改、添加、除去列和约束,或者通过启用或禁用约束和触发器来更改表的定义。语法ALTERTABLEtable{[ALTERCOLUMNcolu ... [详细]
  • 本文介绍了iOS数据库Sqlite的SQL语句分类和常见约束关键字。SQL语句分为DDL、DML和DQL三种类型,其中DDL语句用于定义、删除和修改数据表,关键字包括create、drop和alter。常见约束关键字包括if not exists、if exists、primary key、autoincrement、not null和default。此外,还介绍了常见的数据库数据类型,包括integer、text和real。 ... [详细]
  • MyBatis多表查询与动态SQL使用
    本文介绍了MyBatis多表查询与动态SQL的使用方法,包括一对一查询和一对多查询。同时还介绍了动态SQL的使用,包括if标签、trim标签、where标签、set标签和foreach标签的用法。文章还提供了相关的配置信息和示例代码。 ... [详细]
  • Oracle优化新常态的五大禁止及其性能隐患
    本文介绍了Oracle优化新常态中的五大禁止措施,包括禁止外键、禁止视图、禁止触发器、禁止存储过程和禁止JOB,并分析了这些禁止措施可能带来的性能隐患。文章还讨论了这些禁止措施在C/S架构和B/S架构中的不同应用情况,并提出了解决方案。 ... [详细]
  • Java学习笔记之使用反射+泛型构建通用DAO
    本文介绍了使用反射和泛型构建通用DAO的方法,通过减少代码冗余度来提高开发效率。通过示例说明了如何使用反射和泛型来实现对不同表的相同操作,从而避免重复编写相似的代码。该方法可以在Java学习中起到较大的帮助作用。 ... [详细]
  • 本文介绍了Oracle存储过程的基本语法和写法示例,同时还介绍了已命名的系统异常的产生原因。 ... [详细]
  • MySQL中的MVVC多版本并发控制机制的应用及实现
    本文介绍了MySQL中MVCC的应用及实现机制。MVCC是一种提高并发性能的技术,通过对事务内读取的内存进行处理,避免写操作堵塞读操作的并发问题。与其他数据库系统的MVCC实现机制不尽相同,MySQL的MVCC是在undolog中实现的。通过undolog可以找回数据的历史版本,提供给用户读取或在回滚时覆盖数据页上的数据。MySQL的大多数事务型存储引擎都实现了MVCC,但各自的实现机制有所不同。 ... [详细]
  • Oracle seg,V$TEMPSEG_USAGE与Oracle排序的关系及使用方法
    本文介绍了Oracle seg,V$TEMPSEG_USAGE与Oracle排序之间的关系,V$TEMPSEG_USAGE是V_$SORT_USAGE的同义词,通过查询dba_objects和dba_synonyms视图可以了解到它们的详细信息。同时,还探讨了V$TEMPSEG_USAGE的使用方法。 ... [详细]
  • 本文介绍了一个误删Oracle数据文件导致数据库无法打开的问题,并提供了解决方式。解决方式包括切换到mount状态、离线删除报错的数据文件等。 ... [详细]
  • 本文主要复习了数据库的一些知识点,包括环境变量设置、表之间的引用关系等。同时介绍了一些常用的数据库命令及其使用方法,如创建数据库、查看已存在的数据库、切换数据库、创建表等操作。通过本文的学习,可以加深对数据库的理解和应用能力。 ... [详细]
author-avatar
互听互粉2010
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有