MySQL备份基础知识

2024年 3月 7日 66.8k 0

徐老师写的这篇文章《MySQL的备份》给我们介绍了MySQL数据库中备份的一些基础知识,值得了解学习。

数据库备份是DBA的典型任务,可以将数据从一个系统传输到另外一个系统,也可以基于生产系统的特定状态创建一个开发服务器。除此之外,备份还用于数据库恢复,可以将一个发生故障的系统恢复,也可以将系统恢复到发送用户错误之前的特定状态。利用备份的系统可以将其与生产系统分离,在不影响生产系统的性能的前提下,对数据进行审计和分析。

备份的类型

备份的类型影响应用程序与数据库的交互,主要的备份类型包括如下,

  • 热备份:允许应用程序完整访问数据。

    • 备份可以在数据读取和修改期间进行,系统保留读取和修改数据的能力。在备份期间采用多版本并行控制(MVCC),会使用行锁。

  • 冷备份:不允许应用程序访问数据。

    • 备份时数据无法被用户访问,通常情况下,服务器需要进入拒绝访问模式或关机。用户在备份期间无法读取和修改任何数据。

  • 温备份:允许应用程序进行只读操作,不允许更改数据。

    • 备份时允许用户读取数据,无需完全封闭用户,但缺点是备份期间无法修改数据、可能会导致性能问题。

备份方法

备份可以采取不同的方法与技术进行,方法包括如下,

  • 逻辑备份:通过文本再现,SQL语句或数据文件使用逗号或制表符分隔的文件、XML文件等。备份的结果中包含SQL语句或用于重构数据库的数据。

  • 物理备份:MySQL数据库文件的二进制副本。

  • 基于快照(物理备份)

  • 基于复制(物理或逻辑备份)

  • 增量备份:通过创建和刷新MySQL二进制日志实现

逻辑备份

MySQL的逻辑备份可以通过SQL语句、“mysqldump”,或“mysqlpump”将数据进行转储来实现。数据转储基于一个指定的时间点。逻辑备份的优势在于创建一个SQL脚本,用户可以在MySQL服务器上执行,并可以利用该脚本在不同架构的主机或服务器上重新加载数据。逻辑备份可以备份全部的数据库或其中的一个/部分数据库或表,并且可以备份本地和远程的服务器。其缺点是备份速度慢,默认的情况下需要对表加锁(非innoDB表),以防止用户在备份期间更改数据。此外,备份语句使用的磁盘空间可能会超过实际数据使用的磁盘空间,因为通常情况下,文本数据要比二进制数据消耗更多的磁盘空间,但对于InnoDB而言,由于其在数据页中保存数据,会包含一部分未使用的空间,它所占用的磁盘空间会超过实际数据大小。

逻辑备份的要求

通常情况下逻辑备份属于温备份,使用时有如下要求,

  • 创建备份时,要求MySQL服务器必须运行。

  • 备份期间应用程序可以执行只读操作。

  • 服务器通过读取正在备份的表的结构和内容来创建文件,然后将结构和数据转换为SQL语句或文本文件。

  • 利用InnoDB 的MVCC可以实现热备份,使用“REPEATABLE READ”隔离级别实现一致的时间点备份。

逻辑备份的性能

通常情况下,逻辑备份的速度远慢于物理备份,MySQL服务器必须读取表并解释表的内容,之后将其转换为磁盘文件或者发送到一个客户端程序。逻辑备份的恢复慢于物理备份的恢复,原因在于恢复过程中执行的脚本包含独立的创建和插入语句,这些语句在后台创建表,并插入数据。

物理备份

物理备份主要是指复制数据文件。用户可以使用标准的“tar”,“cp”等命令操作,也可以通过物理镜像、块操作,及快照文件等实现。数据恢复时,必须恢复到相同的MySQL版本和存储引擎。物理备份可以跨服务器架构进行恢复,但要求MySQL的存储引擎层文件必须是二进制格式并能够在不同服务器上使用。

