快照与备份是两个不同的概念.
先来看快照
快照,其本质类似于数据库的照片,也就是在某个特定时间点(创建快照的时间点)给数据库拍个照放在那儿,但是这个照片是一个新的数据库,可以应用SQL语句;
快照数据库里的数据是不变的,创建快照后系统会对原数据库的所有数据页做个标识,如果数据页在创建快照后被修改,会复制一个数据页出来,没有修改的数据页则不会有快照(原数据库和快照数据库共用该数据页);
从这样来看,快照存在的时间越长,对系统的压力会越大(要维护的变化数据页太多);
一般来说快照用在数据库的镜像机上,因为镜像机上的数据库永远是Restoring状态,可以在某个特定的时间点生成一个快照,这样就可以在镜像机上提供一个可访问的数据库,用来为数据仓库提供数据源比较合适;
再来看备份
备份,其本质是一个副本,相当于在某个时间点把数据库里的所有对象内容都COPY一份,放到一个特定的文件里(备份文件,一般是.bak);
这个文件不是一个数据库,不能直接应用SQL,必须先通过还原的方式还原到一个数据库(可以是和原数据库名称一致,也可以是一个新的数据库),之后才能访问里面的数据;
因为备份的结果是文件,这个文件可以被COPY走,或者写入磁带(放到银行里),从而实现离线容灾;
此外,备份是个很复杂的概念,还涉及到数据库的恢复模型、日志处理等很复杂的东西,需要自己先系统学习下备份还原的相关概念。
快照这个词常用来表达某种事物的确切状态,因为事物是变动的,文件系统中的文件便是如此,文件快照就是文件本身,只是增加了时间副词而已;
取个栗子,假设我有一个hello.txt文件需要备份,随着版本的变化,文件内容的变化如下图所示:
在的第一个版本,文件的内容是123,第二个版本内容是123456789,第三个版本内容是123456。当我们说snapshot1(快照1)指的是内容为123的hello.txt文件,说snapshot2(快照2)说的是内容为123456789的hello.txt文件。
在以快照方式备份的系统中(如git),文件一旦发生变化,备份时就会根据内容生成一个快照(其实就是包含某内容的文件)存储到数据库中,文件没有变化则不会生成新的快照,这些快照(文件)和版本号联系在一起,所有可以通过版本号来恢复文件的历史状态。
(实际使用中来说备份可以用来恢复数据,快照则不能)