我想任何一位维护过数据库的人都知道数据库是需要备份的,也知道备份数据库是数据库维护必不可少的一件事情。那么是否每一个人都知道自己所做的备份到底是为了应对哪些场景的呢?抑或者说我们每个人是否都很清楚的知道,为什么一个数据库需要作备份呢?读到这里,我想很多读者朋友都会嗤之以鼻, “备份的作用不就是为了防止原数据丢失吗,这谁不知道?”。确实,数据库的备份很大程度上的作用,就是当我们的数据库因为某些原因而造成部分或者全部数据丢失后,方便找回丢失的数据。但是,不同类型的数据库备份, 所能应付情况是不一样的,而且,数据库的备份同时也还具有其他很多的作用。而且我想, 每个人对数据库备份的作用的理解可能都会有部分区别。
下面我就列举一下我个人理解的我们能够需要用到数据库备份的一些比较常见的情况吧。
一、数据丢失应用场景
1、人为操作失误造成某些数据被误操作;
2、软件 BUG 造成数据部分或者全部丢失;
3、硬件故障造成数据库数据部分或全部丢失;
4、安全漏洞被入侵数据被恶意破坏;
二、非数据丢失应用场景
5、特殊应用场景下基于时间点的数据恢复;
6、开发测试环境数据库搭建;
7、相同数据库的新环境搭建;
8、数据库或者数据迁移;
上面所列出的只是一些常见的应用场景而已,除了上面这几种场景外,数据库备份还会有很多其他应用场景,这里就不一一列举了。那么各位读者过曾经或是现在所做的数据库备份到底是为了应对以上哪一种(或者几种)场景?或者说,我们所做的数据库备份能够应对以上哪几种应用场景?不知道这个问题大家是否有考虑过。
我们必须承认,没有哪一种数据库备份能够解决所有以上列举的几种常见应用场景, 即使仅仅只是数据丢失的各种场景都无法通过某一种数据库备份完美的解决,当然也就更不用说能够解决所有的备份应用场景了。
比如当我们遇到磁盘故障,丢失了整个数据库的所有数据,并且无法从已经出现故障的硬盘上面恢复出来的时候,我们可能必须通过一个实时或者有短暂时间差的复制备份数据库存在。当然如果没有这样的一个数据库,就必须要有最近时间的整个数据库的物理或者逻辑备份数据,并且有该备份之后的所有物理或者逻辑增量备份,以期望尽可能将数据恢复到出现故障之前最近的时间点。而当我们遇到认为操作失误造成数据被误操作之后,我们需要有一个能恢复到错误操作时间点之前的瞬间的备份存在,当然这个备份可能是整个数据库的备份,也可以仅仅只是被误操作的表的备份。而当我们要做跨平台的数据库迁移的时候,我们所需要的又只能是一个逻辑的数据库备份,因为平台的差异可能使物理备份的文件格式在两个平台上无法兼容。
既然没有哪一种很多中数据库备份能够完美的解决所有的应用场景,而每个数据库环境所需要面对的数据库备份应用场景又可能各不一样,可能只是需要面对很多种场景中的某一种或几种,那么我们就非常有必要指定一个合适的备份方案和备份策略,通过最简单的技术和最低廉的成本,来满足我们的需求。