物理备份的优势在于执行备份和恢复时远超逻辑备份的速度,其快速的原因是其作为一个文件或文件系统进行复制,这些副本以MySQL本身在磁盘上存储数据库的完全相同的格式保存数据库,备份文件的大小与数据文件的实际大小相同。

物理备份期间,服务器不能修改文件。InnoDB要求服务器关机,MyISAM要求只读。用户可以使用快照、MySQL复制,DRDB等方法在后台分开数据文件,以降低备份对MySQL和应用程序的影响。

在线磁盘复制

用户可以使用RAID镜像,DRDB等技术进行在线磁盘复制。这些技术提供在线或者接近在线的备份能力,可以在硬件发生故障时快速恢复数据,其缺点是因为它具有实时复制的能力,无法利用该技术处理人为或应用程序导致的数据丢失。

基于快照的备份

基于快照的备份等同于创建了一个具有时间点的数据副本,提供了一个逻辑上冻结的文件系统版本。快照无需包含具有一致性的数据库镜像,当利用快照进行恢复时,InnoDB必须执行它自身的恢复过程,以确保完整的事务。

基于快照的备份使用MySQL外部的快照功能,例如,数据文件在Linux的LVM2 逻辑卷,包含一个ext4的文件系统,用户可以创建一个基于快照的备份。基于快照的备份系统适用于支持事务的存储引擎,使用“Copy-on-write”方法来确保它们几乎是瞬时完成的。“Copy-on-write”方法类似于InnoDB的UNDO日志和MVCC,当执行快照时,LVM标记随后更改的所有块,并记录这些块的快照版本。

基于MySQL复制的备份

MySQL支持单向的异步复制,在复制的拓扑中一台服务器作为主服务器,其余的服务器作为从服务器。备份时,主服务器作为生产环境的服务器使用,从服务器用于备份,该方法的优势是可以最大限度减小对生产环境的影响,缺点则是主从之间可能存在延迟、需要额外的服务器存放数据库的副本。

二进制日志备份

二进制日志备份记录了数据的变更,用于在上次完整备份后恢复到最新数据时使用。其优势是记录了完整的数据更改,用户可以安顺序保存应用多个二进制日志备份。其缺点是用户必须按照顺序从上一次的完整备份结束之后保存日志,恢复时间可能会很长。用户可以使用“mysqlbinlog”创建日志流,例如,

    mysqlbinlog --read-from-remote-server --host=server_host --raw --stop-never binlog.000101

    用户可以在MySQL的会话级别控制二进制日志的开启,例如:

      SET SQL_LOG_BIN = 1

      进行逻辑或物理备份时,需要刷新二进制日志进行同步,以用于备份。当需要进行增量备份时,需要复制增量部分的二进制日志。此外,二进制日志也适用于时间点恢复,用户可以识别出错的事务,并跳过该事务进行恢复。

      备份策略

      备份方法对比

      备份和恢复的策略取决于数据记录的完整性和备份频率的要求,以及能够承受的系统宕机时长和恢复数据量的要求。

      用户可以根据实际的要求选择不同的备份策略,如果有更高的要求,还可以组合不同的备份方法,实现更为复杂的备份策略。

      如果您认为这篇文章有些帮助,还请不吝点下文章末尾的"点赞"和"在看",或者直接转发pyq,

      近期更新的文章:《SELECT查询选择全表扫描不用索引的场景》《如何设计高可用高吞吐可拓展的系统架构?》《沧州客场之旅》《数据备份策略》《MySQL的索引介绍》《How to design a good API?》
      近期的热文:《推荐一篇Oracle RAC Cache Fusion的经典论文》
      《"红警"游戏开源代码带给我们的震撼》
      文章分类和索引:《公众号1400篇文章分类和索引》

      相关文章

      Oracle如何使用授予和撤销权限的语法和示例
      Awesome Project: 探索 MatrixOrigin 云原生分布式数据库
      下载丨66页PDF,云和恩墨技术通讯(2024年7月刊)
      社区版oceanbase安装
      Oracle 导出CSV工具-sqluldr2
      ETL数据集成丨快速将MySQL数据迁移至Doris数据库

      发布评论