MySQL(InnoDB剖析):47---备份与恢复总体概述

一、根据不同的类型来划分备份

  • 根据不同的类型来划分备份的方法,可以分为以下几种:
    • Hot Backup(热备)
    • Cold Backup(冷备)
    • Warm Backup(温备)

Hot Backup(热备)

  • 是指在数据库运行时进行直接备份,对正在运行的数据库没有任何影响
  • 这种方法在MySQL官方手册中被称为Online Backup(在线备份)

Cold Backup(冷备)

  • 是指备份操作是在数据库停止的情况下,这种备份最为简单,一般只需要复制相关的数据库物理文件即可
  • 这种方法在MySQL官方手册中被称为Offline Backup(离线备份)

Warm Backup(温备)

  • 是指在数据库运行时进行的,但是对当前数据库的操作会有所影响,例如加一个全局读锁以保证备份数据的一致性

二、根据备份后文件的内容来划分备份

  • 根据备份后文件的内容,备份又分为:
    • 逻辑备份
    • 裸文件备份

逻辑备份

  • 是指备份出的文件内容是可读的,一般是文本文件。内容一般是由一条条的SQL语句组成,或者是表内实际数据组成
  • 若mysqldump和select * into outfile的方法
  • 这类方法的好处是可以观察导出文件的内容,一般适用于数据库的升级、迁移等工作。但是缺点是恢复所需要的时间比较长

裸文件备份

  • 是指复制数据库的物理文件
  • 既可以是在数据库运行中复制(如ibbackup、xtrabackup这类工具),也可以是在数据库停止运行时直接的数据文件复制
  • 这些备份的时间往往比逻辑备份速度短些

三、根据备份数据库的内容来划分备份

  • 根据备份数据库的内容来分,备份又可以分为:
    • 完全备份
    • 增量备份
    • 日志备份

完全备份

  • 是指对数据库进行一个完整的备份

增量备份

  • 是指对上次完全备份的基础上,对于更改的数据进行备份
  • 对于MySQL数据库来说,官方没有提供真正的增量备份方法,大部分是通过二进制日志完成增量备份的工作。这种备份较之真正的增量备份来说,效率比较低。假设有100GB的数据库,要通过二进制日志完成备份,可能同一个页需要执行多次的SQL语句完成重做的工作。但是对于真正的增量备份来说,只需要记录当前每页最后的检查点的LSN,如果大于之前全备时的LSN,则备份该页,否则不用备份,这大大加快了备份的速度和恢复的时间,同时这也是xtrabackup工具增量备份的原理

日志备份

  • 是指对MySQL数据库二进制日志的备份,通过对一个完全备份进行二进制日志的重做(replay)来完成数据库的point-in-time的恢复工作
  • MySQL数据库复制(replication)的原理就是异步实时地讲二进制日志重做传送并应用到从(slave/standby)数据库

四、数据库备份一致性的问题

  • 此外需要理解数据库备份的一致性,这种备份要求在备份的时候在这一时间点上是一致的
  • 例如来说,在一个网络游戏中有一个玩家购买了道具,这个事务的过程是:先扣除相应的金钱,然后向其装备表中插入道具,确保扣费和得到的道具是互相一致的。否则,在恢复时,可能出现金钱被扣除而装备丢失的问题
  • 对于InnoDB来说,因为其支持MVCC功能,因此实现一致的备份比较简单。用户可以先开启一个事务,然后导出一组相关的表,最后提交。当然用户的事务隔离级别必须设置为REPEATABLE READ,这样的做法就可以给出一个完美的一致性备份。然而这个方法的前提是需要用户正确地设计应用程序。对于上述的购买道具的过程,不可以分为两个事务来完成(如一个完成扣费,一个完成道具的购买)。若备份这时发生在两者之间,则由于逻辑设计的问题,导致备份出的数据依然不是一致的

mysqldump备份的--single-transaction选项

  • 对于mysqldump工具来说,可以添加--single-transaction选项获得InnoDB存储引擎的一致性备份,原理和之前所说的相同
  • 需要了解的是,这时的备份是在一个执行时间很长的事务中完成的
  • 另外,对于InnoDB的备份,务必加上--single-transaction选项
发布了1481 篇原创文章 · 获赞 1026 · 访问量 38万+

猜你喜欢

转载自blog.csdn.net/qq_41453285/article/details/104372644