快照备份


MySQL数据库本身并不支持快照功能
因此快照备份 是指 通过文件系统支持的快照功能 对数据库 进行备份
备份的前提是 将所有数据库文件 放在同一文件分区中,然后对该分区进行快照操作

支持快照功能的文件系统和设备包括FreeBSD的UFS文件系统,Solaris的ZFS文件系统,GNU/Linux的逻辑管理器(Logical Volume Manager,LVM)等

LVM是LINUX系统下对磁盘分区进行管理的一种机制

LVM在硬盘和分区之上建立一个逻辑层,来提高磁盘分区管理的灵活性

管理员可以通过LVM系统轻松管理磁盘分区

例如,将若干个磁盘分区连接为一个整块的卷组(Volume Group),形成一个存储池

管理员可以在卷组上随意创建逻辑卷(Logical Volumes),并进一步在逻辑卷上创建文件系统

管理员通过LVM可以方便地调整卷组的大小,并且可以对磁盘存储按照组的方式进行命名、管理和分配

简单地说,用户可以通过LVM由物理块设备(如硬盘等)创建物理卷,由一个或多个物理卷创建卷组,最后从卷组中创建任意个逻辑卷(不超过卷组大小)

mysql 快照是快照整个数据库吗 mysql快照备份_快照备份


由多块磁盘组成的逻辑卷LV0如下所示:

mysql 快照是快照整个数据库吗 mysql快照备份_mysql_02


命令lvdisplay可以用来查看当前系统中有哪些逻辑卷LVM使用了写时复制(Copy-on-write)技术来创建快照

当创建一个快照时,仅复制 原始卷中数据 的 元数据(meta data),并不会有 数据的物理操作,因此 快照的创建过程 是非常快的

当快照创建完成,原始卷上有写操作时,快照会跟踪原始卷块的改变,将 要改变的数据 在改变之前 复制到 快照预留的空间里,因此这个原理的实现叫做写时复制

而对于快照的读取操作

如果读取的数据块 是 创建快照后没有修改过的,那么会将 读操作 直接重定向到 原始卷上

如果要读取的 是已经 修改过的块,则将读取 保存在 快照中该块 在原始卷上 改变之前的数据

因此,采用写时复制机制 保证了 读取快照时 得到的数据与 快照创建时一致

mysql 快照是快照整个数据库吗 mysql快照备份_逻辑卷_03

命令lvcreate可以用来创建一个快照,--permission r表示创建的快照是只读的

在快照制作完成后可以用lvdisplay命令查看
输出中的COW-table size字段表示该快照最大的空间大小
Allocated to snapshot字段表示该快照目前空间的使用状况

用LVM快照 备份 InnoDB存储引擎表 相当简单,只要把 与 InnoDB存储引擎 相关的文件 如 共享表空间、独立表空间、重做日志文件等 放在 同一个逻辑卷中,然后 对这个逻辑卷 做快照备份 即可

在对InnoDB存储引擎文件做快照时,数据库无须关闭,即可以进行在线备份
虽然此时数据库中可能还有任务需要往磁盘上写数据,但这不会妨碍备份的正确性
因为InnoDB存储引擎是事务安全的引擎,在下次恢复时,数据库 会自动检查 表空间中 页的状态,并决定 是否应用 重做日志(redo log),恢复就好像数据库被意外重启了